如果我选择查询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
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
根据GAE的文档,似乎Datastore负责索引,而第一个不那么详细的选项就是使用索引。但是,我没有找到任何证明这一点的文件。
修改
第二个示例中UserProvider
的唯一目的是在用户和它的login_provider之间创建一对多关系。我想了解是否值得创建第二个实体而不是查询repeated
属性。另外,假设我需要的只是User
的密钥。
答案 0 :(得分:6)
没有。但是你会提高写入成本,因为每个条目都需要编入索引,而写入成本则基于更新的索引数量。