Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB和更新到位_Mongodb - Fatal编程技术网

MongoDB和更新到位

MongoDB和更新到位,mongodb,Mongodb,我有一个非常大的MongoDB对象,大约2MB 我必须经常更新readCount字段,我需要确保操作非常快 我知道“就地更新”,我能够发送这个简单的操作 db.pages.update( { name:"SamplePage" }, { $inc: { readCount : 1 } } ); 但MongoDB如何在内部处理该操作? 它从磁盘加载所有文档,修改值并存储整个文档,或者,如果文档大小不变,它只能在磁盘上更新相对于readCount值的文件部分?MongoDB使用内存映射文件进行数据

我有一个非常大的MongoDB对象,大约2MB

我必须经常更新readCount字段,我需要确保操作非常快

我知道“就地更新”,我能够发送这个简单的操作

db.pages.update( { name:"SamplePage" }, { $inc: { readCount : 1 } } );
但MongoDB如何在内部处理该操作?
它从磁盘加载所有文档,修改值并存储整个文档,或者,如果文档大小不变,它只能在磁盘上更新相对于readCount值的文件部分?

MongoDB使用内存映射文件进行数据文件管理。这实际上意味着mongo不会从磁盘加载文档。相反,它尝试访问该文档所在的内存页。如果该页还不在RAM中,那么操作系统将继续从磁盘获取它

写作是完全一样的。Mongo试图写入内存页。如果它在RAM中,那么它的速度非常快(只需交换内存中的一些位)。该页被标记为脏页,操作系统将负责将其刷新回磁盘(保留您的更改)

如果启用了日志,那么插入/更新的成本会更高,因为mongodb必须对仅附加的文件进行另一次写入


在我的应用程序中,mongodb在一个普通硬件上每秒处理10-50k次更新。

mongodb根据项目增长或移动的频率计算每个集合的填充因子。通常情况下,填充因子越大。在内部,它使用自适应算法来尽量减少更新时的移动。基本上,它是在RAM中运行的。

测量它非常简单不,因为MongoDB使用惰性写入,或者我不知道如何测量它。hmmmm。。试试这个:www.mongodb.org/display/DOCS/getLastError+Command#getLastErrorCommand-{{{fsync}}我同时也试了一下,但我更愿意确保有人能给出一个肯定的答案:启用日志的D10-50K?