我正处于开发体育统计网站(终极飞盘)的早期阶段,如果 Google App Engine 适合我,我想知道您的意见。
我正在使用 Django 用 Python 编写它,并且多年来一直对标准 RDBMS 感到满意,但这个站点是一个长期项目,我期待大量数据,所以我想要 GAE 数据存储提供的“无限”扩展。对数据库的绝大多数查询将返回非常标准的结果,这将使数据存储看起来像是一个合乎逻辑的选择。但是,我希望将来能够进行极其复杂的查询,以提出新的统计指标或简单地提出有趣的结果。我计划在未来做很多这样的事情,但在收集到数据之前我不会知道这些查询是什么。
例如,你经常会看到棒球统计分析员提出荒谬的统计数据,例如“这只是过去 50 年来,两名姓氏以“Z”开头的左撇子投手背靠背投出一击即停的情况。天”。我希望将来可以灵活地进行任何查询。:)
但是,我的印象是,像 bigtable 这样的非关系数据库需要您事先提出包含冗余数据的模型,并且所有工作都发生在插入而不是提取上。我已经构建了 django 模型,其中几乎包含了我需要查询的所有数据,但我不知道从现在起一两年后我想要什么样的非规范化模型。因此,我觉得将来在 GAE 数据存储上进行复杂查询将非常困难,并且需要我从服务器上提取大量信息,然后再用 python 处理它。
谷歌应用引擎数据存储对于我想做的事情来说是完全错误的吗?或者我只是错过了一些东西。提前非常感谢!
更新: 感谢到目前为止的回复。我意识到我还应该提到很多这些复杂的查询是我希望用户能够执行的查询,因此离线数据库并不是一个真正的选择。例如,用户应该能够看到任何两个特定球员在特定比赛或赛季中同时在场上时的表现的各种统计数据。虽然这些查询不像标准聚合统计那样频繁,但它们仍然会定期发生。
拥有一个关系数据库和 GAE 数据存储会很棒,但是 django 默认不支持多个数据库,并且将解决方案修补在一起听起来既困难又混乱。Eric Florenzano 为两个都使用 django 模型的数据库提供了一个很好的解决方案,但是如果我要使用 GAE 数据存储,我将不得不使用应用程序引擎的 db 模型。在这一点上,像他为这个复杂的问题提出一个很好的解决方案有点超出我的技能水平。
现在,我最喜欢的两个选项是使用 GAE 任务队列来执行困难的查询,或者使用更标准的网络主机(如 webfaction),然后在我的数据增长并且我需要提高性能时对我的表进行非规范化。