Java Google App Engine数据存储是否与Oracle Sequence相当?

时间:2013-05-29 18:06:05

标签: google-app-engine google-cloud-datastore

对于基于Java的谷歌应用引擎Web应用程序,是否有某种等效的方法来获得类似于oracle序列的序列值?

假设我有一个servlet,让我们用一个非常简单的工作来调用它SequenceServlet。它只会在序列中写下下一个值。

使用Oracle你可以创建一个序列 - 让我们称之为“my_seq”并执行这个SQL:

select my_seq.nextval from dual

虽然可能有许多应用程序服务器,但有一个集中式数据库,因此这很容易。但我的谷歌应用引擎应用程序使用HRD(高复制数据存储区)。如何确保每个应用程序服务器都响应序列中的下一个数字?

我想确保在启动后如果有2个客户端请求...说请求A得到序列号10,请求B得到序列号15。

我想确保以下情况属实:

  • 请求B肯定发生在请求A之后
  • 请求A和B之间恰好有4个请求

对于任何2个序列号,这通常都是正确的。

1 个答案:

答案 0 :(得分:2)

对于人力资源开发来说,这并不像人们希望的那样微不足道。以下URL中有一篇合理的文章(使用Java示例),详细说明了如何实现分片计数器,这些计数器似乎基本上是您想要的。

Sharding Counters

通过使用数据存储区事务,您可以确保计数器值以原子方式增加。通过分割计数器,您可以确保这些事务的性能可以满足您的需求。

此外,通过使用memcache,可以提高读取性能。