经常提到的Couchbase中的解决方案是增量函数,您可以在数字键上调用增量,它将按顺序生成一个新的唯一编号.
我的问题是我无法理解我在复制方面遇到的大问题.
假设您有一个包含三个Couchbase节点的集群,并且您正在存储请求日志.您想要键入此日志,以便创建名为“requestlog_counter”的条目.
现在说我们有4个网络节点,每个节点每秒接收20个请求,每个节点需要记录为“request :: {ID})”.这是80秒的请求.
假设节点1和3具有一点点网络延迟,但两者都在同一时间接收这40个请求中的一个.您的脚本会递增请求计数器(假设此示例当前为1500)并获取ID.当然,现在可能BOTH Couchbase实例可以将1501返回到Web节点1和3,并且两个服务器现在都将尝试将它们正在处理的请求存储为“request:1501”.
现在,复制将处理这个,基本上最新的将赢.但是你现在已经失去了一个请求的记录.
那么现在是否意味着实际上您需要一种更好的方式来键入重要数据,并且在NoSQL集群环境中应该避免使用自动增量来获取绝对值和唯一密钥生成?
或者 – 作为密钥生成过程的一部分,您可以做些什么使100%可靠.
还请考虑使用跨数据中心复制的多集群环境.
谢谢.
麦克风
但是如果你想保留在couchbase中保存新项目的同时你不会覆盖现有的(例如“BOTH Couchbase实例可以返回1501”这样的情况)你可以使用StoreMode.Add的存储操作.因此,如果您同时调用couchbase.store(StoreMode.Add,“request:1501”,value),一个请求将成功完成,其他请求将失败并且您可以捕获此“失败”并尝试重复该存储操作再次(为新密钥获取新的自动增量ID)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。