你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
code4j - coder github: https://github.com/rpgmakervx
赞同来自:
strglee
PUT /test/test/2?version=1520834740000&version_type=external 时间戳精确到了毫秒
cyberdak
gtexpanse
要回复问题请先登录或注册
coder github: https://github.com/rpgmakervx
4 个回复
code4j - coder github: https://github.com/rpgmakervx
赞同来自:
所以问题来了:
case1:如果请求A B按顺序发起,A在prepare get 请求的时候,B也get到了,结果B执行的快,先一步对比完version然后版本+1,这个时候A再对比版本就出这个问题。这种情况下不影响数据一致性,毕竟B的结果是最新的,A失败了也没事儿。
case2:如果因为网络原因,A 发起 GET请求后B也拿到了version,但是下一步A执行的快,先一步对比完version然后+1了,这个时候B就失败了,这种情况下文档就不是最新的了。
那么知道这个原理了,可是仍旧不知道要怎么处理这种问题好?难不成我人为去给每个文档加锁吗?加锁竞争激烈的时候势必性能受影响。不知道大家工作中遇到这种问题是怎么处理的呢?
strglee
赞同来自:
version_type=external的时候是外部值控制。 在使用外部版本类型时,系统会检查传递给索引请求的版本号是否大于当前存储的文档的版本,如果为true,则文档将被索引并使用新的版本号。如果提供的值小于或等于存储文档的版本号,则会发生版本冲突,索引操作将失败。
所以最简单的实现方式就是每次更新使用当前时间戳作为版本号,
https://www.elastic.co/guide/e ... types
cyberdak
赞同来自:
gtexpanse
赞同来自: