2011-11-11 48 views
7

我在使用谷歌应用引擎数据存储时遇到了一些麻烦。自从引入新的定价模式以来,运行我的应用程序的成本大大增加。Google应用引擎过度小型数据存储操作

罪魁祸首似乎是“数据存储小操作”,每天超过2000万操作数!

有没有人有这个问题,我认为我没有做过量的密钥查找,而我只有5000个用户,每分钟大概有10 - 20个请求。

在此先感谢!

编辑

好了一些统计数据,这些都是紧靠后3小时。这是我所看到的在我的仪表板,在结算部分: Appengine dashboard - billing

,这里是一些统计信息:

Stats

显然,有相当多的呼叫datastore.get的。我开始认为这是我的设计造成的问题。那些获得对应的帐户。每个用户都有一个帐户,但帐户可以是两种类型之一,因此我使用组合。所以每个账户实体都有一个到其子账户实体的链接。 因此,当我搜索附近的用户时,需要使用查询获取帐户,然后在每个帐户上获取其子帐户。统计图片中最重要的要求是获得100个帐户的电话,然后必须对每个帐户进行一次获取。我原以为这是一个非常轻的查询,但我猜不是。我仍然对我的仪表板中记录的数据存储小操作的数量感到困惑。

+1

出于好奇,您典型的每月账单前后是什么? – Dave

+0

我每天的配额是2美元,我从来没有打过。现在它是5美元,我每天都超过它。我想我必须每天增加到9美元。 – Theblacknight

+0

对不起,我也应该问这个问题,但是你是否使用了memcache? – Dave

回答

11

绝对使用appstats,因为德鲁建议;无论您使用的是什么库,它都会告诉您您的处理程序正在执行哪些操作。最可能的罪魁祸首是按键查询和计数操作。

+1

现货在这里,我必须做一个定期的同步操作,并且每次同步都得到了一个总的用户数。所以我现在缓存,我可以看到不同之处。干杯! – Theblacknight

9

我的建议是使用将Appstats(Python/Java)来分析您的流量,并找出哪些处理程序产生的最数据存储欢声笑语。如果您在此发布代码,我们可能会提出优化建议。

+0

我知道我的大部分流量在哪里,我正在使用'Siena',一个与GAE一起工作的java库。我会通过我的代码,并尝试挑出可能有用的代码片段。 – Theblacknight

+0

AppStats已设置,当我有更多信息时将更新我原来的帖子。谢谢。 – Theblacknight

1

不要扫描数据存储,尽可能使用get(key)或get_by_id(id)或get_by_key_name(keyname)。

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) 
+0

使用java API我正在使用我需要手动获取在另一个实体中引用的每个属性。现在试着批量取货,看看这是否能给我提供我需要的帮助。 – Theblacknight

+0

查看此博文我写道,预取部分:http://bravenewmethod.wordpress.com/2011/03/23/developing-on-google-app-engine-for-production/ –

相关问题