【发布时间】:2010-04-06 09:50:21
【问题描述】:
关于如何将低级 API 用于数据存储的文档很少,而关于 JPA 和 JDO 以及它如何转换为它的文档却很多。
我的问题是:根据 JPA 或 JDO 规范进行编码而不是直接访问数据存储的低级 api 有什么优势吗?
乍一看,这似乎简单直接,但我不确定是否有充分的理由不这样做。
谢谢 Cx
【问题讨论】:
标签: java google-app-engine google-cloud-datastore
关于如何将低级 API 用于数据存储的文档很少,而关于 JPA 和 JDO 以及它如何转换为它的文档却很多。
我的问题是:根据 JPA 或 JDO 规范进行编码而不是直接访问数据存储的低级 api 有什么优势吗?
乍一看,这似乎简单直接,但我不确定是否有充分的理由不这样做。
谢谢 Cx
【问题讨论】:
标签: java google-app-engine google-cloud-datastore
您不应该直接使用低级 API。它供框架开发人员在其之上创建高级库。文档是针对那些人的(基本上只有 JavaDoc)。
Google 正式支持 JDO 和 JPO 框架(它们是 Java 标准,但不一定非常适合非关系数据存储 (*) ),但有几个“更接近金属”的替代方案,即承诺更容易理解、更轻量级和更快。
请参阅objectify、twig、SimpleDS 以及 this question。
在功能方面,替代库提供了一些东西。例如,对底层数据存储实体的访问为您提供了二进制表示,您可以在没有类可序列化的情况下进行内存缓存。您可以对索引进行细粒度访问(您可以执行部分索引),并且 Twig 还为您提供异步查询,这可能很有用。
(*) JDO/JPA 也有一些反对意见,因为它会导致几秒钟的启动时间,这对 App Engine 很重要,因为 Google 会在几分钟不活动后关闭您的 JVM,并且下一个用户可以等待十秒钟或更长时间。但是,我认为这是一个根本有缺陷的论点,因为当您使用 Java 时,您希望使用 JDO 或 Spring 等框架。谷歌甚至做这样的广告。如果这些框架(尤其是谷歌自己认可的框架)不能在 App Engine 上合理使用,那么谷歌需要解决这个问题,而不是框架作者。
【讨论】:
一些测试似乎显示了低级 api 的性能优势(请参阅 http://gaejava.appspot.com 作为一个示例,但请尝试您自己的。)阅读 GAE/J 论坛 (http://groups.google.co.za/group/google-appengine-java) 以获取有关意见。
由于您的问题是关于 JDO 等的优势,我会说是的 - 有一些。他们管理对象关系比自己摆弄它们更容易。标记一个类以供它们使用很容易。
就个人而言,我更喜欢低级,主要是因为我对 JDO 实现感到惊讶太多次了。工作多一点,惊喜少一点,我和 BigTable 之间的事情也少一些。
【讨论】:
直接使用低级 API 没有任何问题。如果你想要更高级别的东西,你应该尝试一下 Thilo 提到的一些替代方案。使用更高级别 API 的优势并不总是适用于每个开发人员。例如,使用 JDO/JPA 对于已经了解其中之一或已经有代码使用它们的人来说是有意义的。但是对于新开发人员来说,学习 JDO/JPA 可能比只使用原生 API 更难。
【讨论】: