【发布时间】:2014-05-28 21:32:06
【问题描述】:
我有一个包含 2 个成员的 mongodb 副本集。 1个小学和1个中学。如果我发出show dbs,它们都显示如下:
local 24.06640625GB
test 0.203125GB
db1 9.94921875GB
db1test 0.953125GB
然后我发出use db1 -> db.events.count(),结果返回1003130两个成员的文档。
这是有道理的,它们相互反映,两个 dbserver 上的 db1 和 db1test 在每个集合中具有相同数量的磁盘使用量和相同数量的文档。
然后我决定添加一个新成员(一个新的 dbserver),它有一个空的 /data/db。我使用以下命令启动新服务器:
sudo mongod --replSet rs0 --fork --logpath /var/log/mongodb/mongodb.log
然后在主服务器中,我发出
rs.add('ipOfNewDBServer:27017')
几秒钟后。我的新 mongodb 服务器外壳从 > -> STARTUP2 -> rs0:SECONDARY 我认为开始同步。
在我发出show dbs的新/最近添加的mongodb服务器中,它如下所示:
local 22.0673828125GB
test 0.203125GB
db1 1.953125GB
db1test 0.453125GB
每个数据库的磁盘使用情况与其他两个不同(1 个主数据库和 1 个辅助数据库)。但是,如果我发出use db1 -> db.events.count(),则结果返回1003130,这与其他两个相同。我检查了这个 db1 中的其他集合。他们都一样。
我想知道为什么数据库磁盘使用量不同而每个数据库中的集合具有相同数量的文档???如果我将这两个现有集合中的数据同步到新集合中做错了什么,请纠正我。 mongodb官方文档说This procedure relies on MongoDB’s regular process for initial sync,我没有想法,请帮忙。谢谢
【问题讨论】:
-
Mongo 为 DB 预先分配了大块磁盘空间,如果删除文档,最终可能会在给定文件中产生碎片。不同的尺寸是正常的,也是意料之中的。
-
@ChrisHeald 如果文档被删除,你的意思是什么最终会在给定文件中出现碎片。新服务器在我创建它之前没有任何文件,直到它开始同步。你能解释更多或我能读到的任何文件吗?每个数据库中的集合是否正确同步?谢谢
-
Mongo 为其数据文件分配大块磁盘空间。如果更新的文档超出其已分配的大小,则将其移动到块的末尾。被删除的文档将被删除。两者都在分配的文件中留下“漏洞”——即碎片。
-
@ChrisHeald 非常感谢克里斯。