Google App Engine中的密钥生成

时间:2011-05-28 04:35:31

标签: python google-app-engine

如果你们曾经使用过Google App Engine。它为创建的模型的每个实例生成一个键。它非常整洁。

我正在寻找建立这样的东西。他们是否这样做,以便密钥基于内容?或者他们只是从a-zA-Z0-9中随机选择50次,然后从中构建一个字符串?这听起来很合理,因为2键相同的可能性会低于1/10 ^ 89。

4 个答案:

答案 0 :(得分:3)

仅使用随机值不会削减它。虽然两个键相同的可能性非常小,但随着键的数量的增加,机会会迅速增加。请参阅birthday paradox

在大多数情况下,这种密钥的生成方式是通过包含多个值来保证唯一性,例如MAC地址或生成它的服务器的某个序列号,时间戳,特殊计数器的值。

答案 1 :(得分:1)

您可以找到有关如何构建通用唯一标识符的更多信息here

如果要从代码的php端创建它,可以使用uniqid函数。更多信息here

答案 2 :(得分:1)

App Engine中的密钥基于:

  1. 实体的祖先实体的密钥(如果有)。

  2. 实体的种类名称。

  3. 自动生成的整数id或用户指定的key_name。整数ID在通常增加的块中分配给应用程序的各种实例,因此可以保证它们是唯一的,但不能保证以单调递增的方式实际分配给实体。

  4. 密钥不使用普遍唯一的ID。

答案 3 :(得分:0)

可能不是100%唯一,但我使用这样的东西:

def get_unique_id_str():
    import binascii
    import uuid
    table = ''.join(chr(i) for i in xrange(256))
    return binascii.b2a_base64(uuid.uuid4().bytes).translate(table, '/+=\n')

key_name = get_unique_id_str()
instance = MyModel(key_name=key_name, ...)
...