6

我正在寻找资源来帮助将我的设计技能从传统的 RDBMS 数据存储迁移到 AppEngine DataStore(即:“软模式”风格)。我看过几个演示文稿,都涉及到总体主题和一些特定技术。

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

如果出现以下情况请回复:

  1. 您已将一个重要的应用程序移植到 AppEngine
  2. 您已经在 AppEngine 中从头开始创建了一种通用类型的应用程序
  3. 您没有完成 1 或 2,但正在考虑并希望分享您迄今为止的发现。
4

4 回答 4

5

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

各种 Google 组对此都有好处,尽管我不知道是否有任何直接适用于 Java-GAE —— 到目前为止,我的 GAE 经验都是 Python(我很自豪地说,发明家 Guido van Rossum来自 Python 并且现在在 Google 的 App Engine 工作,告诉我我已经教了他一些关于他的创意是如何工作的东西——他的推荐提到这是我现在最自豪的一个,在我的 LinkedIn 个人资料中的所有这些中;- )。[我在 Google 工作,但我对 App Engine 的影响非常小——我致力于“构建云”、集群和网络管理软件,而 App Engine 的目的是使该基础架构对第三方开发人员有用]。

确实有许多关于如何最好地对数据进行非规范化和分片以实现最佳 GAE 扩展和性能的文章和演示文稿——尽管它们的质量参差不齐。到目前为止出版的书都是马马虎虎;在接下来的几个月里还会有更多,希望是更好的(我有一个项目要写其中一个,有两个非常熟练的朋友,但我们都很忙,最终放弃了它)。总的来说,我会推荐谷歌 I/O 视频和谷歌在其应用引擎网站和博客中祝福的文章,加上appenginefan 博客中的每一点内容——Guido赞扬我教他 GAE,我反过来主要是从 appenginefan 那里学到的(部分是通过在 Palo Alto 举办的精彩的应用引擎聚会,但他的博客也很棒;-)。

于 2009-06-11T05:09:17.280 回答
1

非关系数据库设计本质上尽可能地涉及非规范化。

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

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

于 2009-06-11T05:00:52.683 回答
1

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

通常将所有信息存储两次是很愚蠢的(并且容易不同步),但它工作得非常好。

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

于 2009-06-11T00:21:54.660 回答
1

我玩过 Google App Engine for Java,发现它有很多缺点:

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

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

数据存储性能非常糟糕。我试图每小时写 5000 个天气观测——没什么太大的——但我做不到,因为我不断地遇到数据存储和 HTTP 请求的超时异常。使用“低级”数据存储 API 有所帮助,但还不够。

我想在 24 小时后删除那些天气观测,以免填满我的配额。同样,由于删除操作花费了太长时间,所以无法执行此操作。这个问题又导致我的数据存储配额被填满。疯狂的是,您无法轻松删除 GAE 数据存储中的大量数据。

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

总而言之,我经常发现自己不得不为yak 刮胡子,以便做一些在任何普通 Java / 应用程序托管环境中都非常微不足道的事情。

于 2009-06-10T18:54:28.690 回答