![](/img/trans.png)
[英]How to make query of AND & OR operation from list of elements we we to search in ndb datastore using python in Google App Engine
[英]How to optimize read operation from NDB datastore?
我有以下课程来存储数据:
class AppList(ndb.Model):
'''
Index
Key: sender
'''
sender = ndb.StringProperty()
texts = ndb.StringProperty(repeated=True)
recipients = ndb.StringProperty(repeated=True)
service_centers = ndb.StringProperty(repeated=True)
counter = ndb.IntegerProperty(default=0)
ignore = ndb.BooleanProperty(default=False)
added = ndb.DateTimeProperty(auto_now_add=True, indexed=False)
updated = ndb.DateTimeProperty(auto_now=True, indexed=False)
目前它包含大约4`000条记录。
当我尝试在循环中使用以下代码读取它时:
entries = AppList.query()
res, cur, more = entries.fetch_page(100, start_cursor=cur)
它会失败,并显示OverQuotaError(The API call datastore_v3.RunQuery() required more quota than is available.)
。 免费配额为0.05万次。 看起来是由于多个repeated
属性而发生的。 但是我读取所有值的唯一任务是分配False值以ignore
每个记录的属性( entry.ignore = False
)。
在我的情况下,有什么方法可以优化阅读?
当您获取所有实体并对其进行更新时,appstats不会有太大帮助。
当您尝试更新实体时,投影查询将不起作用。 在几天内零零碎碎地进行点胶,这样您就不会超出配额或启用结算功能。
编写具有很多属性的实体会导致更高的IOPS,因为您还要更新索引。 如果任何属性不需要索引,请设置noindex = True并重新部署,这将减少您的IOPS,不确定是否会产生多少影响。 默认情况下,除BlobProperty之外的所有其他属性均已编制索引。
如果不需要获取所有属性的值,则可以使用投影查询 ,例如:
entries = AppList.query()
res, cur, more = entries.fetch_page(100, start_cursor=cur, projection=[AppList.ignore])
但是,以上内容可能无法解决您的问题,因为对实体的每次读取都应该是一次读取,因此可能还会发生其他情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.