# Как делать массовый обход всех записей (scan & bulk)?

**URL:** <https://discuss.elastic.co/t/scan-bulk/24397>\
**Category:** Вопросы на русском языке\
**Created:** [June 26, 2015, 5:06am UTC](https://discuss.elastic.co/t/scan-bulk/24397 "2015-06-26T05:06:41Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Stan](https://avatars.discourse-cdn.com/v4/letter/s/51bf81/32.png) [@Stan](https://discuss.elastic.co/u/Stan)\
**Post date:** [June 26, 2015, 5:06am UTC](https://discuss.elastic.co/t/scan-bulk/24397/1 "2015-06-26T05:06:42Z")

</div>

Привет!

Возникла задача. Нужно обойти 5 млн. записей в Эластике, в каждую внести изменение, потом сохранить обратно. Пошел стандартным путем. Создал scroll-окно, получил первые 4000 записей, модифицировал их (добавил новую key-value значение), сформировал bulk-запрос, вызвал его.... и все. Больше ничего не происходит.

Такое ощущение, что делать одновременно scan и bulk нельзя, но конкретики не нашел.

Какой best way делать такие вещи?

Заранее спасибо!

---

<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:** [June 26, 2015, 3:01pm UTC](https://discuss.elastic.co/t/scan-bulk/24397/2 "2015-06-26T15:01:16Z")

</div>

> [@Stan](#):
>
> Больше ничего не происходит.

А можно подробнее про эту часть? Что значит ничего не происходи? Запрос завис или он вернулся, но записи не обновились? Если запрос вернулся, что было в ответе сервера?

И еще пара вопросов. На каком языке все это написано? И сколько записей в индексе?

---

<div class="post-metadata">

**Author:** ![Stan](https://avatars.discourse-cdn.com/v4/letter/s/51bf81/32.png) [@Stan](https://discuss.elastic.co/u/Stan)\
**Post date:** [June 26, 2015, 3:26pm UTC](https://discuss.elastic.co/t/scan-bulk/24397/3 "2015-06-26T15:26:49Z")

</div>

Сейчас уже все сделал. Проблема оказалась в том, что за раз выбиралось 4000 записей, модифицировались, и 4000 записей пытались записаться. Изменил на 1500 - все стало нормально. Размер одной записи примерно килобайт в виде JSON.

Кейсы были такие (воспроизвожу хронологически):

1. Был проведен один цикл чтения, запись, и все, На записи все повисло, по таймауту не отвалилось.
2. Один цикл чтения, запись, на записи вис 60 секунд, затем ошибка таймаута, и вылет ES. Перезагрузил.
3. Повтор 1-го кейса
4. Исправил число извлекаемых за раз записей на 1500. После этого все ок.

Язык - Ruby + гем ruby-elasticsearch (который стандартный, без дополнительных фреймворков). В индексе несколько types, в сумме около 30 млн. записей. Из них 5 млн. - в том types, про который я написал.

---

<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:** [June 26, 2015, 3:36pm UTC](https://discuss.elastic.co/t/scan-bulk/24397/4 "2015-06-26T15:36:15Z")

</div>

4000 x 1K = 4G и этот запрос должен целиком умещаться в памяти сервере для того, чтобы его обработать. Если на сервере памяти не достаточно, то сервер действительно может зависнуть пытаясь эту память найти. Изменение 1/6 записей из индекса описаным образом вполне разумен. Но если вам, когда-нибудь, надо будет изменить 30-50% или больше записей в индексе, то быстрее может быть проиндексировать записи в новый индекс и старый индекс затем удалить.

---

<div class="post-metadata">

**Author:** ![Stan](https://avatars.discourse-cdn.com/v4/letter/s/51bf81/32.png) [@Stan](https://discuss.elastic.co/u/Stan)\
**Post date:** [June 26, 2015, 3:47pm UTC](https://discuss.elastic.co/t/scan-bulk/24397/5 "2015-06-26T15:47:08Z")

</div>

Ой! Прошу прощения - 1024 байта, то есть 1 кбайт.

---

<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:** [June 26, 2015, 4:02pm UTC](https://discuss.elastic.co/t/scan-bulk/24397/6 "2015-06-26T16:02:47Z")

</div>

Нет, это я просто не достаточно кофе выпил. 4М получается на запрос. Странно, должен был бы потянуть.

---

<div class="post-metadata">

**Author:** ![Stan](https://avatars.discourse-cdn.com/v4/letter/s/51bf81/32.png) [@Stan](https://discuss.elastic.co/u/Stan)\
**Post date:** [June 26, 2015, 4:43pm UTC](https://discuss.elastic.co/t/scan-bulk/24397/7 "2015-06-26T16:43:22Z")

</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:** [June 26, 2015, 5:05pm UTC](https://discuss.elastic.co/t/scan-bulk/24397/8 "2015-06-26T17:05:02Z")

</div>

Если опять поломается - пишите. Было бы интересно разобраться, что там происходит.

---

<div class="post-metadata">

**Author:** ![Stan](https://avatars.discourse-cdn.com/v4/letter/s/51bf81/32.png) [@Stan](https://discuss.elastic.co/u/Stan)\
**Post date:** [June 26, 2015, 7:23pm UTC](https://discuss.elastic.co/t/scan-bulk/24397/9 "2015-06-26T19:23:18Z")

</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:** [July 6, 2017, 1:51pm UTC](https://discuss.elastic.co/t/scan-bulk/24397/10 "2017-07-06T13:51:59Z")

</div>

Closed on July 6, 2017, 1:51pm UTC


