将数据插入 Apache Cassandra 时,您可以使用
USING TIMESTAMP <xxx>
指定自定义客户端时间戳,以便更好地控制最后写入获胜语义。文档中的示例都是使用以微秒为单位的时间戳,只是在客户端生成的。
是否有任何充分的理由我不能使用生成的数字,该数字远不及实际的微秒时间戳(例如适合 int64 的逻辑时钟的某些输出),如果我的应用程序可以方便地获得最后写入-根据该数字赢得语义?
我已经在 cqlsh 中尝试过此操作,并且一切似乎工作正常。 (特别是,TTL 过期似乎正常工作,我认为使用不切实际的时间戳可能会破坏这一点)。但我担心我可能会错过一些东西,例如,如果 cassandra 使用时间戳作为压缩策略或其他东西的一部分(除了为同一主键选择冲突单元格的获胜者之外的任何用途)。
我最初的想法是,使用任何“自定义时钟”作为时间戳 - 这就是它 - 最多会导致许多额外的工具出现问题,最坏的情况是不起作用,因为它们不会遵守/支持自定义时钟。
TTL 是在插入时根据 TTL 与当前时间计算的 - 因此它不受影响也就不足为奇了。