有没有办法让GAJ中的django远程api运行得更快?

时间:2011-06-29 10:02:23

标签: django google-app-engine django-nonrel djangoappengine

跟进此问题here

我终于编写了一个代码生成工具来将我的所有数据库数据包装成这样的东西:

Pdtfaamt(fano=212373,comsname='SMM',pdtcode='20PLFCL',kind='1',fatype='S',itemno='A3',itemamt=75,type=0).save()
Pdtfaamt(fano=212374,comsname='SMM',pdtcode='20PLFCL',kind='1',fatype='S',itemno='E1',itemamt=75,type=0).save()
Pdtfaamt(fano=212375,comsname='SMM',pdtcode='20PLFCL',kind='1',fatype='S',itemno='E6',itemamt=75,type=0).save()
Pdtfaamt(fano=212376,comsname='SMM',pdtcode='20PLFCL',kind='1',fatype='C',itemno='A3',itemamt=3,type=1).save()

是的,没错!我将整个数据库拉出来并将数据转换为填充指令代码,以便我能够将数据库迁移到GAE。

所以我部署了django-nonrel项目,使用django-nonrel远程api来触发数据填充过程。

除了存在问题外,它可以正常工作:它非常慢。谁能告诉我如何才能提高速度?我做了一些计算,可能需要30天的时间才能在GAE上运行我的所有数据并运行。

PS。我正在使用django-nonrel和djangoappengine作为后端。

2 个答案:

答案 0 :(得分:2)

编写导入脚本以利用python的multiprocessing Pool

def import_thing(data):
    thing = ThingEntity(**data)
    thing.put()

def main():
    data = [{fano:'212374', comsname:'SMM', },
              {fano:'212374', comsname:'212375', },
              ...etc ]
    pool = multiprocessing.Pool(4) # split data into 4 parts to run in parallel
    pool.map(import_thing, data)

由于AppEngine生产服务器有很多连接,您应该使用池大小来查找最佳数字。这不适用于导入到dev服务器,因为它是单线程的。

同样重要:确保您将它们分批放入10-20个批次,而不是一次放置一个,否则往返将会扼杀您的表现。因此,改进的脚本应该在以下块中工作:

data = [
    [item1,item2,item3],
    [item4, item5, item6],
    [item7, item8, item9],
]
pool.map(import_batch, data)

答案 1 :(得分:1)

您可能想要查看Mapper API