GAE 数据存储增量 ID
Posted
技术标签:
【中文标题】GAE 数据存储增量 ID【英文标题】:GAE Datastore incremental ID 【发布时间】:2015-11-22 12:38:36 【问题描述】:在我的项目 (Java) 中,我需要存储在 Datastore 中的实体的增量 ID。对我来说最重要的是每一个下一个值都会大于前一个。
我尝试使用 DatastoreService.allocateIds(),但是在一些增量 id 之后,它从存储中的随机位置获取 id,并且违反了顺序。
有人可以帮助我吗? 提前谢谢你。
【问题讨论】:
你可以做 count + 1,虽然不是很好。为什么需要增量 ID? @marcadian ,我现在使用的这种方法对我来说似乎不太好。我需要保持一致性实体。由于它们数量众多,情况变得复杂,因此每秒添加的速度可能超过 10K。 查看memcached api。这是您可以做到这一点的唯一可能方法。但是,如果您想在缓存被驱逐时处理这种情况,则很难正确实施。 【参考方案1】:您应该使用内置 ID 分配器,并为您的顺序 ID 使用另一个字段。我自己尝试过,几乎不可能按照你想要的方式分配 ID,如果你犯了一个错误,那么你的整个 ap 就会崩溃,因为 ID 只能使用一次。
所以使用这种方法:两个 ID,一个由数据存储生成,一个自定义字段是具有您自己 ID 的整数或字符串。
【讨论】:
结果,我几乎做到了。这样的系统比较复杂,但是经过一天的寻找解决方案,我意识到自动生成ID只有正确的选项。 其实如果你需要sequencial ids,你不用自动生成ids,而是一个sharding counter,见:cloud.google.com/appengine/articles/sharding_counters。以上是关于GAE 数据存储增量 ID的主要内容,如果未能解决你的问题,请参考以下文章
Google AppEngine (GAE) - 完整的对象键