我看到在开发服务器和生产服务器上使用 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
我只有一个索引,关于游戏年份和日期。插入一个包含 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 的数据存储中迁移出来,上面对更大数据集的查询只需要几分之一秒。我的数据只是建模不佳吗?数据存储就这么慢吗?
编辑 1
为了提供更多背景信息,我从用户上传的文件中插入数据。该文件被上传到 blobstore,然后我使用 csv.reader 来解析它。这会定期发生,并且查询是基于 cron 作业运行的。