AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 826181
Accepted
Antonius Bloch
Antonius Bloch
Asked: 2017-01-14 10:22:06 +0800 CST2017-01-14 10:22:06 +0800 CST 2017-01-14 10:22:06 +0800 CST

MongoDB 3.2 WiredTiger 压缩是否包括存储在 RAM 中的内容

  • 772

据我了解,WiredTiger 压缩日志、集合和索引。当它们存储在 RAM 中时,它是否也会压缩它们?

例如,如果我的压缩索引在磁盘上使用 10 MiB,我是否可以假设它们也使用 10 MiB 的 RAM?还是我应该期望 RAM 中有更大的未压缩索引?

mongodb
  • 1 1 个回答
  • 1087 Views

1 个回答

  • Voted
  1. Best Answer
    Stennie
    2017-01-14T15:15:01+08:002017-01-14T15:15:01+08:00

    WiredTiger 对磁盘和内存中的数据有不同的表示形式,并且对索引和集合数据使用不同的压缩方法。

    关于内存中压缩内容的答案有些细微差别,但高级摘要是:

    • 收集数据在文件系统缓存中压缩
    • 集合数据在 WiredTiger 内部缓存中未压缩
    • 索引在磁盘和内存中被压缩

    压缩方法

    默认情况下,WiredTiger 对集合数据使用 Snappy 块压缩,但还有其他可用选项,包括 zlib 压缩或不压缩。块压缩可以显着节省存储空间,但数据必须未经压缩才能被服务器处理。不管压缩选项如何,数据仍以与 WiredTiger 缓存中的内存表示不同的块格式写入磁盘。

    索引使用索引前缀压缩进行压缩,这有效地从索引字段中删除了公共前缀的重复数据。这对于复合索引尤其有效,因为前导字段值将与索引中其他字段的唯一值重复。前缀压缩还允许查询直接对压缩索引进行操作。

    RAM中压缩了什么?

    在 MongoDB 3.4(包括之前带有 WiredTiger 的 MongoDB 版本)中,RAM 中有两个重要的数据缓存:

    • WiredTiger 内部缓存,由cacheSizeGB配置设置控制。

      MongoDB 3.4 中的默认缓存大小是 50% RAM 减去 1GB 或 256MB 中的较大者。内部缓存中的集合数据未压缩,但索引数据仍使用前缀压缩。内部 WiredTiger 缓存中的数据实际上是当前工作集。

    • O/S 文件系统缓存,通常是未由 WiredTiger 缓存或其他进程使用的剩余空闲 RAM。

      文件系统缓存与磁盘表示相同。

    缓存调整

    请注意,WiredTiger 缓存并不代表 MongoDB 的总内存使用量:mongod仍需要在缓存之外分配内存用于其他用途,例如连接和数据处理(例如聚合、映射/归约、内存排序)。

    WiredTiger 内部缓存通常应保留默认大小或可能减小。如果您的数据压缩得很好并且未压缩的数据比 RAM 大得多,您将能够通过减少 WiredTiger 缓存大小以释放文件系统缓存的内存来在 RAM 中容纳更多数据。MongoDB 手册中有一个包含更多信息的常见问题解答:我应该将 WiredTiger 内部缓存设置为多大?.

    有关更多背景信息,我建议查看MongoDB 3.0博客文章中的 New Compression Options 和A Technical Introduction to WiredTiger演示文稿。

    • 3

相关问题

  • MongoDB 的 SELinux 设置

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve