今天下午听外面来的云服务的工程师介绍, mongodb 云服务; 他说 mongo 的 query 是先加载索引,查询的具体数据会驻留内存,然后吃满内存,随着操作系统内存策略而改变存储大小; 但是 mysql 查询时也是先加载索引,再加载具体数据,但更多细节的区别 表示不清楚,大神来解释二者在查询时候的细节区别
1
liprais 2016-12-19 18:37:41 +08:00
完全不一样,与其说区别还不如说一样的地方
|
2
billlee 2016-12-19 22:01:19 +08:00
如果是现代的 WiredTiger, 在缓冲池的管理上和 InnoDB 没有大的区别,但 InnoDB 一般都是 O_DIRECT 绕过文件系统的 cache 的,而 WiredTiger 不会绕过文件系统 cache, 这个区别主要是因为 WiredTiger 默认启用了 snappy 压缩,在文件系统 cache 里的是压缩过的数据,而缓冲池里的未压缩的数据。 WiredTiger 有个默认的自动计算缓冲池大小的机制,会留出相当大的一部分内存给文件系统 cache 用。
|
3
tinybaby365 2016-12-19 22:13:44 +08:00
如果是用 mmap 存储引擎(老版本),内存不是自己控制的, mmap 把文件的内容映射到内存,读内存就是读文件,但这个内存的使用量不受使用者控制。极端情况下会使用所有能使用内存。一般不建议把 mongodb 和其他东西部署在同一台机器上。
|