为什么Cassandra如此依赖于客户端本地时间戳?
以下情况对于Cassandra来说可能是逻辑正确的,但对于用户来说很困难。 比如说: Cassandra一致性级别:全写,一读 复制系数:3 对于一条记录,行键:001,列:status为什么Cassandra如此依赖于客户端本地时间戳?,cassandra,timestamp,consistency,Cassandra,Timestamp,Consistency,以下情况对于Cassandra来说可能是逻辑正确的,但对于用户来说很困难。 比如说: Cassandra一致性级别:全写,一读 复制系数:3 对于一条记录,行键:001,列:status 客户端1,为行键001插入值,状态:True,时间戳 11:00:05 客户端2切片查询,获取行键001的值True,@11:00:00 客户端2,行键001的更新值,状态:False,时间戳 11:00:02 因此,客户机更新序列是True到False,尽管更新请求来自不同的节点,但序列是逻辑顺序的 但结果是
否则,Cassandra的一致性很弱,甚至R+W>N.CQL使用服务器端时间戳,而传统的Thrift接口使用客户端时间戳 请注意,您所描述的并不是一致性问题,因为在编写之后,所有响应都将彼此一致。但这违反了因果关系。即使使用服务器端时间戳,您也可能会遇到同时写入相同列的问题
这里讨论了一些问题:CQL使用服务器端时间戳,但是传统的Thrift接口使用客户端时间戳 请注意,您所描述的并不是一致性问题,因为在编写之后,所有响应都将彼此一致。但这违反了因果关系。即使使用服务器端时间戳,您也可能会遇到同时写入相同列的问题
这里讨论了一些问题:简单的回答是,CQL实际上默认为服务器提供的时间戳
作为一个较长的回答,我在上写了一篇关于时间戳在冲突解决中的作用的帖子。简短的回答是,CQL实际上默认为服务器提供的时间戳
作为一个较长的回答,我在上写了一篇关于时间戳在冲突解决中的作用的帖子。什么是服务器提供的时间戳?例如,我的复制系数是3,一致性级别是全部写入,那么哪个节点的时间戳将用于一个特定记录?在你的博客中,你说Cassandra在这里放弃的是基于现有值为更新创建自定义行为的能力。但这里需要的是因果关系结果,因为新数据已经被客户机读取,并且基于此,它进行了更新。卡桑德拉被时间戳愚弄了(由于时钟漂移)。所以对于具有强一致性写入的单列更新,服务器端时间戳可能更好。什么是服务器提供的时间戳?例如,我的复制系数是3,一致性级别是全部写入,那么哪个节点的时间戳将用于一个特定记录?在你的博客中,你说Cassandra在这里放弃的是基于现有值为更新创建自定义行为的能力。但这里需要的是因果关系结果,因为新数据已经被客户机读取,并且基于此,它进行了更新。卡桑德拉被时间戳愚弄了(由于时钟漂移)。因此,对于具有强一致性写入的单列更新,服务器端时间戳可能会更好。从上面看,我认为在步骤2之后可以得到值True的原因是Cassandra根据序列而不是时间戳进行插入。否则,您不应该看到真值,这意味着Cassandra不太依赖于客户端本地时间。从上面看,我认为在步骤2之后可以得到真值的原因是Cassandra基于序列而不是时间戳进行插入。否则,您不应该看到真正的值,这意味着Cassandra不那么依赖于客户端本地时间。