繁体   English   中英

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

[英]Generating Hash codes with Google App Engine (GAE)

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

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

我还了解,实现短哈希的唯一方法是哈希较少的字符串(如果没有记错的话)。 就像哈希Long id从0, 1, 2, 3等开始。

但是,这很容易想到,很难在Google App Engine(GAE)数据存储区中实现,或者直到现在我还没有真正满足这一需求。

GAE数据存储区跨服务器甚至跨数据中心存储实体,并且自动增量ID并非真正适合此目的。

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

据我了解,您正在寻找一种为文档生成短的,唯一的字母数字标识符的方法。 URL缩短器的工作方式(请参阅制作与TinyURL.com类似的短URL的问题或者类似于 微小的Url的创建短哈希的最佳方法是什么?如何使用Python制作唯一的短URL?等等。 )。 我的答案就是基于这个假设。

数据存储区会生成唯一的自动递增的ID,因此您可以依靠它。 多个数据中心不是问题,您的ID将是唯一的,短的(至少在最初是这样),并且不会发生冲突。 这可能是tinyurl和类似服务完成它的方式。

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

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

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

如果可预测性是一个问题,则可以在此字母数字ID前面加上一些随机字符作为后缀。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM