【问题标题】:Google Cloud NDB integer vs urlsafe IDs?Google Cloud NDB 整数与 urlsafe ID?
【发布时间】:2025-12-06 12:25:01
【问题描述】:

google-cloud-ndb Python 库提供了两种为 Datastore 实体生成标识符的方法:

如果我正在创建到特定实体的 URL 映射(例如:/users/<user_id>/),我可以使用这些 ID 选项中的任何一个吗?

我认为使用 base64 编码版本的 URL 有一些好处?唯一的问题是它会导致一些非常丑陋的 URL,所以我更喜欢使用整数来美观。

使用任一选项是否有技术优势(如提高性能)?

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore app-engine-ndb


    【解决方案1】:

    如果您在创建实体时指定自己的自定义 id,则 urlsafe 键很有用,因为您的自定义 id 可能包含无法进入 url 的字符。

    此外,urlsafe 密钥中还包含了种类和项目 id,这可以很方便,以防万一你弄错了一些线并将错误的 id 传递到错误的位置。

    我不会说有性能优势。

    关于 urlsafe 键的另一个注意事项是格式最近确实发生了变化。 ndb 库是向后兼容的,所以总的来说应该没问题,但他们将来可能会再次这样做,所以请注意这一点。

    【讨论】:

    • 我会说没有充分的理由在 URL 中使用又长又丑的 urlsafe 键。您提到的原因在实践中不太可能发生。
    • 我一直在思考这个问题,我想起了祖先键。我从不使用它们,但我认为 urlsafe 键可能对此有用
    • 对于祖先,我会将两个 ID 都放在 URL 中,而不是 urlsafe 键。您可以为子实体使用自定义较短的 ID,例如 /parent/1234567890/child/1