使用Google App Engine(GAE)生成哈希码

时间:2013-04-09 06:14:55

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

我需要设计一种为应用程序中存储的每个文档提供哈希的方法。

使用现有的哈希库(BCrypt等)甚至BSON ObjectId都会生成漂亮的“哈希”或“密钥”,但它很长。

我也明白,实现短哈希的唯一方法是散列更少的字符串(如果没有弄错)。就像哈希Long id盯着0, 1, 2, 3一样。

然而,很容易想到,它很难在Google App Engine(GAE)数据存储中实现,或者直到现在我还没有真正克服这个需求。

跨越服务器甚至跨数据中心和自动增量ID的GAE数据存储区实体并不是真的。

实现这一目标的策略是什么?

1 个答案:

答案 0 :(得分:2)

据我了解,您正在寻找一种为您的文档生成简短,唯一,字母数字标识符的方法。 URL缩短程序的功能(请参阅问题Making a short URL similar to TinyURL.comWhat's the best way to create a short hash, similiar to what tiny Url does?How to make unique short URL with Python?等)。我的回答是基于这个假设。

数据存储区生成唯一的自动递增ID,因此您可以依赖它。多个数据中心不是问题,您的ID将是唯一的,短的(至少,最初)并且没有冲突。这可能是微小的和类似的服务如何实现它。

在使用DatastoreService.allocateIds()将新文档保留在数据存储区中之前,您甚至可以请求一个或多个唯一ID,例如:

KeyRange keyRange = dataService.allocateIds("MyDocumentModel", 1);
long uniqueId = keyRange.getStart().getId();

然后你可以“哈希”这个ID,或者你可以通过简单地将整数ID转码为Base64(或Base36或你定义自己的字符的其他基础,例如,省略元音可以帮助你避免)来获得更短的字母数字ID不小心产生明显的咒骂词。)

如果可预测性存在问题,您可以使用一些随机字符为此字母数字ID添加前缀/后缀。