我已经在cassandra中创建了表,其中主键是带有 timeuuid
作为数据类型。我能够用存储为的毫秒精度时间戳值唯一地标识每个记录 bigint
.
我使用了java datastax驱动程序来连接cassandra。在将记录插入数据库之前,我将毫秒时间戳转换为每个记录的uuid。它在头顶上,可以移除。
有人能解释一下使用 timeuuid
而不是 bigint
考虑到记录能够在没有timeuuid唯一性的情况下被识别?
两者之间是否有任何性能影响 timeuuid
以及 bigint
数据类型?
1条答案
按热度按时间wfsdck301#
如果从时间戳生成timeuuid,对性能的影响应该不会很大。
timeuuid
如果在同一毫秒内发生许多事件,并且需要使用timeuuid
在毫秒内,最多可以得到10000个不同的值。典型的用例是具有如下结构的表:在这种情况下,您将获得排序(升序或降序)以及的值的唯一性
tuuid
. 当然你可以带着(pk, timestamp, random-value)
,但与timeuuid
为了唯一性,不需要额外的列。它的缺点之一是timeuuid
例如,与spark集成,因为它没有这种类型,可能无法执行过滤器的推送。如果你不需要独特性,那就切换到
timestamp
-它在内部表示为8字节长-与bigint
,但您不需要自己进行转换等。