我们正在开发一个直接与Gemfire对话的分层Java应用程序。
我们需要能够产生独特的长期"序列号,保证应用程序的所有节点都是唯一的。 (并非所有节点都是群集的)
通常我会在Oracle中创建一个序列,但在这种情况下,即使我们的Gemfire配置与关系数据库有连接以进行写后面持久性,我们的应用程序也没有其他数据库知识。
在不进入数据库的情况下,生成这些保证唯一长值的最佳方法是什么?
答案 0 :(得分:3)
问自己的第一个问题是你真的需要一个长序列号(单调增加长整数),还是只需要一个全局唯一标识符(如UUID)。
性能最佳的解决方案将成为全球唯一的ID,我建议使用GUID。
如果您需要一个全局唯一的单调增加长值(长序列),那么您将不得不使用一些分布式锁定并在该区域中增加一个值。此方法和性能取决于您使用的区域类型。
查看Region.replace(K,V,V)。它可以对特定区域定义下的值执行全局原子更新。如果当前区域类型没有充分定义,您可能需要考虑一个只包含序列的区域。