【问题标题】:What should I store as my index in client code?我应该在客户端代码中存储什么作为索引?
【发布时间】:2012-04-14 18:21:42
【问题描述】:

我正在使用 Google App Engine 并存储用户。以前,我在我的 userId 字段中使用带有自动递增 int 的 MySQL,但现在 GAE 会为我存储的每个新实体自动生成一个密钥,例如 g5kZXZ-aGVsbG93b3JsZHIKCxIEVXNlchgNDA,但它们也会自动生成一个自动递增 ID int。

我应该在我的客户端代码中使用哪一个来存储为 userId?使用 GAE 生成的长密钥是否有任何优势,或者在性能和查找方面使用小的 int ID 是否相同?两者相比有什么优势,还是几乎没有区别?

编辑:抱歉,我的问题不够清楚。这就是我要问的: 这与长度无关,但拥有查找键是否让我比没有它领先一步?因为如果我想查找一个用户,我必须通过电子邮件查找他,但是现在我在“表”中拥有该行的键,这会给我带来什么好处吗?

【问题讨论】:

  • 您是在谈论使用OpenID 还是其他方式?我会通过他们的文档了解两者的长期计划以及如何使用两者。选择看起来最长且不变的那个。

标签: mysql database google-app-engine


【解决方案1】:

两者都可以,使用一长串字母或短一串字母来识别用户没有性能差异。

【讨论】:

  • 嗯,这与长度无关,但如果拥有钥匙会让我比没有钥匙领先一步吗?因为如果我想查找一个用户,我必须通过电子邮件查找他,但是现在我在“表格”中拥有该行的键,这会给我带来什么优势吗?
  • 您可能希望通过密钥进行查找,因为数据存储区的 API 已针对此进行了优化。在高性能场景中维护自动递增 ID 的效率也很低,因此您可能需要调查一下将其删除。
  • 好的,很好。那么,如果我已经有了它,我该如何快速获取它呢?目前我在做users=User.all() users.filter("userEmail =", userEmail) user=users.get() 只是通过另一个过滤器吗?
  • 如果您有密钥,您只需调用 db.get(key) developers.google.com/appengine/docs/python/datastore/… -- 无需查询,它接受多个密钥来获取多个实体。
  • 好的,最后一件事,我有你在这里:i.imgur.com/6tfVY.png 前 4 列由系统生成。键名代表什么?摆脱字段 ID(不确定是否可能)会减少写入操作的数量吗?
【解决方案2】:

请记住,生成的实体 ID 不能保证是单调递增的值。

【讨论】:

    猜你喜欢
    • 2011-10-08
    • 1970-01-01
    • 2012-05-22
    • 2023-03-03
    • 1970-01-01
    • 2021-02-10
    • 2016-06-12
    • 2018-06-27
    • 2022-08-24
    相关资源
    最近更新 更多