我需要产生的唯一增量、数字交易的身份证为每个请求我要一定的XML RPC。这些数字只是需要独特的在我的领域,但将产生在多个机器。

我真的不想要跟踪这个号码在数据库和处理行锁等于每一个个单一的交易。我试着破解这个使用一个微秒的时间戳,但没碰撞的几线-我应用程序需要支持数以百计的螺纹。

任何想法,将不胜感激。

编辑:如果每项交易id只是要比前一个请求吗?

有帮助吗?

解决方案

如果你要是使用这种数以百计的线,正在多个机器,而要求增量的ID,你会需要一些集中的地方储存和锁定最后产生的身份证号码。这并不一定必须是在一个数据库,但是这将是最常见的选择。中央服务器什么都没做,但是Id可能提供相同的功能,但这可能失败目的分配这一点。

如果他们需要的是渐进的,任何形式的时间戳不会保证独一无二的。

如果你不需要他们以渐进的,GUID会的工作。可能做了一些类型的合并的时间戳+硬件ID每个系统上可以得到独特的标识符,但是ID些部分不一定是唯一的。

你能不能使用双硬件Id+增量时间戳?这将使每个特定机Id增量,但不一定是唯一的整个领域。

----编辑-----

我不认为使用任何形式的时间戳是要对你的工作,对2的原因。

首先,你永远不能够保证2线上不同机器不会尝试安排在同一时间,无论什么样的决定时使用。在足够高的分辨率,这将是不可能的,但不能保证。

第二,要使这项工作,甚至如果你能解决的冲突问题上,你就会得到每个系统要具有完全相同的时钟与微秒的精确度,这是不真实际的。

其他提示

这是一个非常困难的问题,特别是如果你不想创建一个业绩的瓶颈。你说的那个Id需要'的增量"和"数字'--这是一个具体的业务约束,或者存在一些其他的目的吗?

如果这些都不是必要的,可以用来应付,其最常见的平台有图书馆。他们让你产生许多(几百万!) IDs在非常短的时间跨度和相当舒适有没有冲突。相关文维基百科上的要求:

换句话说,只有在产生之后 1亿来应付每一秒的 接下来的100年中,该概率 创造的只是一个复会 约50%。

如果删除'增量'从你的要求,可以使用 GUID.

我不看你怎么可以实现增量在多个进程如果没有某种共同的数据。

如果你的目标的一个窗平台,你有没有尝试 联锁API ?

谷歌GUID发电机 对于任何一种语言你是在寻找,然后转到一个号码如果你真的需要数字。这不是增量。

或拥有的每一个线程的"保留"一千(或万亿美元)交易的身份证和把他们一个在一段时间,和"保护区"的下一堆在运行。仍然没有真正的增量。

我是GUID人群,但如果这是不可能的,你能不能考虑使用 创建db4oSQL精简 在严重的数据库?

如果每个客户可以跟踪自己的"下一个id",然后你可以跟一个中央服务器,并获得一定范围的身份证,也许是1000时间。一旦客户的身份证,它会帮你的服务器。

这会让你的系统有一个中央来源的身份证,并且还避免具有谈到数据库对每一个标识。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top