跨系统生成唯一编号的算法

时间:2017-02-12 16:25:08

标签: c++ algorithm

我有问题,我必须在整个系统中生成唯一编号。应用程序'X'通过使用一些输入生成值'A',此值'A'将被其他一些应用程序用作输入生成一些其他值'B'。

'A'和'B'这两个值稍后将保存在KDB中。这样做的目的是识别'A'触发的'B'生成值的哪个值。 'A'以非常高的速度生成,因此我正在寻找快速且不妨碍应用程序'X'的性能的算法。

1 个答案:

答案 0 :(得分:2)

你想要的是一个UUID。见https://en.m.wikipedia.org/wiki/Universally_unique_identifier。它们通常基于MAC地址,时间戳,哈希和随机性等内容。他们的理论意图是全球独一无二。根据平台的不同,通常会内置用于生成它们的功能。如果有必要的话,我可以在手机上进行更多扩展,但是从那里开始。

你可能不时遇到它们,https://www.uuidgenerator.net可以给你一些例子。

如果您将它们插入数据库,那么另一个要调查的策略是使用数据库自​​动分配的主键ID号。并不总是可能,因为你必须先存储它们才能获得一个ID,但哲学上听起来对你的应用是正确的。

尽管有很多警告,你也可以自己动手。例如。应用程序启动的时间戳与某些内部计数器连接在一起。只要注意碰撞风险,即使不太可能,例如两个应用程序同时启动,或系统时钟不正确。鉴于存在其他更可靠的策略,我不认为这种方法可以用于严肃的使用。

无论您使用什么,我建议最终也将它用作数据库中的主键。它将简化您的整体操作,并且在数据库中具有两个唯一ID(例如UUID加上自动生成的主键)会使您的数据库非常规化(https://en.m.wikipedia.org/wiki/Database_normalization)。