elasticsearch 并发控制
2015-08-31 10:56
204 查看
Elasticsearch使用
我们可以利用
GET 到当前待修改文档的_version数字
修改成功之后_version变成 2
然而,当我们再执行同样的索引请求,并依旧指定
所有的有关于更新或者删除文档的API都支持
如果你的数据库已经存在了版本号码,或者也可以代表版本的
Elasticsearch在处理外部版本号时会与对内部版本号的处理有些不同。它不再是检查
外部版本号不仅可以在索引和删除请求时使用,还可以在创建时使用。
例如,创建一篇使用外部版本号为
在返回结果中,我们可以发现
现在我们更新这个文档,并指定
请求被成功执行并且
如果你再次执行这个命令,你会得到之前的错误提示信息,因为你所指定的版本号并没有大于当前Elasticsearch中的版本号。
_version来确保所有的改变操作都被正确排序。如果一个旧的版本出现在新版本之后,它就会被忽略掉。
我们可以利用
_version的优点来确保我们程序修改的数据冲突不会造成数据丢失。我们可以按照我们的想法来指定
_version的数字。如果数字错误,请求就是失败。
GET 到当前待修改文档的_version数字
GET /website/blog/1[/code]
将_version值带入到下一次更新的连接中
PUT /website/blog/1?version=1
修改成功之后_version变成 2
然而,当我们再执行同样的索引请求,并依旧指定
version=1时,Elasticsearch就会返回一个
409 Conflict的响应码,返回内容如下:
{ "error" : "VersionConflictEngineException[[website][2] [blog][1]: version conflict, current [2], provided [1]]", "status" : 409 }[/code]
所有的有关于更新或者删除文档的API都支持
version这个参数,有了它你就通过修改你的程序来使用乐观并发控制
使用外部系统的版本
还有一种常见的情况就是我们还是使用其他的数据库来存储数据,而Elasticsearch只是帮我们检索数据。这也就意味着主数据库只要发生的变更,就需要将其拷贝到Elasticsearch中。如果多个进程同时发生,就会产生上文提到的那些并发问题。如果你的数据库已经存在了版本号码,或者也可以代表版本的
时间戳。这是你就可以在Elasticsearch的查询字符串后面添加
version_type=external来使用这些号码。版本号码必须要是大于零小于
9.2e+18(Java中long的最大正值)的整数。
Elasticsearch在处理外部版本号时会与对内部版本号的处理有些不同。它不再是检查
_version是否与请求中指定的数值相同,而是检查当前的
_version是否比指定的数值小。如果请求成功,那么外部的版本号就会被存储到文档中的
_version中。
外部版本号不仅可以在索引和删除请求时使用,还可以在创建时使用。
例如,创建一篇使用外部版本号为
5的博文,我们可以这样操作:
PUT /website/blog/2?version=5&version_type=external[/code]
在返回结果中,我们可以发现
_version是
5
现在我们更新这个文档,并指定
version为
10
PUT /website/blog/2?version=10&version_type=external[/code]
请求被成功执行并且
version也变成了
10
如果你再次执行这个命令,你会得到之前的错误提示信息,因为你所指定的版本号并没有大于当前Elasticsearch中的版本号。
相关文章推荐
- Rational Rose Enterprise Edition 2003 安装破解步骤
- Android移动端短信验证码的实现
- [leetcode] 273.Integer to English Words
- django中实现图片的上传功能
- JavaScript学习笔记3-附录(Java的各类型数据在内存中分配情况详解)
- linux module加载
- SpringMVC
- C++中定义一个不能被继承的类
- C++ Primer 学习笔记与思考_10 类型转换易错处大总结
- C++——设计与演化——读书笔记
- java并发:Timer的缺陷 用ScheduledExecutorService替代 .
- Linux系统信息日志
- UNIX网络编程卷一:第三十章 客户/服务器程序设计范式
- NSPredicate的本地模糊查询
- js控制限制输入数字,限制输入中文
- 系统导航栏背景、文字、按钮的设置
- 九度oj 1184
- 黑马入门教程笔记02-OC
- 简单的表达式求值
- 数据结构学习之路-第二章:双向链表