# Долгий реиндекс неотсортированных данных

**URL:** <https://discuss.elastic.co/t/topic/286603>\
**Category:** Вопросы на русском языке\
**Created:** [October 13, 2021, 9:54am UTC](https://discuss.elastic.co/t/topic/286603 "2021-10-13T09:54:29Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![Aliaksandr](https://avatars.discourse-cdn.com/v4/letter/a/5fc32e/32.png) [@Aliaksandr](https://discuss.elastic.co/u/Aliaksandr)\
**Post date:** [October 13, 2021, 9:54am UTC](https://discuss.elastic.co/t/topic/286603/1 "2021-10-13T09:54:29Z")

</div>

Добрый день.  
Имеется около 120 млн объектов, которые нужно проиндексировать.

Отправляю объекты на реиндекс **предварительно отсортировав** (по полю id типа guid), реиндекс занимает около 8 часов.

Отправляю эти же объеты не сортируя - индексация занимает 3 суток и более, причём первые 10-20 млн объектов индексируются довольно быстро, каждые последующие 5 млн объектов индексируются всё медленнее, после 60млн объекты индексируются адски медленно.

В обоих случаях индекс предварительно создаётся с ноля, id документа генерируется на стороне эластика, сортировка индексу не задаётся. Во втором случае (при медленной индексации) BLOCK I/O эластик-докера в 4-5 раз больше.

В чём может быть причина такого поведения? Связано ли это как-то с мержем сегментов? Почему влияет предварительная сортировка объектов (хотя сам эластик про неё ничего не знает)?

P.S. используется одна нода эластика.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 14, 2021, 8:08pm UTC](https://discuss.elastic.co/t/topic/286603/2 "2021-10-14T20:08:59Z")

</div>

Как генерируются id? Если взять два документа с похожими id, есть вероятность, что остальные поля тоже будут похожи? Например, если компонента id, отвечающая за узел одна и та же и узел генерирует почти одни и те же документы, то документы близкие по id будут более похожи друг на друга чем документы значительно отличающиеся друг от друг по id. Возможна у вас такая ситуация? Если нет, то надо смотреть на установки индекса, мэппинг и команду переиндексации

---

<div class="post-metadata">

**Author:** ![Aliaksandr](https://avatars.discourse-cdn.com/v4/letter/a/5fc32e/32.png) [@Aliaksandr](https://discuss.elastic.co/u/Aliaksandr)\
**Post date:** [October 14, 2021, 8:31pm UTC](https://discuss.elastic.co/t/topic/286603/3 "2021-10-14T20:31:03Z")

</div>

id генерируется как маркер + guid.  
Что за компонента, отвечающая за узел? Что подразумевается под "узел", который генерирует докуметы?  
Документы могут быть между собой похожи, могут быть полностью идентичны (кроме id) вне зависимости от id. На что может влиять похожесть документов? Тем более, если в документы в обоих случаях одни и те же.

Какие установки индекса нужно смотреть? Установки и маппинг в обоих случаях (медленный и быстрый реиндекс) полностью одинаковые. Команда переиндексации тоже.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 14, 2021, 8:35pm UTC](https://discuss.elastic.co/t/topic/286603/4 "2021-10-14T20:35:34Z")

</div>

Идея такая, если документы с одинаковым маркером почти одинаковые, то при индексации они попадут в один и тот же сегмент и очень хорошо скомпрессируются. Это в свою очередь значительно уменьшит размер индекса, нагрузку на диск и т.д.

---

<div class="post-metadata">

**Author:** ![Aliaksandr](https://avatars.discourse-cdn.com/v4/letter/a/5fc32e/32.png) [@Aliaksandr](https://discuss.elastic.co/u/Aliaksandr)\
**Post date:** [October 14, 2021, 8:50pm UTC](https://discuss.elastic.co/t/topic/286603/5 "2021-10-14T20:50:39Z")

</div>

Т.е. при индексации ищутся похожие документы и кладутся в один сегмент? Т.е. при добавлении нового документа эластик пробегается по всем существующим документам и как-то сравнивает их чтобы найти похожие?

---

<div class="post-metadata">

**Author:** ![Aliaksandr](https://avatars.discourse-cdn.com/v4/letter/a/5fc32e/32.png) [@Aliaksandr](https://discuss.elastic.co/u/Aliaksandr)\
**Post date:** [October 14, 2021, 8:52pm UTC](https://discuss.elastic.co/t/topic/286603/6 "2021-10-14T20:52:36Z")

</div>

Кстати, в моём случае эластик ничего не знает про id объекта - это просто одно из нескольких полей? \_id документа генерирует сам эластик.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 14, 2021, 9:02pm UTC](https://discuss.elastic.co/t/topic/286603/7 "2021-10-14T21:02:53Z")

</div>

> **[Store compression in Lucene and Elasticsearch](https://www.elastic.co/blog/store-compression-in-lucene-and-elasticsearch)**

---

<div class="post-metadata">

**Author:** ![Aliaksandr](https://avatars.discourse-cdn.com/v4/letter/a/5fc32e/32.png) [@Aliaksandr](https://discuss.elastic.co/u/Aliaksandr)\
**Post date:** [October 15, 2021, 9:41am UTC](https://discuss.elastic.co/t/topic/286603/8 "2021-10-15T09:41:00Z")

</div>

Ничего не написано про то, что эластик как-то группирует "похожие" объекты..

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 15, 2021, 3:32pm UTC](https://discuss.elastic.co/t/topic/286603/9 "2021-10-15T15:32:26Z")

</div>

> It works by grouping documents into blocks of 16KB and then compresses them together using [LZ4](http://en.wikipedia.org/wiki/LZ4_%28compression_algorithm%29), a lightweight compression algorithm. The benefit of this approach is that it also helps compressing short documents since several documents would be compressed into a single block.

Если вы один и тот же документ компрессируете в одном блоке несколько раз, то сжатие будет гораздо выше, чем если туда добавлять разные документы.

---

<div class="post-metadata">

**Author:** ![Aliaksandr](https://avatars.discourse-cdn.com/v4/letter/a/5fc32e/32.png) [@Aliaksandr](https://discuss.elastic.co/u/Aliaksandr)\
**Post date:** [October 15, 2021, 4:22pm UTC](https://discuss.elastic.co/t/topic/286603/10 "2021-10-15T16:22:54Z")

</div>

Так про сжатие понятно, вопрос в другом - почему время индексирования существенно разное? Почему индесация каждой последующей партии объектов существенно замедляется? Ищутся ли дубли во всём существующем индексе (а не только в пределах блока 16k) при добавлении нового документа?

Понятно, что если в пачке объектов много дублей, то этот сегмент лучше и, вероятно, быстрее сожмётся, и в итоге индекс на диске займёт меньше места (кстати, в моём случае я не вижу существенной разницы итогового размера индекса, но это не точно). Но, опять же, это всё происходит перед сбросом сегментов на диск, и не должно так сильно влиять на величину i/o диска.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 15, 2021, 4:30pm UTC](https://discuss.elastic.co/t/topic/286603/11 "2021-10-15T16:30:43Z")

</div>

Дубли не ищутся вообще. Просто во время индексации создается много сегментов, которые потом сливаются в более большие сегменты, если сегменты изначально маленькие, то время сливание и I/O значительно меньше. Другими словами, это в первую очередь влияет на I/O, все остальное уже из этого следует.

---

<div class="post-metadata">

**Author:** ![Aliaksandr](https://avatars.discourse-cdn.com/v4/letter/a/5fc32e/32.png) [@Aliaksandr](https://discuss.elastic.co/u/Aliaksandr)\
**Post date:** [October 15, 2021, 4:47pm UTC](https://discuss.elastic.co/t/topic/286603/12 "2021-10-15T16:47:45Z")

</div>

В эту картину только не укладывается тот факт, что реиндекс существенно замедляется с ростом индекса.

Спасибо за ответы.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 15, 2021, 5:16pm UTC](https://discuss.elastic.co/t/topic/286603/13 "2021-10-15T17:16:09Z")

</div>

> **[Visualizing Lucene's segment merges](https://blog.mikemccandless.com/2011/02/visualizing-lucenes-segment-merges.html)**
>
> If you've ever wondered how Lucene picks segments to merge during indexing, it looks something like this: That video displays segment merges...

---

<div class="post-metadata">

**Author:** ![Aliaksandr](https://avatars.discourse-cdn.com/v4/letter/a/5fc32e/32.png) [@Aliaksandr](https://discuss.elastic.co/u/Aliaksandr)\
**Post date:** [October 15, 2021, 5:35pm UTC](https://discuss.elastic.co/t/topic/286603/14 "2021-10-15T17:35:22Z")

</div>

Спасибо, видел это видео. В целом оно даёт понимание о том, как мержатся сегменты. Но из него не видно, как на процесс может влиять сортировка.

Т.е. то, что при сортировке данных возможно подобные документы оказываются рядом и попадают в один батч, индексируются быстрее и индекс занимает меньше места (за счёт лучшего сжатия) - понятно и логично. Но никак не могу понять, почему с ростом индекса может существенно замедляться скорость индексации неотсортированных данных. Получается на реальных данных надо готовиться к худшему варианту - очень медленной индексации.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [November 12, 2021, 5:35pm UTC](https://discuss.elastic.co/t/topic/286603/15 "2021-11-12T17:35:24Z")

</div>

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