按 http://blog.csdn.net/fengyily/article/details/7388926 中配置的MongoDB叢集,進行資料插入,并檢視集合狀态時發現兩個問題:
1、集合中的資料不會分片。
配置了shard1/shard2/shard3三個分片,但資料隻會集中在集合所在的分片上。
2、資料插入效率低下。
采用for循環批量插入20萬資料時,發現每秒隻能插入100,200條,無法忍受的性能。
經過分析mongos的日志mongos.log,發現其中一台存在以下日志資訊:
Thu Mar 29 01:05:18 [initandlisten] connection accepted from 192.168.1.190:52865 #345
Thu Mar 29 01:05:18 [conn345] authenticate: { authenticate: 1, nonce: "c56c219dd93277e1", user: "__system", key: "f85f00f59c9979af52c8e2f3a854ac9e" }
Thu Mar 29 01:05:46 [conn344] end connection 192.168.1.191:38281
Thu Mar 29 01:05:46 [initandlisten] connection accepted from 192.168.1.191:38289 #346
Thu Mar 29 01:05:46 [conn346] authenticate: { authenticate: 1, nonce: "2c2e6e5a47d9465c", user: "__system", key: "ef913dd4bd6748603842ba313c2437fe" }
Thu Mar 29 01:05:48 [conn345] end connection 192.168.1.190:52865
Thu Mar 29 01:05:48 [initandlisten] connection accepted from 192.168.1.190:52874 #347
Thu Mar 29 01:05:48 [conn347] authenticate: { authenticate: 1, nonce: "a6a21ef57b4e8123", user: "__system", key: "8057fff6fb913bfda00aece41ad44b71" }
其中還有一台的mongos.log提示時間不一緻。
通過将三台mongodb伺服器的時間同步後,再進行測試一切恢複正常。以上兩個問題都得到有效的解決。
這也許是mongodb存在的一個小BUG,當各分片伺服器時間不一緻時,會導緻資料分片與插入效率。這也說明,MongoDB資料庫資料分片機制與伺服器時間相關。具體得進一步分析源碼。