嗨,费奥多尔!该
journalCompressor
设置与日志文件特别相关。日志通常不会被压缩,因为在将数据从 WiredTiger 内存缓存刷新到磁盘时,压缩它们会导致额外的延迟。这种延迟会渗透到写入问题。journalCompressor none
是我们配置中的默认值。
ObjectRocket 似乎对 DBaaS 有所了解
ObjectRocket是一家位于德克萨斯州奥斯汀的云数据库 (DBaaS) 公司,专注于 NoSQL 数据存储,包括 MongoDB 和 Redis。2013年,他们被Rackspace收购
你觉得journalCompressor
不活泼怎么样?这是 DBaaS 提供商的有效配置并且最适合大多数用例吗?
storage:
dbPath: "/data/mongodb"
journal:
enabled: true
engine: "wiredTiger"
wiredTiger:
engineConfig:
journalCompressor: none
directoryForIndexes: "/indexes/mongodb/"
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression: true
一般来说,我会将 MongoDB 设置保留为默认设置,除非已证明变体对您的常见工作负载有益(即通过实际测试和测量)。Snappy 压缩/解压缩通常没有太多开销,并且 I/O 通常比 CPU 更受资源限制。默认设置旨在“最适合大多数用例”,并在 MongoDB 部署和持续集成测试中得到更广泛的测试/使用。
WiredTiger 日志文件的大小限制为 100MB;当达到日志文件大小限制时,WiredTiger 会创建一个新的日志文件并将之前的日志文件同步到磁盘。使用默认
journalCompressor
设置的snappy
单个日志文件可以包含比没有压缩更多的数据。如果不进行压缩,将会创建更多的日志文件,并且会有更多的日志 I/O。CPU 与 I/O 使用率的正确权衡因您的部署和工作负载而异。如果您的部署有空闲的 CPU,您还可以考虑测试
zlib
压缩(期望更好的压缩但更多的 CPU 使用)。如果您担心日志文件和数据文件之间的 I/O 争用,
dbPath
或者想要对日志写入进行更精细的调整,因为日志写入是连续的而不是随机的,另一种选择是将日志目录符号链接到一个单独的挂载点。这种方法可能会影响您的备份策略(例如,如果您依赖文件系统快照),但是由于您已经在使用该directoryForIndexes
选项,我怀疑您已经意识到这个警告。有关生产部署的更多配置建议,请参阅 MongoDB 手册中的生产说明。