Mongodb 尝试去balancer

Mongodb 去平衡器

从zh到hz,这真是一个大跨度,我发现mongodb在hz这个城市可能只有大企业会比较规模的使用,大部分还是mySQL,可惜,mySQL了解的并不深,心心念希望走大数据,走数据库,还是落空了,还是要走C++这条路的,至少目前是这样子的。自己的起点还是有点低了,想起之前处理的mongodb平衡化的过程最后一步,记下来,以免后续忘记了。

由于我们的数据库原来的数据量问题,还有不断写入的数据,所以平衡成为一个比较大的问题。也许因为mongodb的平衡器还不是特别成熟,前面我们说过达到阈值后,mongodb的平衡器会开始运行。但是这个平衡的过程将极大的影响整个数据库的性能,甚至将IO跑到100,所以真的是任何数据库的操作都要谨慎。

后面,在尝试了movePrimary以及moveChunk后,我干脆就设置平衡器setBalance为false,停止了服务器。别害怕别担心,你说平衡化怎么保证。数据如何走,你可以根据你原来的数据规律为第二天预先分配chunk,然后使用moveChunk来将数据手动的平衡,比如你有3个服务器,那么后面的两个服务器必须多分配几个chunk,因为第二天的数据还是与第一天会不一样,而数据首先写入的是主分片。因为我的数据库中使用的是时间戳字段作为id,+其他的字段混合片键。

注意,你所更新的是config中的chunks集合,操作这个集合一定要小心,因为它包括了所有chunk的字段,在哪个分片,片键的最大值,最小值。所以整个流程为;

1.提前创建集合
2. 设置集合为可分片,设置片键
3. 从chunk集合中获取到上一时期的chunks信息,根据本身数据库的特点,修改chunk中的max及min字段,记得在获取字段的时候可能会有minKey,maxKey,这个可以使用mongodb的字段类型来进行过滤
4. 设置所有正确的chunk信息,然后再写入到chunks

因为直接在mongodb中查找,然后进行逐个遍历更新,会影响速度,所以,我后面特别的跑了一个程序,来每天更新下一天的chunks信息。
在这个方案跑了一段时间后,数据库性能所有改善,但是如何设置chunks信息,还是需要后续不断地研究。

加油,DBA之路还需要加油!不过也许C++也还是一条不错的道路,走走服务器。

你可能感兴趣的:(mongodb数据库)