使用Sharded Counter值作为实体ID以保持GAE Long ID较短是好的

时间:2015-01-15 21:52:40

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

使用GAE Sharded Counter代码生成的Long值的可行性是什么。在数据中心拥有唯一的长ID?

为什么我需要将计数器值用作ID? GAE生成非常长的Long值作为实体ID,在我的应用中我需要像Sharded计数器生成的短ID一样首先。

问题:某个点的分片计数器是否会为不同的请求生成相同的值,以便ID可能会发生冲突?

1 个答案:

答案 0 :(得分:1)

这是不可行的,因为分片计数器的目标是保持最终一致的计数,这有助于避免争用,同时通过将该工作分成不同的分片来增加或减少计数器的值。 get_count方法将总结所有分片计数器以返回总计数,但该值不能被视为唯一ID,因为它只能确定它最终将计算您对其执行的所有增加或减少操作,因此它可以为不同的请求返回相同的值,即使每个请求都涉及增加操作。

可以设计一个类似的方法,它有一个保留id池的分片,你必须修改分片计数器的代码,但不是分割计数器的增加或减少,操作会随机选择在预定义的一组分片的ID池中,其中一个返回一个id,并确保它不会再次返回。每个分片的池可以是符合您特定需求的数字范围,当您的其中一个池用完保留范围并且您必须重新填充时,您必须管理这种情况。它再次。

我建议您查看一下这篇文章,以获得解决此类问题的一些选项:http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram