1
我正在運行一個更新ElasticSearch上的用戶文檔的進程。該進程可以在不同機器上的多個實例上運行。如果2個實例會嘗試運行腳本以在同一時間更新同一文檔,是否會出現由於競爭條件而導致某些數據丟失的情況?或者內部腳本機制是安全的(使用版本屬性進行樂觀鎖定或其他方式)?ElasticSearch腳本是否適用於併發問題?
The official ES scripts documentation
我正在運行一個更新ElasticSearch上的用戶文檔的進程。該進程可以在不同機器上的多個實例上運行。如果2個實例會嘗試運行腳本以在同一時間更新同一文檔,是否會出現由於競爭條件而導致某些數據丟失的情況?或者內部腳本機制是安全的(使用版本屬性進行樂觀鎖定或其他方式)?ElasticSearch腳本是否適用於併發問題?
The official ES scripts documentation
使用的版本屬性是那種工作是安全的。
執行搜索與version: true
GET /index/type/_search
{
"version": true
your_query...
}
然後進行更新,添加了對應於搜索過程中返回的數字版本屬性。
POST /index/type/the_id_to_update/_update?version=3 // <- returned by the search
{
"doc":{
"ok": "name"
}
}
https://www.elastic.co/guide/en/elasticsearch/guide/current/version-control.html
這就是我們在做什麼,直到如今。這裏的事情需要2次往返ES集羣。我遇到了* ES腳本*(https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html#_scripted_updates),它允許我們發送腳本來定義我們想要在一個往返和減少網絡。問題是,在使用這些腳本時,我沒有找到關於版本控制的任何信息。 –