2

对于基于 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 个序列号,这通常需要为真。

4

1 回答 1

3

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

分片计数器

通过使用数据存储事务,您可以确保计数器值自动增加。通过对计数器进行分片,您可以确保这些事务的性能可以满足您的需求。

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

于 2013-05-29T19:05:29.117 回答