2013-09-14 4 views
0

Я строй системы на основе веб для моей организации, используя Монго DB, я прошел через документ, представленное Монго дб и пришел к следующему выводу:Совокупность, поиск, групповое замешательство?

find: Cannot pull data from sub array. 
group: Cannot work in sharded environment. 
aggregate:Best for sub arrays, but has performance issue when data set is large. 
Map Reduce : Too risky to write map and reduce function. 

Так что, если кто-то может помочь мне с лучший подход к работе с документом sub-массива, в производственной среде с осколочным кластером.

Пример:

{"testdata":{"studdet":[{"id","name":"xxxx","marks",80}.....]}} 

теперь мой "studdet" огромная коллекция из более чем 1000, строки для каждого документа,

Итак, пусть мой запрос:

"Find all the "name" from "studdet" where marks is greater than 80" 

его определенно будет представлять собой совокупный запрос, так что в этом случае можно пойти с совокупностью, потому что «find» не может этого сделать, а «группа» не будет работать в закрытой среде, поэтому, если я перейду с совокупностью, что будет влиять на производительность, мне нужно вызвать этот запрос большую часть времени.

+0

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

+0

Возможно, вам нужно структурировать свои документы по-другому или просто не знаете, какую команду запроса использовать и как. Трудно ответить на ваш вопрос, если вы не дадите конкретный пример некоторых документов и какую информацию вы хотите извлечь из них. – Philipp

+0

@Philip не о каком-либо конкретном примере, и я очень хорошо знаю, какой запрос использовать, где, но поскольку документ говорит, что раскрутка - это проблема, когда содержимое массива огромно, поэтому он не может знать, насколько это возможно. совокупность, поэтому мой вопрос заключается не в том, как использовать агрегат и получить результат, но насколько это возможно в рабочей среде, если я пойду с ним, находка надежна, но он не может вытащить данные из вспомогательного массива –

ответ

0

Пожалуйста, обратите внимание на: http://docs.mongodb.org/manual/core/data-modeling/ и http://docs.mongodb.org/manual/tutorial/model-embedded-one-to-many-relationships-between-documents/#data-modeling-example-one-to-many

Эти документы описывают решения в создании хорошей схемы документа в MongoDB. Это одна из самых сложных вещей в MongoDB, и одна из самых важных. Это повлияет на вашу производительность и т. Д. В вашем случае лучшим вариантом будет работа с базой данных, в которой есть коллекция учеников с массивом оценок. {_id :, ...., Оценки: [{type: "test", grade: 80}, ....]} В общем, и, учитывая ваш образец данных, наилучшим выбором является структура агрегации. Структура агрегации быстрее, чем уменьшение карты в большинстве случаев (конечно, в скорости выполнения, это C++ vs javascript для уменьшения карты).
Если рабочий набор ваших данных становится таким большим, вы должны затемнить, а затем агрегацию, а все остальное будет медленнее. Однако не медленнее, чем помещать все на одну машину с большим количеством ошибок страницы. Как правило, вам нужен рабочий набор, который больше, чем оперативная память, доступная на современном компьютере, чтобы оштрафовать, чтобы быть правильным способом, чтобы вы могли хранить все в ОЗУ. (На данный момент коммерческий контракт на поддержку Mongo на помощь будет меньше затрат на оборудование, и это включает в себя обширную помощь в разработке схемы.)

Если вам нужно что-нибудь еще, пожалуйста, не стесняйтесь спрашивать ,

Бест, Чарли