【问题标题】:Datastax Cassandra - Query Write TimesDatastax Cassandra - 查询写入时间
【发布时间】:2020-08-12 07:37:39
【问题描述】:

Cassandra 生成时间会因应用请求生成时间而异吗?

场景

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

  1. 写请求
  2. 删除请求

App2 节点比 App1 节点滞后约 500 毫秒。因此,来自 app2 端的删除请求会比写入请求更早获得时间戳,并且永远不会发生。

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

TIA

【问题讨论】:

  • Cassandra 处理提交日志,因此任何服务器时间不同步都会出现问题,因为提交日志仅以时间向前的方式执行/应用。 HTH
  • 你指的服务器计时,是Cassandra服务器计时还是app服务器计时?
  • 看我的回答,评论太大了。如果您需要更多详细信息,请告诉我。

标签: cassandra


【解决方案1】:

关于 Cassandra 的一些值得注意的事情:

  • Cassandra 在解析写入时不使用最后写入获胜策略 冲突。
  • CQL 不默认使用服务器端时间戳。
  • Cassandra 写入基于 客户端的时间戳 对滞后和时间偏移的容忍度。

所以直接回答你的问题

  1. app2 添加较早的时间戳删除请求
  2. app1 添加稍后的时间戳写入请求

Cassandra 将冲突检测为(可能)它是相同的记录。因此,它应用客户端时间戳验证逻辑来​​获得获胜者,而 app1 写入获胜并忽略删除。

当您添加 1 秒的延迟时,您的条目顺序正确且不存在冲突,可确保正确删除写入。

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

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

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

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 2017-03-04
    • 2015-05-24
    • 2014-03-16
    • 2016-09-21
    • 2021-11-21
    • 2020-11-01
    • 2020-02-12
    • 2016-01-11
    相关资源
    最近更新 更多