1

我们正在开发一个直接与 Gemfire 对话的分层 Java 应用程序。

我们需要能够生成唯一的“长”序列号,保证在应用程序的所有节点中都是唯一的。(并非所有节点都是集群的)

通常我会在 Oracle 中创建一个序列,但在这种情况下,即使我们的 Gemfire 配置连接到关系数据库以进行持久性写入,我们的应用程序也没有数据库的其他知识。

在不进入数据库的情况下生成那些有保证的唯一长值的最佳方法是什么?

4

1 回答 1

3

要问自己的第一个问题是您真的需要一个长序列号(单调递增的长整数)还是只需要一个全局唯一标识符(如 UUID)。

最高效的解决方案将是一个全球唯一的 id,我只建议使用 GUID。

如果您需要一个全局唯一的单调递增长值(长序列),那么您将不得不使用一些分布式锁定并在该区域中增加一个值。此方法和性能取决于您使用的区域类型。

查看 Region.replace(K, V, V)。它可以对特定区域定义下的值执行全局原子更新。如果您当前的区域类型没有充分定义,您可能需要考虑一个只有您的序列的区域。

于 2015-01-28T22:36:16.690 回答