ElasticSearch - устранение проблем с ненормализованными данными

Я построил систему аукционов, которая использует ElasticSearch. Имеет 3 модели, пользователей, аукционы и ставки. Пользователь может опубликовать аукцион, а также делать ставки на других аукционах.

Один из моих первых вариантов использования - поиск ставок. Помимо поиска по id, user_id, цене и т. Д., Я столкнулся с интересным вариантом использования. Я хочу иметь возможность искать имя пользователя, и он должен возвращать все мои ставки со всех аукционов, размещенных этим пользователем.

Например, когда я ищу "Джон", он получает все отправленные мной заявки на все аукционы, размещенные пользователем "Джон".

Вот как выглядит индекс:

Bids
- id (not analyzed)
- user_id (not analyzed)
- price (not analyzed)
- auction_user_name (uses ngrams)

У меня есть пара проблем с этим индексом:

  1. Bids имеет много строк (10M+) и имеет n-грамм auction_user_name занимает много места. Я думаю, если эти данные действительно должны быть нормализованы в одном индексе с одним типом, или есть какие-либо альтернативы, которые являются более подходящими (типы родитель-потомок)?

  2. Некоторые пользователи очень активны и могут иметь тысячи ставок. Если один из них изменит свое имя, это приведет к тысячам обновлений индекса ставок. Это не идеально, и из-за дубликатов это может привести к увеличению индекса записи, что может привести к отказу в обслуживании.

Есть ли известные решения для этих двух проблем? Я уверен, что есть какой-то компромисс, который я могу сделать, чтобы решить это.

Я видел несколько предложений по адресу: https://www.elastic.co/guide/en/elasticsearch/guide/current/relations.html

Методы не так элегантны, как я себе представлял, поэтому мне интересно, есть ли еще способы решения этой проблемы.

0 ответов

Другие вопросы по тегам