我有一个非常简单的方法
代码如下:
def _tx():
user = db_User()
user.put()
log = UserLog(parent=user)
log.data_url = log_url
log.put()
q = taskqueue.Queue('prepare-log-update')
q.add(taskqueue.Task(url="/jobs/PrepareLogUpdate", payload=str(log.key()), method="POST"), transactional=True)
return user
user = db.run_in_transaction(_tx)
无论出于何种原因,执行时间变化很大,似乎存在某种瓶颈。为了给你一个appstats的例子:
RPC
@68ms datastore_v3.BeginTransaction real=109ms api=0ms cost=0 billed_ops=[]
@284ms datastore_v3.Put real=284ms api=0ms cost=0 billed_ops=[]
@575ms datastore_v3.Put real=294ms api=0ms cost=0 billed_ops=[]
@872ms taskqueue.BulkAdd real=162ms api=0ms cost=0 billed_ops=[]
@1034ms datastore_v3.Commit real=91ms api=0ms cost=0 billed_ops=[]
为什么BeginTransaction调用需要100毫秒?甚至有些事件的召唤时间长达500毫秒。此外,Put()调用时间过长,项目中的数据不多,甚至没有索引的属性也很少。
我在这里缺少什么?
答案 0 :(得分:1)
发生的事情是您正在创建父子对象,从而创建行为非常不同的实体组。对于有父母的实体,请特别阅读每秒1次提交的文档。你为什么要用父母?如果问题是将父项存储为常规属性而不是实际的实体父项。