1

我在我的网络服务器(播放器 ID 增量器)中多次更新同一记录,所以我的问题是这种重复更新最终是否会使 MongoDB 数据库变得更大(例如,由于事务日志),或者如果数据库的大小几乎保持不变。

如果数据库实际上因此而变大,我该如何防止这种情况?

谢谢!

编辑:

有关此情况的更多详细信息:

更新声明如下:

db.usergen.update({ userprefix: userPrefix }, { $set: { number: userIdNumber } },
    { upsert: true }, function(err, saved) {}); 

此更新始终适用于同一记录。这条记录中唯一改变的是“数字”。

4

1 回答 1

4

MongoDB 最多有一个 oplog 和 journal。oplog 是一个固定大小的封顶集合,因此它永远不会失去控制,并且日志具有一定的空间量(通常为 3GB)。

如果文档由于增长而需要在磁盘上移动,那么是的,数据库的大小可能会增长,从而导致您的已删除列表和空闲列表中出现碎片。

这个演示文稿很好地解释了这个概念:http ://www.10gen.com/presentations/storage-engine-internals

至于避免这种情况,这完全取决于您正在执行的查询以及您正在提交的更新。没有单一的方法可以解决问题,并且在不了解您的问题的情况下,我只能将您引导到各个地方。

一个考虑因素是,如果您要进行需要移动文档的连续、定期更新,则使用 2 大小分配的幂:http: //docs.mongodb.org/manual/reference/command/collMod/#usePowerOf2Sizes

但是,大多数情况下是调整架构和查询以提高性能,即不会在子文档等中创建太多冗余。

您还可以在另一个地方看到mongod日志中的问题。如果您创建了过多的涉及mongod服务器的查询日志记录,那么您可能会看到您的日志用尽了所有空间,但是,您可以通过限制写入多少日志或http://docs.mongodb.org/来解决这个问题手册/教程/旋转日志文件/

于 2013-04-17T11:30:00.513 回答