gpt4 book ai didi

Cassandra - 使用 TimeUUID 重复时间戳?

转载 作者:行者123 更新时间:2023-12-02 04:07:57 31 4
gpt4 key购买 nike

我的传感器经常将数据写入日志文件。我想将这些日志存储到 Cassandra 中并与 Spark 一起处理它们。

我考虑过使用 TimeUUID用于存储我的时间戳以自动保留顺序的列。我的查询将大量使用范围查询,因此我认为这可能是理想的。但是,由于日志记录的频率,我的日志可能包含重复的时间戳。日志不会传输到 cassandra;我只处理历史数据。时间戳将成为我的复合主键的一部分。我想不出一个可行的列,我可以将其拉入行键以使具有重复时间戳的行唯一。

documentation说:“minTimeuuid 和 maxTimeuuid 函数返回的值不是真正的 UUID,因为这些值不符合 RFC 4122 指定的基于时间的 UUID 生成过程。与 now 函数不同,这些函数的结果是确定性的。”

强制使用 TimeUUID 的日期时,而不是使用 now,这可能最终会覆盖以前的数据。

我将使用 Java/Scala 将历史数据从 .json 批量插入到 Cassandra。 (Cassandra 3.0.8 | CQL 规范 3.4.0 | native 协议(protocol) v4)


我的数据中如何存在重复的时间戳?

  1. 我是否使用 TimeUUID(now) 作为主键并将实际日期/时间存储在不同的列中?这会让我失去已经订购实际日期/时间的好处。
  2. 我是否必须确保我的 Java/Scala 应用程序将生成有效、唯一的 TimeUUID?如果是这样,有什么我可以使用的通用库吗?

或者还有其他(更好)的选择吗?

谢谢

最佳答案

您使用 timeuuid 作为唯一标识符的想法是正确的方法。如果正确完成,您将不会有重复项。 timeuuid 是 type 1 uuid其中不仅包含时间戳,还包含一些熵,以保证即使在同一时间点也具有唯一性。

所以,现在的问题仍然是 - 您应该如何为历史数据生成 timeuuid?正如您所指出的, minTimeuuid/maxTimeuuid 函数不适合生成正确的版本 1 uuid。没关系,因为那不是他们的目的。稍后当您使用时间范围查询数据时,您将需要它们:

SELECT * FROM sensor_readings
WHERE sensor_id = 123
AND ts > maxTimeuuid('2016-07-15 00:00+0000')
AND ts < minTimeuuid('2016-07-17 00:00+0000')

不幸的是,CQL 不提供为给定时间戳生成它们的函数(从 CQL 3.3 开始),因此您的客户端必须生成 uuid。有一些 Java 库可以做到这一点。请参阅this question寻求一些建议。请务必选择一个保证独特性的优质库。

关于Cassandra - 使用 TimeUUID 重复时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38475196/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com