Я создаю приложение, которое хранит большое количество данных на пользователя (возможно, в гигабайтах).
Что-то вроде журнала запросов, поэтому предположим, что у вас есть следующие поля для каждой записи:
customer_id
date
hostname
environment
pid
ip
user_agent
account_id
user_id
module
action
id
response code
response time (range)
и, возможно, еще немного.
Хорошо, что использование будет в основном только для записи, но когда есть чтения, я бы хотел иметь возможность быстро ответить почти в реальном времени.
Другое предсказание о модели использования заключается в том, что большую часть времени люди будут смотреть на самые последние данные и нечасто запрашивать прошлое, статистические данные и т. Д., Поэтому я предполагаю, что рабочий набор будет намного меньшезатем вся база данных, то есть последние данные для большинства пользователей и диапазоны истории для некоторых пользователей, которые сейчас занимаются аналитикой.в последнем случае я полагаю, что первый запрос будет работать медленнее, пока он не введет диапазон в память.
Но проблема в том, что я не совсем уверен, как эффективно индексировать данные.
Начало индекса ясно, его customer_id и дата.но остальное можно использовать в любой комбинации, и я не могу предсказать наиболее распространенные, по крайней мере, не с какой-либо степенью достоверности.
В настоящее время мы создаем прототип этого с помощью монго.Есть ли способ сделать это эффективно в монго (хранилище / процессор / стоимость)?
Единственное, что приходит на ум, - это попытаться предсказать пару частых запросов и проиндексировать их, а затем просто массивно осколить данные.и убедитесь, что данные каждого клиента равномерно распределены по осколкам, что позволяет быстро сканировать таблицы только по индексу «клиент, дата» для остальных запросов.
PS Я также открыт для предложений об альтернативах БД.