2013-07-22 2 views
0

Моя среда: Версия: 2.4.4 ОС: Linux 64-разрядное, компоненты: Set Replication + ShardingMongoDB: набор репликации + Sharding: Сортировать ошибки

При подключении к базе данных с помощью 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

в оштукатуренной среде, вы должны передать ключ осколка в качестве одного из параметров в ваших запросах, иначе монгосы будут запрашивать все осколки и комбинировать результаты, которые являются катастрофой производительности. Является ли C_ID вашим ключом осколка? – Jayz

+0

Да, C_ID - это ключ осколка. –

ответ

0

Pass ключ осколок всех ваших запросов. Это не рекомендация, это правило, за которым вы должны следовать. Кроме того, индексируйте все параметры, которые вам нужны в запросах. Для запросов, которые требуют нескольких параметров, создают составные индексы. ПРИМЕЧАНИЕ. Поскольку ваш ключ осколка будет частью всех ваших запросов, отдельные индексы будут малопригодны, вы должны создавать только составные ключи. Например, для запроса на основе TIME вам необходимо создать составной индекс - {C_ID, TIME} в этом порядке, если вы передадите параметры в этом порядке в своем запросе.

0

Поле TIME проиндексировано в поле?

Index это

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

Не проиндексирован, у меня будет попытка. Спасибо за ваш ответ! –