问题描述
google-cloud-ndb
Python 库提供了两种为 Datastore 实体生成标识符的方法:
-
integer_id()
:以整数形式返回 ID。 -
urlsafe()
:返回密钥的 base64 字符串。
如果我要创建到特定实体的 URL 映射(例如:/users/<user_id>/
),我可以使用这些 ID 选项之一吗?
我认为对 URL 使用 base64 编码版本有一些好处吗?唯一的问题是它会导致一些非常难看的 URL,所以为了美观,我更喜欢使用整数。
使用任一选项是否有技术优势(例如提高性能)?
解决方法
如果您在创建实体时指定自己的自定义 id,则 urlsafe 键很有用,因为您的自定义 id 可能包含无法进入 url 的字符。
此外,urlsafe 键还包含种类和项目 ID,这在您遇到一些电线交叉并将错误的 ID 传递到错误的位置时会很方便。
我不会说有性能优势。
关于 urlsafe 键的另一个注意事项是格式最近确实发生了变化。 ndb 库是向后兼容的,所以总的来说应该没问题,但他们将来可能会再次这样做,所以请注意这一点。