開発サーバーと運用サーバーの両方で GAE データストアを使用すると、ひどいパフォーマンスが見られます。次の単純化されたモデルがあります。
class Team(db.Model):
name = db.StringProperty()
# + 1 other property
# home_games from Game
# away_games from Game
class Game(db.Model):
date = db.DateProperty()
year = db.IntegerProperty()
home_team = db.ReferenceProperty(Team, collection_name='home_games')
away_team = db.ReferenceProperty(Team, collection_name='away_games')
# + 4 other properties
# results from TeamResults
class TeamResults(db.Model):
game = db.ReferenceProperty(Game, collection_name='results')
location = db.StringProperty(choices=('home', 'away'))
score = db.IntegerProperty()
# + 17 other properties
ゲームの年と日付のインデックスは 1 つしかありません。478 チームと 786 試合の小さなデータセットを挿入するのに約 50 秒かかりました。簡単なクエリ:
games = Game.all()
games.filter('year = ', 2000)
games.order('date')
for game in games:
for result in game.results:
# do something with the result
約45秒かかりました。
私は SQLite ベースのデータ ストレージから移行しようとしていますが、はるかに大きなデータセットに対する上記のクエリはほんの数秒しかかかりません。データのモデル化が不十分なだけですか? Datastore はこれだけ遅いのですか?
編集 1
もう少し背景を説明するために、ユーザーがアップロードしたファイルからデータを挿入しています。ファイルはブロブストアにアップロードされ、csv.reader を使用して解析します。これは定期的に発生し、cron ジョブに基づいてクエリが実行されます。