MongoDB несколько масштабируемых коллекций

Я использую morphia для подключения к mongoDB. Я собираю ежедневный пробег для автомобилей. Сейчас весь суточный пробег по всем автомобилям хранится в 1 коллекции с атрибутом номерной знак, дата, пробег

мы хотим сохранить ежедневные пробеги, начиная с 1990 года. Прямо сейчас мы уже обслуживаем около 4500+ автомобилей (это примерно 1,3 миллиона записей в год). Мы пытаемся использовать данные за один год, и производительность уже сильно снижается. Я думал разделить хранилище на несколько коллекций в зависимости от номерного знака. поэтому каждый номерной знак будет иметь свою собственную коллекцию, названную в честь номерного знака. Мне нужны идеи. Есть ли другой способ решить эту проблему?

Добавление деталей: как мы будем использовать данные: мы хотим запрашивать пробеги нескольких автомобилей (иногда по отделам или по географическим регионам, по маркам/модели и т. д.) в любой заданный диапазон дат. Итак, скажем, мы хотим отслеживать пробеги в пригороде, мы возьмем пробеги всех номеров, действующих в этом пригороде с 01 января 2014 года по 23 июня 2014 года, и выполним расчет на основе данных.

Спасибо.


person illawara strathfield    schedule 08.04.2015    source источник
comment
Возможно, вы захотите использовать массовую вставку для старых данных, которая намного быстрее, чем последовательная вставка.   -  person Markus W Mahlberg    schedule 08.04.2015
comment
хорошо, но как часто вы хотите запускать эти запросы? Я имею в виду, смогут ли отдельные владельцы автомобилей управлять ими или в любой момент времени, или вы сделаете это за одну ночь, чтобы получить некоторую статистику за неделю или около того. Кроме того, 1,3 миллиона записей не кажутся слишком большими, поэтому я удивлен, что у вас плохая производительность. Какие индексы у вас есть в коллекции?   -  person Pio    schedule 08.04.2015
comment
индекс находится на табличке с номером и датой (составной индекс). Вставка не будет проблемой, так как она будет производиться только один раз в год в конце года. Поиск будет довольно интенсивным. Запросы будут часто делаться для целей мониторинга. и это только один год. когда будет 10 лет, будет 13 миллионов+ и так далее.   -  person illawara strathfield    schedule 08.04.2015
comment
Можете ли вы проверить, насколько быстро это работает только для номерного знака + даты по сравнению с другими параметрами? Также важно, как вы строите запрос, так как это решает, будет ли использоваться ваш индекс или нет. Возможно, достаточно расширить составной индекс/определить запросы по-другому.   -  person Pio    schedule 08.04.2015
comment
Может быть, вы можете показать нам результат getIndexes() и один или два примера запросов с каким-нибудь примером documents из коллекции.   -  person Pio    schedule 08.04.2015


Ответы (1)


В зависимости от вашей конфигурации вы можете попробовать сегментировать или попытаться Разделите вашу базу данных -- хотя этот подход hybrid означает, что вы будете имитировать разделение из систем баз данных sql ( Oracle, Sql-сервер и т. д.).

Также обратите внимание, что если вы insert (в основном добавляете) много записей в один файл, он будет постепенно замедляться, поскольку монго необходимо обновить primary key (mongoID), которые должны быть уникальными + если вы определили другие индексы в collection, они также нужны быть обновленным.

Если вы можете предоставить дополнительную информацию о том, как вы собираетесь использовать собранные данные и в какие промежутки времени + эти операции онлайн или офлайн, я обновлю свой ответ.

person Pio    schedule 08.04.2015