The*_*heo 61
UUID
并且TIMEUUID
以相同的方式存储在Cassandra中,它们实际上只代表两种不同的排序实现.
TIMEUUID
列首先按其时间组件排序,然后按原始字节UUID
排序,而列首先按其版本排序,然后按时间组件排序为版本1,最后按原始字节排序.奇怪的是,时间组件排序实现在Cassandra代码之间UUIDType
和之间重复TimeUUIDType
,除了不同的格式.
我认为UUID
vs TIMEUUID
问题主要是作为文档:如果你选择TIMEUUID
你说你按时间顺序存储东西,并且这些东西可以同时发生,那么一个简单的时间戳是不够的.使用UUID
说您不关心订单(即使在实践中,如果您将版本1 UUID放入其中,列将按时间排序),您只需要确保具有唯一ID.
即使使用NOW()
生成UUID
值很方便,其他人阅读您的代码也会非常令人惊讶.
在宏观方案中它可能并不重要,但是对非版本1 UUID进行排序比版本1快一些,所以如果你有一个UUID
列并自己生成UUID,那么去另一个版本.
Bas*_*que 24
根据文档, A TimeUUID
是一个普通的老.UUID
甲UUID是一个简单的128位的值.把它想象成一个难以想象的大数字.
特定比特可以通过几种方法中的任何一种来确定.在原始的方法包括采取的MAC地址的计算机的网络硬件,结合当前的日期和时间,再加上任意号码和一个随机数.将所有这些组合在一起以获得几乎唯一的数字.
后来,由于各种原因(安全性,隐私性),在生成UUID值时发明了其他方法来组装比特.这些其他方法省略了日期时间和/或MAC地址作为成分.重点是:并非所有UUID值都具有嵌入的日期时间值.
Cassandra doc错误地将其TimeUUID称为"Type 1 UUID".正确的术语是版本1 UUID.此版本有时称为"基于时间的版本".
一点忠告
Cassandra似乎确定了这个特定版本的UUID,目的是提取128位的日期和时间部分.从UUID中提取日期时间是个坏主意.
首先,UUID从未打算用于此类历史跟踪.实际上,UUID的规范明确地认识到(a)计算机时钟可以被重置,因此(b)稍后生成的UUID实际上可以记录比先前的UUID更早的日期时间.不从UUID提取日期时间的另一个原因是因为您可能具有不是由time方法生成的UUID,因此您将基于实际上不表示日期时间的位来构建数据时间值创造.第三个原因是,当编程代码稍后被重构时,UUID可能在与数据库记录不同的时间生成,因此使用UUID的日期时间会产生误导.
如果需要跟踪日期时间历史记录,请明确执行此操作.在数据中创建日期时间字段.顺便说一句,跟踪UTC中的日期时间,但这是另一个主题.
归档时间: |
|
查看次数: |
36814 次 |
最近记录: |