google app engine oil(GAEO)でbulkloaderを使う
コンバンハコンバンハ。
ue10000です。
GQLではQueryを投げたときに返ってくる件数の上限が1000件。
一回のQueryで帰ってくる上限1000件と30秒ルールを勘案すると、大量のレコードのカウントを表示したい場合なんかはどうすればいいんだろう???という疑問がわきます。とりあえず今回はCronで回して事前に加工しておくことで対応する方針です。動くかどうかの確認のために大量のレコード(エンティティだっけ?)が必要です。今回の開発ではgoogle app engine oil(GAEO)を使っているので、GAEOにあわせて書きます。
というわけでbulkloader使います。
公式ドキュメント:データのアップロード
では行ってみます。
サンプル用モデルを生成
$ cd project_root $ gaeogen generate model samplemodel
ディレクトリを作って移動
$ cd project_root $ mkdir bulkloader $ cd bulkloader
生成されたモデル application/model/samplemodel.py
from google.appengine.ext import db from gaeo.model import BaseModel, SearchableBaseModel class Samplemodel(BaseModel): str = db.StringProperty() str2 = db.StringProperty() created_at = db.DateTimeProperty(auto_now_add=True) updated_at = db.DateTimeProperty(auto_now=True)
肝心のbulkloader project_root/bulkloader/sampleloader.py
# -*- coding: utf-8 -*- import os import sys PROJECT_HOME="/mnt/windows/My Dropbox/project_root" # project_rootを絶対パスで指定 sys.path.append(PROJECT_HOME) sys.path.append(os.path.join(PROJECT_HOME, 'application')) sys.path.append(os.path.join(PROJECT_HOME, 'libs')) sys.path.append(os.path.join(PROJECT_HOME, 'gaeo')) # bulkloader from google.appengine.tools import bulkloader from model.samplemodel import Samplemodel class SamplemodelLoader(bulkloader.Loader): def __init__(self): bulkloader.Loader.__init__(self, 'Samplemodel', [('str', lambda x: unicode(x, 'utf-8')), ('str2', lambda x: unicode(x, 'utf-8')), ]) loaders = [SamplemodelLoader]