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を使用してデータ入力プロセスをトリガーしました。

問題があることを除いて、それは問題なく動作します:それは非常に遅いです。速度を上げる方法を教えてもらえますか?いくつかの計算を行いました。すべてのデータをGAEで稼働させるには、最大30日かかる場合があります。

ps。バックエンドに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 本番サーバーは多数の接続を好むため、最適な数を見つけるためにプール サイズを調整する必要があります。シングルスレッドであるため、これは開発サーバーへのインポートには機能しません。

また重要なこと: 一度に 1 つずつではなく、10 ~ 20 のバッチでそれらを配置していることを確認してください。そうしないと、往復でパフォーマンスが低下します。したがって、改善されたスクリプトは、次のようなチャンクで機能するはずです。

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

MapperAPIを調べたいと思うかもしれません。

于 2011-06-29T11:06:16.983 に答える