Datastax Cassandra - 查询写入时间

时间:2017-03-20 12:08:22

标签: cassandra

Cassandra会根据应用程序请求生成的时间生成时间吗?

情景

假设我有两个app节点向Cassandra节点发送写请求和删除请求。执行顺序是

  1. 写请求
  2. 删除请求
  3. App2节点滞后于App1节点大约500ms的差异。因此,来自app2端的删除请求比wite请求更早获得时间戳,并且它永远不会发生。

    在两个请求之间引发睡眠1秒以解决此问题,但是想要了解当应用时间不同步时Cassandra时钟如何为每个请求的写入工作。

    TIA

1 个答案:

答案 0 :(得分:1)

关于卡桑德拉的一些值得注意的事情:

  • Cassandra在解析写入时不使用last-write-wins策略 冲突。
  • CQL不默认使用服务器端时间戳。
  • Cassandra写道基于客户端的时间戳 对滞后和时间位移的容忍度。

所以直接回答你的问题

  1. app2 添加了更早的带时间戳的删除请求
  2. app1 添加以后加时间戳的写入请求
  3. Cassandra检测到冲突(大概)是同一记录。因此,它应用客户端时间戳验证逻辑来​​获取获胜者,并且app1写入获胜和删除被忽略。

    当您添加1秒的延迟时,您的输入顺序正确,并且没有冲突可确保正确删除写入。

    DataStax的这篇旧文章将详细解释:http://www.datastax.com/dev/blog/why-cassandra-doesnt-need-vector-clocks

    底线是 Cassandra CQL依赖于客户端时间戳来解决此类冲突

      

    这是一个非常简化的事件版本,不适用于复杂的场景。请阅读博客,以便更好地理解w.r.t的冲突解决方案。卡桑德拉的钟表。