Много индексов или много документов в одном индексе?

Добрый день.
В свете отказа от типов, решил отделить каждый тип в отдельный индекс, но индексов получилось слишком много, около 10 000. Еластик стал притормаживать при создании индексов, каждый последующий создаётся все медленнее и медленнее.

Архитектура веб сервиса такова что, на каждого пользователя сейчас приходится по 7 индексов.
У каждого пользователя индексы фактически одинаковые, в каждом хранятся данные конкретного пользователя.
Сейчас стоит выбор, оставить как есть или создать 7 индексов, но в каждом из них будет большое число документов, около 1 млн.

Может я что-то не так делаю? Как оптимизировать большое количество индексов?

Ещё хотелось бы узнать, какое оптимальное количество индексов и документов в них?

А как у вас было? Один индекс на пользователя?

Да, один индекс на пользователя и 7 типов в нём. Сейчас 7 индексов на пользователя.

Я бы оставил один индекс на пользователя и свалил все в один тип. То есть, если сейчас документы такие:

тип foo:

{
   "common_field_1": "123",
   "specific_field_1": "...",
   "specific_field_2": "..."
}

тип bar:

{
   "common_field_1": "123",
   "specific_field_1": "...",
   "specific_field_2": "..."
}

то можно сделать так:

{
   "type": "foo",
   "common_field_1": "123",
   "foo_specific_field_1": "...",
   "foo_specific_field_2": "..."
}
{
  "type": "bar",
   "common_field_1": "123",
   "bar_specific_field_1": "...",
   "bar_specific_field_2": "..."
}

или

{
   "common_field_1": "123",
   "foo": {
      "specific_field_1": "...",
      "specific_field_2": "..."
   }
}
{
   "common_field_1": "123",
   "bar": {
      "specific_field_1": "...",
      "specific_field_2": "..."
   }
}

Можете объяснить, почему бы вы выбрали этот вариант? Я в эластике новичок, поэтому не совсем верно могу оценить преимущество одной организации хранения над другой.

Насколько я понял из примеров, для полей вложенных объектов не нужно будет добавлять префиксы?

Спасибо.

Можете объяснить, почему бы вы выбрали этот вариант?

Слишком большое количество индексов не желательно с точки зрения производительности. Мешать данные разных пользователей в одном индексе тоже плохо, потому что данные одного пользователя могут "портить" поиск по релевантности для других пользователей, и может быть использовано для слежки за данными других пользователей, другими словами, мешать данные разных пользователей я бы не рекомендовал (особенно, если вы в elasticsearch новичок). Из тех примеров, которые я привел выбирайте любой - это дело вашего вкуса. На уровне индекса, они все равно в практически одну и ту же структуру превратятся.

Спасибо! Буду экспериментировать.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.