在AppEngine中思考

时间:2009-06-10 16:13:57

标签: java python google-app-engine data-modeling

我正在寻找资源来帮助将我的设计技能从传统的RDBMS数据存储迁移到AppEngine DataStore(即:'Soft Schema'样式)。我已经看过几个演讲,全部涉及总体主题和一些特定技巧。

我想知道是否有一个地方我们可以将经验中的知识(“来自战壕”)汇集到现实世界的方法上,重新思考数据的结构,特别是移植现有的应用程序。我们基于Hibernate,并且可能已经使用我们的数据模型走错了路径,产生了一些我们的数据库正在努力解决的粗略查询。

请在以下情况下回复:

  1. 您已将非平凡的应用程序移植到AppEngine
  2. 您已在AppEngine
  3. 中从头开始创建了一种常见类型的应用程序
  4. 你既没有做过1或2,但是正在考虑它,并希望到目前为止分享你自己的发现。

4 个答案:

答案 0 :(得分:5)

  

我想知道是否有一个地方我们可以从经验中汇集知识

各种Google网上论坛都有用,虽然我不知道是否有任何直接适用于Java-GAE - 到目前为止我的GAE经验都是Python(我很自豪地说Guido van Rossum是Python的发明者,现在在Google App上工作,他告诉我,我已经教过他一些关于他的想法如何工作的事情 - 他的建议提到现在是我最骄傲的,在我的所有人中轮廓;-)。 [我在谷歌工作,但我对App Engine的影响非常周边 - 我致力于“构建云”,集群和网络管理SW,而App Engine则是为第三方开发人员提供有用的基础设施]。

确实有很多论文和文章。关于如何最佳地对数据进行非规范化和分片以获得最佳GAE缩放和性能的演示 - 但它们的质量各不相同。到目前为止出版的书籍都是如此;在接下来的几个月里会有更多的,希望更好的(我有一个项目写一个,有两个非常熟练的朋友,但我们都很忙,我们最终放弃它)。一般情况下,我会推荐谷歌I / O视频和Google在其应用引擎网站和博客中祝福的文章,加上来自appenginefan's blog的所有内容 - 圭多赞扬我教他关于GAE的内容,我反过来主要从appenginefan学习(部分通过帕洛阿尔托的精彩app engine meetup,但他的博客也很棒; - )。

答案 1 :(得分:1)

我使用Google App Engine for Java,发现它有许多缺点:

这不是通用的Java应用程序托管。特别是,您无权访问完整的JRE(例如,无法创建线程等)。鉴于这一事实,您几乎必须从头开始构建应用程序,并考虑到Google App Engine JRE。移植任何非繁琐的应用程序是不可能的。

与您的数据存储问题更相关......

数据存储区的性能非常糟糕。我试图每小时写出5000次天气观测 - 没什么太大的 - 但我无法做到这一点,因为我继续使用数据存储区和HTTP请求运行超时异常。使用“低级”数据存储区API有所帮助,但还不够。

我想在24小时后删除那些天气观察,以免填满我的配额。再说一次,因为删除操作花了太长时间,所以无法做到这一点。这个问题又导致我的数据存储区配额填满。疯狂地,您无法轻松删除GAE数据存储区中的大量数据。

我确实喜欢一些功能。 Eclipse集成很时髦。 appspot应用程序服务器UI比使用Tomcat好一百万倍(例如,很好的日志视图)。但是这些缺点远远超过了我的这些好处。

总之,我经常发现自己必须shave the yak,以便在任何普通的Java /应用程序托管环境中做一些非常简单的事情。

答案 2 :(得分:1)

超时很紧,性能还可以但不是很好,所以我发现自己使用额外的空间来节省时间;例如,我在交易卡和玩家之间有多对多的关系,所以我复制了谁拥有什么的信息:卡片对象有一个玩家列表和玩家对象有一个卡列表。

正常情况下,将所有信息存储两次会很愚蠢(而且很容易失去同步),但效果确实很好。

在Python中,他们最近发布了一个远程API,因此您可以获得数据存储的交互式shell,这样您就可以在没有任何超时或限制的情况下使用您的数据存储(例如,您可以删除大量数据,或重构您的模型) ;这是非常有用的,因为朱利安提到它是非常难以进行任何批量操作。

答案 3 :(得分:1)

非关系数据库设计主要涉及非规范化。

示例:由于BigTable不提供足够的聚合功能,因此RDBMS世界中的sum(cash)选项不可用。相反,它必须存储在模型上,并且必须重写模型保存方法以计算非规范化字段总和。

我想到的基本基本设计是每个模板都有自己的模型,其中要填充的所有必填字段在相应的模型中都是非规范化的;并且你在模型中有一个完整的信号更新机器人复杂性。