MongoDB/Docker中的zstd块压缩
我在 Windows 10 下使用 docker-compose 像这样:
version: '3'
services:
mongo:
image: mongo:4.2
ports:
- "27017:27017"
restart: always
volumes:
- type: bind
source: ${PWD}/mongod.conf
target: /etc/mongod.conf
entrypoint: ["mongod", "--bind_ip_all", "--config", "/etc/mongod.conf"]
我的 mongod.conf:
storage:
wiredTiger:
collectionConfig:
blockCompressor: zstd
configString: "allocation_size=64KB,internal_page_max=64KB,leaf_page_max=64KB"
当我docker exec docker_mongo_1 df使用和不使用 zstd时,我仍然使用相同的磁盘大小。使用 zstd:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 65792556 49263808 13156972 79% /data/db
没有:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 65792556 47991952 14428828 77% /data/db
(轻微的变化是由于插入数据的随机性,但文档的数量和它们的大小在彼此的百分之几以内。)我使用 mongodump 从 snappy 和 mongorestore 到 zstd 以确保大多数文档在运行一些测试之前没有受到影响。
Mongo docker 镜像是否需要 zstandard 安装?还是我缺少一些 mongodb/docker 配置?还是真的对我的数据无效?如果是这样:为什么会这样,我可以使其有效吗?还是 docker 平台有问题?还是 Windows 上的 Docker?
PS我不在 dba 论坛上发帖的原因是这个问题是多学科的。
回答
您通过 mongodb 测量磁盘使用情况的方法不是一个好方法。docker不模拟具有自己的虚拟磁盘的虚拟机,因此df实际显示主机的磁盘使用统计信息(因此您的数字包括在 docker 之外发生的所有磁盘活动)。最好du -sh在 mongodb 存储其数据的目录上运行。