GAE HR数据存储上的db.get([keys])非常慢

时间:2011-10-31 19:30:33

标签: performance google-app-engine google-cloud-datastore

我正在使用db.get([keys])并且遇到极慢的读取。对于简单测试,至少需要“9008cpu_ms 2125api_cpu_ms”。 键阵列长度约为200 这是正常的吗? 实体很小:

p1 = db.StringProperty(indexed=False) - ~20 characters
p2 = db.StringProperty(indexed=False, required=True) ~10 characters
p3 = db.GeoPtProperty(indexed=False, required=True)
p4 = db.StringListProperty(indexed=False) 10 items x ~10 characters

HRD数据存储区中的实体总数:~1000。摘要:~200。

Appstats节目:

datastore_v3.RunQuery    9ms (29ms api)
datastore_v3.Next    32ms (16ms api)
datastore_v3.Next    11ms (16ms api)
datastore_v3.Next    16ms (16ms api)
datastore_v3.Next    86ms (16ms api)
datastore_v3.Next    8ms (16ms api)
datastore_v3.Next    84ms (16ms api)
datastore_v3.Next    8ms (16ms api)
datastore_v3.Next    92ms (16ms api)
datastore_v3.Next    14ms (16ms api)
datastore_v3.Next    82ms (16ms api)
datastore_v3.Next    8ms (16ms api)
datastore_v3.Next    86ms (16ms api)
datastore_v3.Next    96ms (16ms api)
datastore_v3.Next    7ms (16ms api)
datastore_v3.Next    92ms (16ms api)
datastore_v3.Next    92ms (16ms api)
datastore_v3.Next    9ms (16ms api)
datastore_v3.Next    89ms (16ms api)
datastore_v3.Next    7ms (4ms api)
datastore_v3.Get    5692ms (8ms api)
datastore_v3.Get    5688ms (8ms api)
datastore_v3.Get    5684ms (8ms api)</code>

数以百计:

datastore_v3.Get    ~ 5681ms (8ms api)

来源:

logging.debug('Fetching ' + str(len(m.keys())) + ' entities')
items = db.get(m.keys())
logging.debug('Done fetching items')

日志:

D 2011-10-30 22:46:41.495 Fetching 238 entities
D 2011-10-30 22:46:50.009 Done fetching items
W 2011-10-30 22:46:54.407 Full proto too large to save, cleared variables.

更新1(2011年10月31日,星期一,格林威治标准时间23:33:42):

在搜索可能的解决方案时,我删除了StringList属性并重新创建了实体。没有变化。

示例实体:

ID/Name|description|location|name
id=804|Sample description|54.8968721,23.892426|Sample place

更新2(2011年11月1日星期二,UTC时间12:27:31):

Appstats输出截图:

Screenshot of Appstats output

1 个答案:

答案 0 :(得分:1)

是的,需要一段时间才能获取1000个实体(每个实体在listproperty中有10个项目!)是正常的。高CPU毫秒表示您花费大量时间解码和处理实体,除了实际获取它们的API时间。

请记住,默认情况下,获取是非常一致的。如果你不需要这个,你可以通过最终一致的获取来加快速度,如记录here所述。