# Частые обновления индекса

**URL:** <https://discuss.elastic.co/t/topic/106577>\
**Category:** Вопросы на русском языке\
**Created:** [November 6, 2017, 6:45pm UTC](https://discuss.elastic.co/t/topic/106577 "2017-11-06T18:45:32Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [November 6, 2017, 6:45pm UTC](https://discuss.elastic.co/t/topic/106577/1 "2017-11-06T18:45:32Z")

</div>

Как ведет себя индекс при частых обновлениях? Он будет увеличиваться до бесконечности или же elastic будет оптимизировать индекс и форматировать его?

---

<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:** [November 6, 2017, 7:01pm UTC](https://discuss.elastic.co/t/topic/106577/2 "2017-11-06T19:01:21Z")

</div>

А какие записи обновляются? В основном свежие, или которые в индексе уже долгое время были?

---

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [November 6, 2017, 7:15pm UTC](https://discuss.elastic.co/t/topic/106577/3 "2017-11-06T19:15:26Z")

</div>

Чаще всего средней свежести, которые лежат в индексе в пределах 3 мес. Они могут обновляться в интервале от нескольких раз в сутки д в течении одной недели. Ежесуточно изменяется порядка 1-2% от общего объема документов. Документов в индексе 4.5 млн.

---

<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:** [November 6, 2017, 7:38pm UTC](https://discuss.elastic.co/t/topic/106577/4 "2017-11-06T19:38:31Z")

</div>

Данные в elasticsearch индексируются в сегменты. Сегменты эти неизменны, то есть как только мы документ добавили, он в сегменте так и остаются, пока этот сегмент жив. Если нам надо документ обновить, мы помечаем его как удаленный в старом сегменте и добавляем в новый сегмент. Когда сегментов становиться слишком много - они сливаются, и во время этого слития, несколько сегментов объединяются в один и удаленные записи игнорируются. Слитие происходит на нескольких уровнях - то есть новые маленькие сегменты сливаются в сегменты побольше, те между собой в еще большие, и т.д. Как это выглядит примерно можно посмотреть [тут](http://blog.mikemccandless.com/2011/02/visualizing-lucenes-segment-merges.html). Суть в том, старые копии обновленных записей удаляются только при слитии сегментов, в которых эти записи были в момент удаления. То есть, обновленные свежие записи в свежих сегментах места много не занимают. Но если запись старая, она скорее всего слилась в старый большой сегмент. Эти сегменты сливаются редко, так что копии старых записей, могут оставаться достаточно долго.

---

<div class="post-metadata">

**Author:** ![jetnet](https://avatars.discourse-cdn.com/v4/letter/j/a87d85/32.png) [@jetnet](https://discuss.elastic.co/u/jetnet)\
**Post date:** [November 6, 2017, 8:24pm UTC](https://discuss.elastic.co/t/topic/106577/5 "2017-11-06T20:24:45Z")

</div>

Вот тут коллега достаточно подробно описал [segment merging](https://www.outcoldman.com/en/archive/2017/07/13/elasticsearch-explaining-merge-settings/).  
У меня правда кое-какие вопросы всё равно остались - придётся код читать.

---

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [November 7, 2017, 5:06am UTC](https://discuss.elastic.co/t/topic/106577/6 "2017-11-07T05:06:40Z")

</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:** [November 7, 2017, 2:59pm UTC](https://discuss.elastic.co/t/topic/106577/7 "2017-11-07T14:59:27Z")

</div>

Если вы спрашиваете про `nested` - то да, они всегда остаются вместе, даже когда сегменты сливаются. Если про `parent/child` - то они остаются на одной шарде, их положение в сегментах особой роли не играет.

---

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [November 7, 2017, 3:30pm UTC](https://discuss.elastic.co/t/topic/106577/8 "2017-11-07T15:30:58Z")

</div>

Спасибо!

---

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [November 14, 2017, 7:58am UTC](https://discuss.elastic.co/t/topic/106577/9 "2017-11-14T07:58:00Z")

</div>

А можно ли использовать [Force Merge](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/indices-forcemerge.html) с флагом only\_expunge\_deletes = true для того что бы действительно удалить строки помеченные для удаления?

---

<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:** [November 14, 2017, 12:04pm UTC](https://discuss.elastic.co/t/topic/106577/10 "2017-11-14T12:04:04Z")

</div>

А цель какая?

---

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [November 14, 2017, 12:53pm UTC](https://discuss.elastic.co/t/topic/106577/11 "2017-11-14T12:53:20Z")

</div>

При индексировании я не учел ряд факторов, потом несколько раз переиндексировал документы с новой структурой. В итоге индекс разросся. Отношение документов к удаленным составляет (41091796 к 7571766), что равно примерно 18%. При размере в 640Гб, это могло бы освободить порядка 100Гб.

---

<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:** [November 14, 2017, 1:35pm UTC](https://discuss.elastic.co/t/topic/106577/12 "2017-11-14T13:35:03Z")

</div>

То есть, вы этот индекс создали и теперь он меняться никогда не будет?

---

<div class="post-metadata">

**Author:** ![IvanTushin](https://avatars.discourse-cdn.com/v4/letter/i/dbc845/32.png) [@IvanTushin](https://discuss.elastic.co/u/IvanTushin)\
**Post date:** [November 15, 2017, 10:22am UTC](https://discuss.elastic.co/t/topic/106577/13 "2017-11-15T10:22:34Z")

</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:** [November 15, 2017, 4:36pm UTC](https://discuss.elastic.co/t/topic/106577/14 "2017-11-15T16:36:47Z")

</div>

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

---

<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:** [December 13, 2017, 4:36pm UTC](https://discuss.elastic.co/t/topic/106577/15 "2017-12-13T16:36:51Z")

</div>

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