我在使用Google应用引擎数据存储时遇到了一些问题。自从推出新的定价模型以来,运行我的应用程序的成本大幅增加。
罪魁祸首似乎是“数据存储小型运营”,每天运营量超过2000万次!
有没有人遇到这个问题,我认为我没有进行过多的密钥查找,而且我只有5000个用户,每分钟大约有10-20个请求。
提前致谢!
修改
好了一些统计数据,这些数据是在3小时之后。以下是我在仪表板中的结算部分中看到的内容:
以下是一些统计数据:
显然,有很多对datastore.get的调用。我开始认为这是我的设计引起的问题。这些与账户相对应。每个用户都有一个帐户,但帐户可以是两种类型之一,为此我使用了合成。因此,每个帐户实体都有一个指向其子帐户实体的链接。 因此,当我搜索附近的用户时,它涉及使用查询获取帐户,然后对每个帐户进行获取以获取其子帐户。统计图片中的最高请求是获得100个帐户的调用,然后必须对每个帐户执行get。我原以为这是一个非常轻松的查询,但我猜不是。我仍然对我的仪表板中记录的数据存储区小操作数量感到困惑。
答案 0 :(得分:11)
正如Drew建议的那样,绝对使用appstats;无论您使用哪个库,它都会告诉您处理程序正在执行哪些操作。最有可能的罪魁祸首是仅限密钥的查询和计数操作。
答案 1 :(得分:9)
答案 2 :(得分:1)
请勿扫描数据存储区,尽可能多地使用get(key)或get_by_id(id)或get_by_key_name(keyname)。
答案 3 :(得分:1)
您的模型中有很多ReferenceProperty属性吗?访问它们将触发每个属性的db.get,除非您预取它们。这将触发101个db.get请求。
class Foo(db.Model):
user = db.ReferenceProperty(User)
foos = Foo.all().fetch(100)
for f in foos:
print f.user.name # this triggers db.get(parent=f, key=f.user)