2013-07-22 47 views
0

我的環境:版本:2.4.4,操作系統:Linux 64位,成分:複製集+分片的MongoDB:複製集+分片:某種錯誤

當我連接到使用mongos我的數據庫,將出現一個錯誤:

mongos> db.test.find().limit(500).sort({TIME:-1}) 

error: { 
    "$err" : "BSONObj size: 268823536 (0xF0EB0510) is invalid. Size must be between 0 and 16793600(16MB) First element: \u001f: ?type=38", 
    "code" : 10334 
} 

然而,當我排序的另一個領域,沒有任何錯誤:

mongos> db.test.find().limit(500).sort({C_ID:-1}) 

{ "_id" : "13744759060340298528dbaaa", "C_ID" : "999", "TIME" : ISODate("2013-07-22T06:51:46.034Z"), "SE" : "0", "AREA" : "a21", "CT1" : "1", "CT2" : "1", "S_PT" : 11, "EN_N" : "Test system", "T_ID" : "3946", "EN_T" : "2", "MSG" : "for test64", "EVENT" : "test event39", "S_IP" : "1.2.4.174", "URL" : "URL536" } 
...... 

所以我連接到shardings之一:

sh0:PRIMARY> db.test.find().limit(500).sort({TIME:-1}) 

{ "_id" : "13744759061349b294b309aaa", "C_ID" : "373", "TIME" : ISODate("2013-07-22T06:51:46.134Z"), "SE" : "0", "AREA" : "a2", "CT1" : "1", "CT2" : "8", "S_PT" : 8, "EN_N" : "Test system", "T_ID" : "2654", "EN_T" : "1", "MSG" : "for test0", "EVENT" : "test event38", "S_IP" : "1.2.4.193", "URL" : "URL829" } 
... 

任何人給我一個想法?

感謝您的關注!

+0

在分片環境中,您必須將shard鍵作爲查詢中的參數之一傳遞,否則mongos將查詢所有分片併合並性能災難的結果。 C_ID是你的分片鍵嗎? – Jayz

+0

是的,C_ID是分片鍵。 –

回答

0

通片鍵到您所有的疑問。這不是建議,這是你必須遵循的規則。此外,索引您在查詢中需要的所有參數。對於需要多個參數的查詢,創建複合索引。注意:因爲分片鍵將成爲所有查詢的一部分,所以單個索引幾乎沒有用處,您只能創建複合鍵。例如,要基於TIME進行查詢,如果您在查詢中按順序傳遞參數,則需要按該順序創建複合索引 - {C_ID,TIME}。

0

TIME字段是否已編入索引?

指數它

db.test.ensureIndex({TIME : -1}) 
+0

它沒有索引,我會試試。謝謝你的回覆! –