有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

使用现有的散列库(BCrypt,等等)甚至BSONObjectId都会生成很好的“散列”或“键”,但它相当长

我也明白,实现短哈希的唯一方法是哈希更少的字符串(如果没有弄错的话)。比如hashLongid从0, 1, 2, 3开始等等

然而,很容易想到的是,在谷歌应用程序引擎(GAE)数据存储中实现它相当困难,或者直到现在我还没有真正跨越这一需求

GAE数据存储跨服务器甚至跨数据中心存储实体,而auto increment ID实际上并不适用于此

实现这一目标的战略是什么


共 (1) 个答案

  1. # 1 楼答案

    据我所知,您正在寻找一种为您的文档生成简短、唯一、字母数字标识符的方法。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将是唯一的、短的(至少在最初)并且不会发生冲突。tinyurl和类似的服务可能就是这样完成的

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

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

    然后,您可以“散列”此ID,或者只需将整数ID转换为Base64(或Base36或定义自己字符的其他基数,例如,省略元音可以帮助您避免意外生成明显的脏话),就可以获得更短的字母数字ID

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