我使用 Python 作为开发脚本和 NDB。
生成自动数字 id(键)的默认算法是什么?如果应用程序中的总记录低于 32 位范围,是否可以安全地假设该应用程序中的键值永远不会超过?
我的实际问题是,我的客户端应用程序不支持 64 位整数,如果 AppEngine 将生成大于 32 位整数的数字键,我的客户端应用程序将出现意外行为。一种解决方案是使用字符串键。但是大部分客户端已经编写好了,更改客户端代码将是巨大的重构。
是否可以限制 AppEngine 生成低于 32 位值的数字键?谢谢
我使用 Python 作为开发脚本和 NDB。
生成自动数字 id(键)的默认算法是什么?如果应用程序中的总记录低于 32 位范围,是否可以安全地假设该应用程序中的键值永远不会超过?
我的实际问题是,我的客户端应用程序不支持 64 位整数,如果 AppEngine 将生成大于 32 位整数的数字键,我的客户端应用程序将出现意外行为。一种解决方案是使用字符串键。但是大部分客户端已经编写好了,更改客户端代码将是巨大的重构。
是否可以限制 AppEngine 生成低于 32 位值的数字键?谢谢
不,文档所说的只是 ID 是系统生成的:https ://developers.google.com/appengine/docs/python/ndb/entities#numeric_keys
但是,您可以使用allocate_ids
让系统为您生成一些 id,您可以决定是否使用这些 id。只要allocate_ids
最终返回足够小的值,这将起作用,但这也不能保证。
帮助(但不能保证)避免这种情况的一种方法是使用实体组:每个实体组都有自己的一组数字 ID。不过,这并不是对实体组的充分利用,因为对实体组的写入速率是有限的(经验法则是 1 次写入 / 秒)
真正的解决方案是咬紧牙关,让您的客户端应用程序能够处理大整数 ID。