什么时候在 Cassandra 中使用 UUID 而不是毫秒时间戳?

When to use UUID instead of millisecond timestamp in Cassandra?

我在 cassandra 中创建了 table,其中主键是一些数据类型为 timeuuid 的列。我能够使用存储为 bigint.

的毫秒精度时间戳值来唯一标识每条记录

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

  1. 有人可以解释一下使用 timeuuid 而不是 bigint 的好处是什么?考虑到记录无需 timeuuid 的唯一性即可识别?
  2. timeuuidbigint 数据类型之间是否有任何性能影响?

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

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

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

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