我收藏了大约8800万条记录。 该系列的大小约为9440 Mb。 此集合现在放在1个分片上(使用复制) 现在由于磁盘短缺,我必须在3个可用分片上进行分发(使用复制)。
这是我的数据库:
Database_name = SensorData
Collection_name = Values
Index :
[
{"v":1,"key":{"_id":1},"name":"_id_","ns":"SensorData.Values"},
{"v":1,"key":{"i":1},"name":"i_1","ns":"SensorData.Values"},
{"v":1,"key":{"i":1,"date":1},"name":"i_1_date_1","ns":"SensorData.Values"}
]
Shard collections =
{ "_id" : "set1", "host" : "set1/***.***.***.35:27018,***.***.***.30:27018" }
{ "_id" : "set2", "host" : "set2/***.***.***.162:27018,***.***.***.33:27018" }
{ "_id" : "set3", "host" : "set3/***.***.***.174:27018,***.***.***.27:27018" }
我尝试了以下命令,但我的数据库将冻结。
sh.status()
{ "_id" : "SensorData", "partitioned" : true, "primary" : "set1" }
sh.enableSharding("SensorData")
{ "ok" : 0, "errmsg" : "already enabled" }
sh.shardCollection("SensorData.Values", {i: 1} )
使用最后一个命令,数据库将在一段时间后冻结。
我的问题是:这是正确的方法吗?我可以在背景上对此集合进行分片,以便放置在此集合中的数据不会受到影响。 (或略有影响)
答案 0 :(得分:1)
我的建议是让您的应用程序在操作期间进行维护,并执行以下操作:
最后,您可以通过预热新集合来强制在整个集群中创建块来提高复制步骤的速度,以确保您不仅依靠平衡器来完成所有工作,因为最初只有存储在其中一个分片上的一个块,它将暂时占用所有写入,直到平衡器可以重新平衡整个群集中的块。
希望它有所帮助。