【问题标题】:When to use UUID instead of millisecond timestamp in Cassandra?何时在 Cassandra 中使用 UUID 而不是毫秒时间戳?
【发布时间】:2021-01-30 01:56:43
【问题描述】:

我在 cassandra 中创建了表,其中主键是某个以 timeuuid 为数据类型的列。我能够通过存储为bigint 的毫秒精度时间戳值唯一地识别每条记录。

我使用java datastax驱动连接cassandra。在将记录插入数据库之前,我将每条记录的毫秒时间戳转换为 UUID。这是开销,可以删除。

  1. 考虑到记录能够在没有 timeuuid 唯一性的情况下被识别,有人能解释一下使用 timeuuid 而不是 bigint 有什么好处吗?
  2. timeuuidbigint 数据类型之间是否存在性能影响?

【问题讨论】:

    标签: java cassandra timestamp datastax-java-driver


    【解决方案1】:

    如果从时间戳生成 timeuuid,对性能的影响应该不会很大。 timeuuid 很有用,如果您可能在同一毫秒内发生许多事件,并且您需要排序 - 使用 timeuuid 您可能会在毫秒内获得多达 10,000 个不同的值。典型的用例是具有如下结构的表:

    create table tuuid (
      pk int,
      tuuid timeuuid, 
      ....
      ....,
      primary key (pk, tuiid));
    

    在这种情况下,您将获得排序(升序或降序)以及tuuid 值的唯一性。当然,您可以使用(pk, timestamp, random-value) 的主键,但使用timeuuid,您不需要额外的列来保证唯一性。 timeuuid 的一个缺点是与 Spark 的集成,例如,因为它没有这种类型,并且可能无法执行过滤器的推送。

    如果您不需要唯一性,则只需切换到 timestamp - 它在内部表示为 8 字节长 - 与 bigint 相同,但您不需要自己进行转换等。

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 2015-04-17
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多