- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在我的 mongo 数据库中,我有一个 5GB 的集合,一个 10MB 的集合,还有几个没有上限的集合。没有封顶的文件包含超过 20 个小文档。
经过长时间 (4h) 压力测试(仅写入 5GB 上限集合),我的数据库使用 18GB。
这就是我的 db.stats 所说的(以 MB 为单位的值):
data-db:PRIMARY> db.stats(1024*1024)
{
"db" : "data",
"collections" : 9,
"objects" : 8723395,
"avgObjSize" : 208.8405255064112,
"dataSize" : 1737,
"storageSize" : 5130,
"numExtents" : 12,
"indexes" : 19,
"indexSize" : 2534,
"fileSize" : 18423,
"nsSizeMB" : 16,
"ok" : 1
}
这是 5GB 的收集统计信息(值以 MB 为单位):
data-db:PRIMARY> db.sms_message_event.stats(1024*1024)
{
"ns" : "data.sms_message_event",
"count" : 8723300,
"size" : 1737,
"avgObjSize" : 0.00019912189194456226,
"storageSize" : 5120,
"numExtents" : 3,
"nindexes" : 6,
"lastExtentSize" : 1026,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 2534,
"indexSizes" : {
"_id_" : 395,
"t_1_when_-1" : 475,
"smsc_message_id_1" : 185,
"user_id_1_t_1_when_1" : 481,
"message_id_1" : 318,
"virtual_number_recipient_when_index" : 678
},
"capped" : true,
"max" : 2147483647,
"ok" : 1
}
那么为什么 fileSize 比 storageSize 大这么多呢?我现在什至无法运行 repairDatabase() ,但我在每个非上限集合上尝试了 compact() ,但没有结果。实际上,这是预料之中的,因为 db 在压力测试之前是干净的。我的意思是文件被删除了,不仅仅是收藏被删除了。
从日志中,我可以看到在压力测试期间以大约 1 小时的间隔创建了额外的数据文件。
一些日志:http://pastie.org/private/t8u9caxstafbjdybgwtsfw
更新:又过了一个晚上,又通过了 4 小时压力测试,它是 28GB :(
data-db:PRIMARY> db.stats(1024*1024)
{
"db" : "data",
"collections" : 9,
"objects" : 8724995,
"avgObjSize" : 208.840894006243,
"dataSize" : 1737,
"storageSize" : 5130,
"numExtents" : 12,
"indexes" : 19,
"indexSize" : 2590,
"fileSize" : 28658,
"nsSizeMB" : 16,
"ok" : 1
}
最佳答案
发生这种情况是因为 MongoDB 在重新使用为上限集合分配的空间时出现错误。已归档为 SERVER-9489并将被分类并希望尽快修复。
在不耗尽磁盘空间的情况下继续运行压力测试的方法是在测试完成后删除测试数据库目录,然后在运行新测试时创建一个新目录(假设您不需要重复使用相同的数据)。如果您确实需要相同的数据,您可以使用 mongodump 将其保存在每次运行中,但可能还有其他更简单的选项,具体取决于您的具体使用情况。
关于mongodb - Mongo 数据库占用的磁盘空间比应有的多得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16208726/
当我运行我的应用程序时,我在控制台中收到一条消息: 2011-11-16 19:17:41.292 Juice[8674:707] Applications are expected to have
我在 JavaScript 中使用了这个语句,但是当我尝试在 TypeScript 项目中使用它时出现错误。它在提示 fetch(...args) const fetcher = (...args)
我是一名优秀的程序员,十分优秀!