什么时候在 Cassandra 中使用 UUID 而不是毫秒时间戳?
When to use UUID instead of millisecond timestamp in Cassandra?
我在 cassandra 中创建了 table,其中主键是一些数据类型为 timeuuid
的列。我能够使用存储为 bigint
.
的毫秒精度时间戳值来唯一标识每条记录
我使用了java datastax 驱动来连接cassandra。在将记录插入数据库之前,我将毫秒时间戳转换为每条记录的 UUID。这是开销,可以删除。
- 有人可以解释一下使用
timeuuid
而不是 bigint
的好处是什么?考虑到记录无需 timeuuid 的唯一性即可识别?
timeuuid
和 bigint
数据类型之间是否有任何性能影响?
如果您从时间戳生成 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
相同,但您不需要进行转换你自己等
我在 cassandra 中创建了 table,其中主键是一些数据类型为 timeuuid
的列。我能够使用存储为 bigint
.
我使用了java datastax 驱动来连接cassandra。在将记录插入数据库之前,我将毫秒时间戳转换为每条记录的 UUID。这是开销,可以删除。
- 有人可以解释一下使用
timeuuid
而不是bigint
的好处是什么?考虑到记录无需 timeuuid 的唯一性即可识别? timeuuid
和bigint
数据类型之间是否有任何性能影响?
如果您从时间戳生成 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
相同,但您不需要进行转换你自己等