хочу задать практический вопрос, а именно как правильно хранить/распределить данные (в моем случае транзакции по платежам, ордера, возвраты, отмены) по продуктам. Суть в том, что из этих всех транзакций строятся различного типа репорты типа: сколько покупок было сделано или суму всех ордеров или возвратов за последний день/неделю/месяц/год/другая кастомная дата.
Есть идея создавать индекс на каждый день и/или по типу транзакции типа type: 'ORDER'/type: 'REFUND' и тд. и "навешать" на них alias типа
данные должны хранится всегда, так как предусмотрен фильтр за последний год или выбрать любую дату от и до. Хотелось бы знать как лучше их хранить в каком формате, нужно ли их разбивать на индексы или что-то в этом роде.
причина выбора ES, из-за того что MongoDB никак не справляется с агрегацией, запустив один и тот же запрос для MongoDB и для ES результаты были ошеломляющие самый долгий/кривой запрос на MongoDB выполняется 300-400sec и на ES ~500ms и это без тюнинга и всего остального.
Обычно, на индексы разбивают для того, чтобы проще было удалять старые данные и для того, чтобы оптимизировать поиск по новым данным. Если вас скорость поиска устраивает и старые данные удалять не надо, то единственная причина на использование нескольких индексов - это изменение схемы со временем. Но с этим надо обращаться осторожно, так как ваш поиск должен будет работать и со старым форматом - и с новым. Так что даже в этом случае, если данных не так много - проще просто все переиндексировать.
Я думаю, что новый индекс каждый месяц или год - должен для вас вполне работать. Сильнее я бы не разбивал.
Это сложный и многогранный вопрос - с одной стороны распределение по многим индексам позволит исполнять поиск на многих потоках одновременно, один поток на каждую шарду. С другой стороны - чем больше шард - тем больше времени будет нужно, что бы слить результаты поиска. То есть - одна шарда - слишком мало, 1000 шард - слишком много, (но опять же 1000 шард может быть и ничего, если у вас порядка 100 нод, например). К тому же, увеличить количество шард можно и для одного индекса. Короче, надо смотреть на конкретные индексы, данные, машины, диски и тестировать. Теоретически на этот вопрос не ответить. Мой подход - начать с одного индекса с установками по умолчанию и грузить туда данные, пока не начнет тормозить, после этого - смотреть где тормоза, и решать проблему соответственным образом.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.