2012-06-06 36 views
1

我正在集群环境中开发Web应用程序。问题是我们需要为每个创建的实体生成一个ID。我们处于一个具有多个数据库节点的环境中,这些数据库节点都是相互流式传输的。我的想法是一个带有偏移量的序列。因此,一个站点的ID将以1结尾,接下来的2个,依此类推。这似乎是一个难以实施的解决方案,因为您仅限于许多环境。当您处于受干扰的数据库环境时,保证唯一生成的主键的“最佳”方式是什么?集群环境中的数据库ID生成

回答

0

就我个人而言,我更喜欢偏移序列。是的,你被限制在一定数量的环境中,但实际上,你通常可以从一开始就设置一些东西,以便可用环境的数量远远超过你真正需要的环境。如果你这样做

在网站1

CREATE SEQUENCE sequence_name 
    START WITH 1 
    INCREMENT BY 1000; 

在现场2

CREATE SEQUENCE sequence_name 
    START WITH 2 
    INCREMENT BY 1000; 

上下行,最多可以有999个站点,你必须返工你的序列之前。这通常绰绰有余。如果您认为实际上可能有1000个站点,则可以将增量设置为10,000或100,000。给定序列可以生成的值的数量,即使将增量设置为数百万,也不会耗尽。实际上,在处理序列问题之前,您会遇到流处理太多站点的问题。

如果您不想走这条路,另一个选择是使用SYS_GUID生成一个全局唯一的ID并将其用于您的主键。这不像使用序列那么高效,它需要更多的空间,但它确实允许您拥有任意数量的机器。