设计可轻松迁移到Google App Engine

问题描述 投票:6回答:1

我将很快开始设计一个Web应用程序,虽然我在SQL世界中有很多经验,但我不知道我需要考虑这样做,目标是在非常近的地方迁移到GAE未来。

或者,我可以从一开始就为GAE设计应用程序,所以在这种情况下,我需要考虑哪些差异? 换句话说,为GAE编写应用程序的DO和DON是什么,来自过去的关系数据库。

python google-app-engine relational-database web2py non-relational-database
1个回答
7
投票

刚刚出头:

  • 它实际上只是一个key->值存储,不要被GQL (它只是SQL SELECT的一个子集)之类的东西所迷惑
  • 没有加入 - 通常你必须非正规化或忘记
  • 或多或少频繁的超时
  • (非常)与本地SQL库相比访问速度慢。
  • COUNT非常昂贵
  • OFFSET(在SELECT中)在客户端实现 - 所以实际上你获取所有记录到偏移量 - 正如Nick Johnson在其中一条评论中指出的那样,它不是客户端,所以现在,因为LIM的1000已经消失了它类似于SQL数据库。
  • (最近删除)限制1000个获取行
  • 随着返回行数的增加,SELECT性能急剧下降
  • 迁移很难做到,因为您必须使用普通的http请求来执行迁移,并且每个请求在30秒后被终止。 您必须求助于批量处理行的任务队列
  • 有伪外键 - 在Python API中称为ReferenceProperties - 但它们没有以任何方式强制执行 - 如果有人/某些东西删除了目标对象,那么你在C ++中就知道了悬空指针
  • 您用于查询的字段必须编制索引,但仍然使用密钥 (每个行/实例的主键类型)使您的查询运行得更快
  • 在实例上构建索引可能需要花费很多时间(而且你不能减少它),如果没有它们,你的应用往往无法工作。 啤酒和耐心强烈推荐..
  • 很多人为限制(比如已经删除的最大限制为1000)。 例如,GQL'IN'运算符只是多个OR-s的语法糖,并且使用了30个值的上限。

这意味着您可能无法避免向用户暴露不一致状态,并且几乎可以肯定您无法避免数据的状态不一致(例如,在手动JOIN数据更改等过程中,半行迁移,一半不迁移)

© www.soinside.com 2019 - 2024. All rights reserved.