数据存储瓶颈

时间:2014-03-27 12:53:13

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

我有一个非常简单的方法

  1. 打开数据存储区事务。
  2. 创建数据存储项目。
  3. 将另一个数据存储项创建为第一个数据存储项的子项。
  4. 创建任务
  5. 代码如下:

    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()调用时间过长,项目中的数据不多,甚至没有索引的属性也很少。

    我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

发生的事情是您正在创建父子对象,从而创建行为非常不同的实体组。对于有父母的实体,请特别阅读每秒1次提交的文档。你为什么要用父母?如果问题是将父项存储为常规属性而不是实际的实体父项。