Безопасно ли обновление массива в потоке документа Elasticsearch? - PullRequest
0 голосов
/ 31 января 2019

У меня есть документ, в котором массив строк является одним из его свойств.

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

Например, для документа, значение my_array которого равно:

my_array = [1,2,3,4]

Два потока выполняют следующий запрос на обновление, который запускает безболезненный скрипт для индекса с разными параметрами.

thread_0 -> my_item = 3

thread_1 -> my_item =2

int index_of_my_item = ctx._source.my_array.indexOf(params.my_item);

if (-1 != index_of_my_item) {
    ctx._source.my_array.remove(index_of_item);                    
}   

Безопасен ли поток выполнения?и значение свойства в документе будет:

my_array = [1,4]

Или есть условия гонки, которые необходимо учитывать?

Спасибо,

1 Ответ

0 голосов
/ 01 февраля 2019

ES работает над оптимистическим управлением параллелизмом и использует номер версии для реализации этого, поэтому не существует концепции поточно-ориентированной (с точки зрения ES).

Просто пройдите по этим ссылкам, и это даст вам справедливое представлениечто именно означает обновление для ES

https://www.elastic.co/guide/en/elasticsearch/guide/master/version-control.html https://www.elastic.co/guide/en/elasticsearch/guide/master/optimistic-concurrency-control.html

При обновлении документа с помощью API индекса мы читаем исходный документ, вносим изменения и затем переиндексируемвесь документ за один раз.Побеждает самый последний запрос на индексирование: любой документ, который был проиндексирован последним, хранится в Elasticsearch.Если кто-то еще поменяет документ за это время, его изменения будут потеряны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...