Узнав так много хорошего о производительности MongoDB, мы решили дать Mongodb попытку решить проблему, которая у нас есть. Я начал с перемещения всех записей, которые мы имеем в нескольких базах данных mysql, в одну коллекцию mongodb. Это привело к коллекции с 29 миллионами документов (у каждого из них есть по крайней мере 20 полей), которая занимает около 100 ГБ пространства в HD. Мы решили поместить их все в одну коллекцию, поскольку все документы имеют одинаковую структуру, и мы хотим запрашивать и объединять результаты по всем этим документам.
Я создал несколько индексов для соответствия моим запросам, иначе даже простое count () заняло бы целую вечность. Однако такие запросы, как Different () и group (), все еще занимают слишком много времени.
Пример:
// creation of a compound index
db.collection.ensureIndex({'metadata.system':1, 'metadata.company':1})
// query to get all the combinations companies and systems
db.collection.group({key: { 'metadata.system':true, 'metadata.company':true }, reduce: function(obj,prev) {}, initial: {} });
Я посмотрел на журнал mongod, и в нем много таких строк (при выполнении запроса выше):
Thu Apr 8 14:40:05 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1048890 nreturned:417 154ms
Thu Apr 8 14:40:08 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1050205 nreturned:414 430ms
Thu Apr 8 14:40:18 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1049748 nreturned:201 130ms
Thu Apr 8 14:40:27 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1051925 nreturned:221 118ms
Thu Apr 8 14:40:30 getmore database.collection cid:973023491046432059 ntoreturn:0 query: {} bytes:1053096 nreturned:250 164ms
...
Thu Apr 8 15:04:18 query database.$cmd ntoreturn:1 command reslen:4130 1475894ms
Этот запрос занял 1475894мс, что намного больше, чем я ожидал (список результатов содержит около 60 записей). Прежде всего, ожидается ли это, учитывая большое количество документов в моей коллекции? Ожидается ли, что запросы агрегации в целом будут такими медленными в mongodb? Любые мысли о том, как я могу улучшить производительность?
Я использую mongod на одной машине с двухъядерным процессором и 10 ГБ памяти.
Спасибо.