У меня есть БД с предложениями номеров в отеле, один документ на комбинацию отеля, дня и номера.
Я использую индекс в месяц, вроде offers_201910
, так что индексы для старых месяцев могут быть сброшены позже, и я хотел бы, чтобы все предложения, касающиеся одного и того же отеля, были в одном и том же шарде, так как оничасто собираются вместе. Кроме того, таким образом, в случае отказа осколка, я просто не получаю неправильные результаты об отелях там, я просто не получаю результаты о них вообще.
У меня есть два варианта, когда я думаю о шардинге:
Elasticsearch sharding
Во время индексации я могу предоставить routing=<hotel_id>
, поэтому предложения о том же отеле группируются в один и тот же шард. Во время запроса я просто запрашиваю отель, и ES делает волшебство, чтобы найти их. Проблема в том, что я не могу изменить счетчик осколков позже.
Ручной шардинг
Я могу создать множество индексов для одного месяца с буквой в конце,это был бы мой созданный вручную осколок. Например: offers_201910a
, offers_201910b
, offers_201910c
и так далее. Затем, во время запроса, я указываю, что я хочу сделать запрос по шаблону индекса offers_201910*
, и он должен работать AFAIK. Преимущество состоит в том, что я могу добавить больше этих ручных осколков и заставить новые отели использовать их вместо прежних.
В соответствии с 'Elasticsearch окончательное руководство', это то же самое, что запрос индекса с 50 шардами, что 50 индексов с 1 шардом каждый.
Что-то не так с руководствомподход шардинга? Имеет ли это смысл?