Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 重复属性上的Google应用程序引擎ndb性能_Google App Engine_Google Cloud Datastore_App Engine Ndb - Fatal编程技术网

Google app engine 重复属性上的Google应用程序引擎ndb性能

Google app engine 重复属性上的Google应用程序引擎ndb性能,google-app-engine,google-cloud-datastore,app-engine-ndb,Google App Engine,Google Cloud Datastore,App Engine Ndb,如果我选择查询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 =

如果我选择查询
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

根据GAE的文档,数据存储似乎负责索引,第一个不太详细的选项是使用索引。然而,我没有找到任何文件来证实这一点

编辑


在第二个示例中,
UserProvider
的唯一目的是在用户与其登录提供者之间创建一对多关系。我想了解是否值得费心创建第二个实体,而不是查询
repeated
属性。另外,假设我所需要的只是
用户的密钥。但是,由于每个条目都需要索引,所以写入成本会增加,并且写入成本是基于更新的索引数量的。

o第一种情况下的查询应该更便宜。因此,这取决于您添加/删除提供者的频率。好的,听起来您不必为UserProvider操心。也许您应该使用StringProperty(设置为例如“FB”)而不是不指向任何地方的KeyProperty。存储的字节更少。不清楚在第一个版本中是否也有UserProvider类,或者是否只创建指向任何地方的键(顺便说一句,这是允许的:-)。这两个查询并不相等,因为一个返回用户实体,另一个返回用户提供程序实体。@GuidovanRossum I更新了问题,希望现在更清楚。考虑到您可以创建一个不指向任何内容的键,我确实花了一段时间才理解什么是ndb.Key。
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