在谷歌应用引擎中使用低级api进行数据存储?这不好吗?

时间:2010-04-06 09:50:22

标签: java google-app-engine google-cloud-datastore

关于如何在数据存储中使用低级api的文档很少,而且在JPA和JDO上有很多文档以及它如何转换为它。

我的问题是:对JPA或JDO规范进行编码是否有任何优势,而不是直接访问数据存储区的低级api?

从最初看起来,它似乎简单直接,但我不确定是否有充分的理由不去做。

由于 CX

3 个答案:

答案 0 :(得分:5)

您不应该直接使用低级API。框架开发人员可以在其上创建高级库。文档针对的是那些人(基本上只有JavaDoc)。

Google正式支持JDO和JPO框架(这些是Java标准,但不一定非常适合非关系数据存储(*)),但有一些替代方案“更接近金属”,承诺更容易理解,更轻盈,更快。

请参阅objectifytwigSimpleDS以及this question

Featurewise,替代库提供了一些东西。例如,对底层数据存储实体的访问为您提供了二进制表示,您可以在没有可序列化的类的情况下进行memcache。您可以通过索引进行细粒度访问(可以执行部分​​索引),并且Twig还​​为您提供异步查询,这可能很有用。

(*)对JDO / JPA也有一点反对,因为它有助于几秒的启动时间,这在App Engine上非常重要,因为Google在几分钟不活动后关闭了你的JVM,下一个用户等待十秒或更长时间。但是,我认为这是一个根本上有缺陷的论点,因为当你使用Java时,你想要使用像JDO或Spring这样的框架。谷歌甚至做广告。如果这些框架(尤其是Google自己认可的框架)无法在App Engine上合理使用,那么Google需要解决这个问题,而不是框架作者。

答案 1 :(得分:4)

有些测试似乎显示了低级api的性能优势(请参阅http://gaejava.appspot.com作为一个示例,但请尝试自己的。)阅读GAE / J论坛(http://groups.google.co.za/group/google-appengine-java)以获取有关它的意见

由于您的问题是关于JDO等的优点,我会说是 - 有一些。他们比自己摆弄对象关系更容易。标记一个类可以很容易地与它们一起使用。

就个人而言,我更喜欢低级别,主要是因为我对JDO的实现感到非常惊讶。更多的工作,但更少的惊喜,以及我和BigTable之间的东西更少。

答案 2 :(得分:2)

直接使用低级API没有任何问题。如果你想要一些更高级别的东西,你应该尝试Thilo提到的一些替代方案。使用更高级API的优势并不总是适用于每个开发人员。例如,使用JDO / JPA对于已经知道其中一个或已经使用它们的代码的人来说是有意义的。但对于新开发人员来说,学习JDO / JPA可能比仅使用本机API更难。