Вопрос масштабирования Mongo DB (индексы влияют на «отличную» производительность)? - PullRequest
5 голосов
/ 26 мая 2011

Я использую Mongo для хранения изо дня в день всех «тиков» из набора около 40 эквити. Эти тики содержат информацию о сделке (документ, содержащий цену и объем) и информацию о книге (более сложный документ, содержащий предложение о покупке-продаже). Величина ордера составляет около 5К сделок + 20К книг * 40 эквити в день. Документ индексируется как по символу (собственному имени), так и по дате вставки, времени дня. После недели сбора один из моих запросов больше не масштабируется: поиск определенной даты занимает много времени. Поэтому я решил иметь специальный документ, просто чтобы сказать, что на определенный день есть «коллекция», это правильный подход ? Кроме того, правильно ли собирать вещи как отдельный маленький документ или было бы лучше собирать тики в виде массива в долевом документе?

Спасибо всем!

Кстати, этот вопрос является следствием этого: Использование mongodb для хранения внутридневных данных по акциям

Дополнительно: даже если я прямо скажу (на консоли)

db.books.ensureIndex({dateTag:1})
db.books.distinct("dateTag")

он медленно отвечает. Поэтому, возможно, лучший вопрос: влияет ли индекс на производительность distinct?

Добавление После обновления до 1.8.2 поведение остается прежним.

Ответы [ 3 ]

2 голосов
/ 27 мая 2011

влияет ли индекс на отличную производительность?

Это действительно так, однако «плана объяснения» нет, так что это можно подтвердить только с помощью документов / кода.

Документы индексируются по дате (символу), дате вставки, времени дня

Я не на 100% уверен, сколько у вас индексов или какой объем памяти у вас занимаетесть здесь.Наличие индекса не обязательно означает, что он будет очень быстрым.Если этот индекс не находится в памяти, вы в конечном итоге идете на диск и замедляете свой запрос.

Если вы видите низкую производительность этого запроса, несмотря на индекс, я бы проверил две вещи:

  • Активность диска (во время запроса)
  • Размер данных относительно памяти

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

1 голос
/ 26 мая 2011

Я не думаю, что ваш подход «сбор за определенный день» сработает, потому что вы столкнетесь с ограничением MongoDb в 24 000 пространств имен на базу данных.Хранение тиков в свойстве массива документа может затруднить выполнение определенных типов запросов (в действительности зависит от того, какие типы отчетов вам нужно запускать на тиках).

Вы уверены, что у вас есть индексы?на месте для свойств, которые вы используете в своем проблемном запросе?В крайнем случае вы можете попробовать осколок, но я сомневаюсь, что это необходимо на данном этапе.

0 голосов
/ 26 мая 2011

http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Distinct

четко заявляет, что Different () может использовать индексы, начиная с MongoDB 1.7.3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...