【发布时间】:2010-10-31 14:04:27
【问题描述】:
我基本上有经典的多对多模型。一个用户、一个奖项以及用户和奖项之间的“多对多”表映射。
每个用户有大约 400 个奖励,每个奖励分配给大约 1/2 的用户。
我想遍历所有用户的奖励并总结他们的积分。在 SQL 中,它将是多对多之间的表连接,然后遍历每一行。在具有 MySQL 实例的体面机器上,400 行根本不是什么大问题。
在应用引擎上,我看到大约需要 10 秒来计算总和。大部分时间都花在 Google 的数据存储中。这是 cProfile 的前几行
ncalls tottime percall cumtime percall filename:lineno(function) 462 6.291 0.014 6.868 0.015 {google3.apphosting.runtime._apphosting_runtime___python__apiproxy.Wait} 913 0.148 0.000 1.437 0.002 数据存储.py:524(_FromPb) 8212 0.130 0.000 0.502 0.000 datastore_types.py:1345(FromPropertyPb) 462 0.120 0.000 0.458 0.001 {google3.net.proto._net_proto___parse__python.MergeFromString}我的数据模型错了吗?我做错了吗?这是我必须处理缓存和批量更新的缺点吗(这将是一个非常痛苦的事情)。
【问题讨论】:
-
+1 大声笑。我喜欢这个问题的标题!
-
Google 的 BigTable 基本上不是哈希表吗?
-
那个顶级功能是等待...你为什么要在等待中花费 6 秒?
-
@balpha:不,它没有实现为哈希表。 @workmad3:那是等待数据存储进程的应用程序进程(我不确定,它可能在也可能不在同一个节点上运行)。
标签: django google-app-engine django-models bigtable