在cassandra中何时使用uuid而不是毫秒时间戳?

olqngx59  于 2021-06-09  发布在  Cassandra
关注(0)|答案(1)|浏览(592)

我已经在cassandra中创建了表,其中主键是带有 timeuuid 作为数据类型。我能够用存储为的毫秒精度时间戳值唯一地标识每个记录 bigint .
我使用了java datastax驱动程序来连接cassandra。在将记录插入数据库之前,我将毫秒时间戳转换为每个记录的uuid。它在头顶上,可以移除。
有人能解释一下使用 timeuuid 而不是 bigint 考虑到记录能够在没有timeuuid唯一性的情况下被识别?
两者之间是否有任何性能影响 timeuuid 以及 bigint 数据类型?

wfsdck30

wfsdck301#

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

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

在这种情况下,您将获得排序(升序或降序)以及的值的唯一性 tuuid . 当然你可以带着 (pk, timestamp, random-value) ,但与 timeuuid 为了唯一性,不需要额外的列。它的缺点之一是 timeuuid 例如,与spark集成,因为它没有这种类型,可能无法执行过滤器的推送。
如果你不需要独特性,那就切换到 timestamp -它在内部表示为8字节长-与 bigint ,但您不需要自己进行转换等。

相关问题