我正在使用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输出截图:
答案 0 :(得分:1)
是的,需要一段时间才能获取1000个实体(每个实体在listproperty中有10个项目!)是正常的。高CPU毫秒表示您花费大量时间解码和处理实体,除了实际获取它们的API时间。
请记住,默认情况下,获取是非常一致的。如果你不需要这个,你可以通过最终一致的获取来加快速度,如记录here所述。