MongoDB, WiredTiger: 需要更新所有文档中的一个字段 (700k)。会产生哪些副作用?
MongoDB, WiredTiger: Need to update one field in all documents (700k). Which side-effects will occur?
其中一个集合包含带有字段 "sc":[float]
的文档。我想遍历所有的文档,把这个改成"sc": float
,也就是去掉数组,把float值直接赋给key
不是吗,WiredTiger 附加了所有更新的文档,而不是像 MMap 那样尝试进行一些就地更新?
这基本上会使数据库的大小增加一倍,前半部分是过时的数据。
我需要调用 mongod -repair
来丢弃那些过时的文档,还是我需要做其他事情?
WT 在更新时总是重写文档,但它不是 NMAP,而是不使用填充,并且在空闲块中分配文档,所以如果我们有文档 1、2、3 - no1 有可能被移动到文件末尾(或最近的间隙),并且 no2 将分配在前面的 no1 space 中。
WT 的重要之处:
WiredTiger does ongoing compaction and reuse of space automatically.
为了确保文件的使用效率,我们可以根据 this 讨论强制 WT 使用较小的页面大小。
--wiredTigerCollectionConfigString="leaf_page_max=8KB"
另外 compact
可用于回收 space more here。
其中一个集合包含带有字段 "sc":[float]
的文档。我想遍历所有的文档,把这个改成"sc": float
,也就是去掉数组,把float值直接赋给key
不是吗,WiredTiger 附加了所有更新的文档,而不是像 MMap 那样尝试进行一些就地更新?
这基本上会使数据库的大小增加一倍,前半部分是过时的数据。
我需要调用 mongod -repair
来丢弃那些过时的文档,还是我需要做其他事情?
WT 在更新时总是重写文档,但它不是 NMAP,而是不使用填充,并且在空闲块中分配文档,所以如果我们有文档 1、2、3 - no1 有可能被移动到文件末尾(或最近的间隙),并且 no2 将分配在前面的 no1 space 中。
WT 的重要之处:
WiredTiger does ongoing compaction and reuse of space automatically.
为了确保文件的使用效率,我们可以根据 this 讨论强制 WT 使用较小的页面大小。
--wiredTigerCollectionConfigString="leaf_page_max=8KB"
另外 compact
可用于回收 space more here。