跟进此问题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作为后端。
答案 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。