【发布时间】:2021-01-23 13:55:00
【问题描述】:
据我所知,MonogoDB 缓存工作集在 RAM 中。
那么,如果我增加wiredTigerCacheSizeGB 与磁盘中所有数据一样多,它的工作速度是否与内存数据库一样快?
如果不是,有什么区别?
【问题讨论】:
标签: mongodb in-memory-database wiredtiger
据我所知,MonogoDB 缓存工作集在 RAM 中。
那么,如果我增加wiredTigerCacheSizeGB 与磁盘中所有数据一样多,它的工作速度是否与内存数据库一样快?
如果不是,有什么区别?
【问题讨论】:
标签: mongodb in-memory-database wiredtiger
见In-Memory Storage Engine和WiredTiger Storage Engine
(内存中)通过避免磁盘 I/O,内存中存储引擎允许更可预测的数据库操作延迟。
请记住,在设置 wiredTigerCacheSizeGB 时,您被限制为 10000 GB。您还应该禁用日志并将 storage.syncPeriodSecs 设置为 0 以提高 WiredTiger 的性能。但是,WiredTiger 仍然必须至少创建 WiredTiger.wt 和 WiredTiger.turtle...
【讨论】:
我无法回答你所有的问题。
cache 从磁盘读取数据并将其保存在 RAM 中。当您再次访问此类数据时,您会从 RAM 中读取它,而不是从磁盘中再次读取它 - 这会慢得多。
因此,如果您只需要读取一次数据,缓存将毫无用处。一些应用程序会预测您将来可能读取的数据,并提前将其放入缓存中。
MongoDB 内存数据库仅将所有数据放入 RAM,除了一些日志记录数据外,它不会从磁盘读取或写入任何内容。当您停止内存中的 MongoDB 进程时,所有数据都会丢失。
wiredTiger 存储引擎是 MongoDB 用来将数据持久存储在磁盘上的一种数据格式。
【讨论】:
如果您将wiredTigerCacheSizeGB 设置得足够高以容纳所有数据,那么您的所有读取都将从缓存中得到满足。写入将更新缓存并写入存储。
如果您使用内存配置,那么您的所有读取都将从内存中满足。写入只会进入内存,不会存储在磁盘上。
因此,如果您的工作负载主要是读取,那么大缓存的行为类似于内存数据库。如果您的工作负载有大量写入,那么大缓存配置可能会比较慢,因为它需要写入磁盘。
此外,内存数据库在发生崩溃时不会保留您的数据,因为它只将数据保存在内存中。
【讨论】: