Python googleappengine中的密钥生成
如果你们用过谷歌应用引擎。它为所创建模型的每个实例生成一个键。它很整洁Python googleappengine中的密钥生成,python,google-app-engine,Python,Google App Engine,如果你们用过谷歌应用引擎。它为所创建模型的每个实例生成一个键。它很整洁 我正在考虑建造类似的东西。他们这样做是因为密钥是基于内容的吗?或者他们只是从a-zA-Z0-9中随机选择50次,然后从中构建一个字符串?这听起来很合理,因为两个键相同的几率会低于1/10^89。仅仅使用随机值并不能减少它。虽然两个密钥相同的可能性非常小,但随着生成的密钥数量的增加,这种可能性迅速增加。看 在大多数情况下,生成此类密钥的方式保证了唯一性,方法是包含多个值,如MAC地址或生成密钥的服务器的某个序列号、时间戳、特殊
我正在考虑建造类似的东西。他们这样做是因为密钥是基于内容的吗?或者他们只是从
a-zA-Z0-9
中随机选择50次,然后从中构建一个字符串?这听起来很合理,因为两个键相同的几率会低于1/10^89。仅仅使用随机值并不能减少它。虽然两个密钥相同的可能性非常小,但随着生成的密钥数量的增加,这种可能性迅速增加。看
在大多数情况下,生成此类密钥的方式保证了唯一性,方法是包含多个值,如MAC地址或生成密钥的服务器的某个序列号、时间戳、特殊计数器的值。可能不是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, ...)
...
您可以找到有关如何构造通用唯一标识符的更多信息
如果要从代码的php端创建它,可以使用
uniqid
函数。更多信息。应用程序引擎中的键基于:
密钥不使用任何通用唯一ID。因此,将生成时间的时间戳作为前缀或后缀包含到密钥中是一个好主意吗?这是您的选择。在我看来,首先做依赖于服务器的部分,然后是时间戳,然后是计数器,这是最符合逻辑的。计数器用于密钥生成速度如此之快,时间戳不会改变的情况。