Google App Engine ndb在重复属性上的表现

mar*_*seu 4 google-app-engine app-engine-ndb google-cloud-datastore

如果我选择查询repeated属性,我是否会对查询性能支付罚金?例如:

class User(ndb.Model):
    user_name = ndb.StringProperty()
    login_providers = ndb.KeyProperty(repeated=true)

fbkey = ndb.Key("ProviderId", 1, "ProviderName", "FB")
for entry in User.query(User.login_providers == fbkey):
    # Do something with entry.key
Run Code Online (Sandbox Code Playgroud)

VS

class User(ndb.Model)
    user_name = ndb.StringProperty()

class UserProvider(ndb.Model):
    user_key = ndb.KeyProperty(kind=User)
    login_provider = ndb.KeyProperty()

for entry in UserProvider.query(
    UserProvider.user_key == auserkey,
    UserProvider.login_provider == fbkey
):
    # Do something with entry.user_key
Run Code Online (Sandbox Code Playgroud)

根据GAE的文档,似乎Datastore负责索引,而第一个不那么详细的选项就是使用索引.但是,我没有找到任何文件证实这一点.

编辑

UserProvider第二个示例的唯一目的是在用户和它的login_provider之间创建一对多关系.我想了解是否值得创建第二个实体而不是查询repeated属性.此外,假设我所需要的只是来自的关键User.

dra*_*onx 6

不会.但是您会提高写入成本,因为每个条目都需要编制索引,而写入成本则基于更新的索引数量.