我正在研究分布式数据库。 我试图生成一个唯一的ID,作为cassandra中的“列族主键”。
我阅读了一些使用Java和UUID
来完成此操作的文章,但似乎存在碰撞的概率(即使很低)。
我想知道是否有一种基于时间生成唯一ID的方法?
TimeUUID
类型,它支持类型1 UUID。它使用当前时间和创建者的MAC地址以及序列号生成。如果正确生成TimeUUID号码,则可以零冲突地完成此操作(您可以使用CQL now()
method或插入自己的代码,Java SDK提供了一些线程安全的实现)。TimeUUIDs
的主要优点是ID可以按时间排序。有关更多信息,请参见http://wiki.apache.org/cassandra/TimeBaseUUIDNotes。UUID
类型支持类型4 UUID。这些只是随机位。存在碰撞概率,但碰撞概率(假设未关联的随机数源,如果在Java中生成)非常低-如果每秒创建10亿个,并持续100年,则发生碰撞的概率约为50%。(有关更多详细信息,请参见http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates。)now()
生成timeuuid,并使用uuid()
函数生成uuid类型的字符串。