有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

AppEngine中的java思维

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

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

如有以下情况,请回复:

  1. 您已经将一个非常重要的应用程序移植到AppEngine
  2. 您已经在AppEngine中从头创建了一个通用类型的应用程序
  3. 您没有做过1或2,但正在考虑,并希望分享您自己的发现

共 (4) 个答案

  1. # 1 楼答案

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

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

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

  2. # 2 楼答案

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

    通常情况下,将所有信息存储两次是很愚蠢的(而且很容易失去同步),但效果非常好

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

  3. # 3 楼答案

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

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

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

    数据存储的性能非常糟糕。我试着每小时写5000个天气观测数据——并没有太大的工作量——但我做不到,因为我一直在数据存储和HTTP请求中遇到超时异常。使用“低级”数据存储API有所帮助,但还不够

    我想在24小时后删除这些天气观测,以不满足我的配额。同样,无法执行此操作,因为删除操作花费的时间太长。这个问题反过来又导致我的数据存储配额被填满。不可思议的是,您无法轻松删除GAE数据存储中的大量数据

    我确实喜欢一些功能。Eclipse集成非常时髦。appspot应用服务器UI比使用Tomcat要好一百万倍(例如,良好的日志视图)。但对我来说,缺点远远大于好处

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

  4. # 4 楼答案

    I'm wondering if there's a place we could pool knowledge from experience

    各种谷歌集团都很擅长这一点,虽然我还不知道是否有直接适用于Java GAE的GAE——但到目前为止,我的GAE经验都是Python的(我有点自豪地说,Python的发明者Guido van Rossum,现在在谷歌的应用程序引擎上工作,他告诉我,我已经教了他一些关于他的创意是如何工作的东西——他的建议提到,在我的linkedin个人资料中,这是我最自豪的一个;-)。[我在谷歌工作,但我对App Engine的影响非常小——我曾致力于“构建云”、集群和网络管理软件,而App Engine则致力于使基础设施对第三方开发者有用]

    确实有很多文章&;关于如何最好地去规范化和切分数据以获得最佳GAE扩展和性能的演示文稿——尽管质量参差不齐。到目前为止出版的书都是如此;在接下来的几个月里,将会有更多的人加入进来,希望是更好的(我有一个项目要写其中一个,有两个非常熟练的朋友,但我们都太忙了,最后都放弃了)。总的来说,我会推荐谷歌的I/O视频和谷歌在其应用引擎网站和博客中祝福的文章,再加上来自appenginefan's blog的每一点内容——Guido称赞我教他关于GAE的内容,而我反过来主要是从appenginefan那里学到的(部分是通过Palo Alto的精彩app engine meetup,但他的博客也很棒;-)