Мне нужно хранить несколько миллиардов небольших структур данных (около 200 байт каждый). До сих пор хранение каждого элемента в виде отдельного документа хорошо работает, а Mongo обеспечивает около 10 000 результатов в секунду. Я использую 20-байтовый хэш как _id для каждого документа и один индекс в поле _id. При тестировании это работает для наборов данных с 5 000 000 документов.
В процессе работы мы будем составлять около 10 000 запросов в секунду, обновляя существующие документы около 1000 раз в секунду и вставляя новые документы, возможно, 100 раз в секунду или меньше.
Как мы можем управлять большими наборами данных, когда мы не можем хранить весь индекс в ОЗУ? Будет ли MongoDB работать лучше, если мы объединим несколько элементов в каждый документ - для более быстрого поиска по индексу, но больше данных, возвращаемых в каждом запросе?
В отличие от других вопросов о SO, я не только интересуюсь, сколько данных мы можем нанести на Mongo. Он может четко управлять объемом данных, на которые мы смотрим. Моя забота заключается в том, как мы можем максимизировать скорость операций find
в огромных коллекциях, учитывая ограниченную ОЗУ.
Наши поиски будут сгруппированы; около 50 000 элементов будут удовлетворять около 50% запросов, но оставшиеся 50% будут случайным образом распределены по всем данным. Можно ли ожидать увеличения производительности, переместив эти 50% в свою собственную коллекцию, чтобы сохранить меньший индекс самых используемых данных всегда в ram?
Уменьшает ли размер поля _id от 20-байтовых до 8-байтов оказывает значительное влияние на скорость индексирования MnogoDB?