【问题标题】:Using low level api for datastore in google app engine ? is it bad?在谷歌应用引擎中使用低级 API 进行数据存储?不好吗?
【发布时间】:2010-04-06 09:50:21
【问题描述】:

关于如何将低级 API 用于数据存储的文档很少,而关于 JPA 和 JDO 以及它如何转换为它的文档却很多。

我的问题是:根据 JPA 或 JDO 规范进行编码而不是直接访问数据存储的低级 api 有什么优势吗?

乍一看,这似乎简单直接,但我不确定是否有充分的理由不这样做。

谢谢 Cx

【问题讨论】:

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


    【解决方案1】:

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

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

    请参阅objectifytwigSimpleDS 以及 this question

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

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

    【讨论】:

    • 您写道:您不应该直接使用低级 API。然后对 JDO 和 JPO 进行了很好的解释。关键是我在任何谷歌文档中都找不到“不要使用低级 API”这样的声明。
    • 好的,低级 API 仍然是已发布且受支持的 API。如果您喜欢,可以直接使用它。但在您这样做之前,您应该尝试其他接口(objectify、twig、SimpleDS)。
    • 我认为我提到的所有三个库仍然做实体bean 映射。如果您想使用无模式,那么原始的低级 API 实际上可能会更好。
    【解决方案2】:

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

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

    就个人而言,我更喜欢低级,主要是因为我对 JDO 实现感到惊讶太多次了。工作多一点,惊喜少一点,我和 BigTable 之间的事情也少一些。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-21
        • 2013-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多