对于基于Java的谷歌应用引擎Web应用程序,是否有某种等效的方法来获得类似于oracle序列的序列值?
假设我有一个servlet,让我们用一个非常简单的工作来调用它SequenceServlet
。它只会在序列中写下下一个值。
使用Oracle你可以创建一个序列 - 让我们称之为“my_seq”并执行这个SQL:
select my_seq.nextval from dual
虽然可能有许多应用程序服务器,但有一个集中式数据库,因此这很容易。但我的谷歌应用引擎应用程序使用HRD(高复制数据存储区)。如何确保每个应用程序服务器都响应序列中的下一个数字?
我想确保在启动后如果有2个客户端请求...说请求A得到序列号10,请求B得到序列号15。
我想确保以下情况属实:
对于任何2个序列号,这通常都是正确的。
答案 0 :(得分:2)
对于人力资源开发来说,这并不像人们希望的那样微不足道。以下URL中有一篇合理的文章(使用Java示例),详细说明了如何实现分片计数器,这些计数器似乎基本上是您想要的。
通过使用数据存储区事务,您可以确保计数器值以原子方式增加。通过分割计数器,您可以确保这些事务的性能可以满足您的需求。
此外,通过使用memcache,可以提高读取性能。