[英]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.