在像Cassandra这样的分布式数据库中生成人类可读的ID

时间:2018-05-31 15:12:02

标签: cassandra unique distributed id

我正在开发一个我们有分布式数据库(Cassandra)的项目,我们正在尝试生成人类可读的唯一ID(例如:354AFV35)。 Cassandra生成的UUID(例如:2e81ae02-1905-4def-9f24-baead0d90358)不具备人类可读性。

为Cassandra等分布式数据库创建唯一的人类可读ID有哪些方法?

1 个答案:

答案 0 :(得分:0)

它有点像一个有趣的问题,但真正归结为要求。您需要多少保证,所需的速率,内存和磁盘利用率,延迟。来自cassandra的时间uuids是非常独特的,只要每个实例每毫秒生成一个恒定的> 10,000个ID(这实际上是一个不可能的卷,所以不是问题)。

如果您的确定只是疯狂的可能性,但可能你可以随机组合一些量,碰撞可能性是好的。您始终可以使用LWT来确保它,但写入前的读取速度很慢,并且应尽可能避免使用。但是,如果您的新ID率处于足够低的速率,则LWT IF EXISTS检查是直接进行的,并且非常适合。

你可以拥有多个部分,例如来自普通词典的所有形容词/动词,但为每个应用服务器提供一个独特的名词词典(操作复杂性)。然后服务器只需要担心其自己的名词集与公共结合的唯一性。有很多聪明/有效的方法,应用程序可以跟踪其使用的ID,而无需实际存储巨大的字符串列表,如大型布隆过滤器(可以跳过重复使用可能的误报冲突)或分配单词整数值和保持delta序列或btree,实际上取决于空间和时间要求。