1

在这里跟进这个问题。

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

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 上启动并运行我的所有数据。

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

4

2 回答 2

2

编写导入脚本以利用 python 的多处理池

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 生产服务器喜欢拥有大量连接,因此您应该调整池大小以找到最佳数量。这不适用于导入到开发服务器,因为它是单线程的。

同样重要的是:确保您将它们分批放置,例如 10-20 个,而不是一次放置一个,否则往返会影响您的表现。因此,改进后的脚本应该分块工作,例如:

data = [
    [item1,item2,item3],
    [item4, item5, item6],
    [item7, item8, item9],
]
pool.map(import_batch, data)
于 2011-06-29T11:06:42.763 回答
1

您可能想查看Mapper API

于 2011-06-29T11:06:16.983 回答