优化Cloud Datastore NDB查询以减少读取操作次数

时间:2018-07-30 15:35:32

标签: google-cloud-datastore

在运行我的GAE应用1周后,我的帐户总数达到了3000万,我必须支付23.31美元:(

Cloud Datastore Read Ops Japan  30,245,982.00 Count $23.31

请帮助我优化查询。 在我的应用中,我有很多查询,主要是检查如果实体不存在,然后执行一些操作

tweet_db_qry = model.PopularTweet.query().filter(ndb.GenericProperty('twaccount_key') == twaccount_db.key).filter(ndb.GenericProperty('originaltweetid') == tweetid)  
if tweet_db_qry.count() == 0:

我打算将其更改为:

tweet_db = model.PopularTweet.query().filter(ndb.GenericProperty('twaccount_key') == twaccount_db.key).filter(ndb.GenericProperty('originaltweetid') == tweetid).get(keys_only=True)  
if tweet_db is None:  

2 个答案:

答案 0 :(得分:0)

检查Cloud Datastore best practices documentation,看看是否有任何建议适用于您的情况。有关API和查询的部分提供了一些建议,可以优化延迟和应用程序成本。

此外,如果您担心结算帐户中的费用,可以set up alerts and budgets进行GCP项目。

答案 1 :(得分:0)

您似乎想使用projection query。使用投影查询将意味着您只为查询付费,而不是读取查询的完整实体结果。您还可以在查询对象上使用fetch(limit = 1)将查询的读取次数限制为1个实体。