有关如何最佳访问Google App Engine数据存储区的任何建议?通过JDO,JPA或本机API?
JDO / JPA的明显优势是可移植到其他数据库引擎,但除此之外,还有什么理由不直接使用数据存储区API?
答案 0 :(得分:7)
我对JPA知之甚少,但我选择了JDO,如果你是新手,我可以说它有一个相当陡峭的学习曲线和许多不适用于GAE的无关的东西。你赢得的是owned relationships,,它允许你拥有彼此实际引用的类,而不仅仅是数据存储区ID。 JDO还通过注释做了一些有用的事情,例如@Element(dependent =“true”)注释,它可以为您节省大量工作,因为它允许您删除父对象,JDO将删除其所有子对象。一般来说,GAE文档错过了很多有效使用JDO所需要知道的事情,所以我想说阅读datanucleus文档至关重要,并特别注意获取组。
您还可以找到大量简洁的JDO和JPA示例,它们几乎可以解决所有可能出现的情况here.
最后,我会看看Objectify和Twig,两个显然很受欢迎的替代框架,当我也在尝试做出这个决定时,question I asked提到了这个框架。
另外,关于其他数据库的可移植性,我认为担心GAE的可移植性有点误导。尽管谷歌希望我们认为GAE代码是可移植的,但我认为这是一个梦想。您将最终编码以针对Google提供的特定API组合,您可能在其他任何地方都看不到它们,以及围绕GAE的许多限制和特性进行编码,因此我会忘记将可移植性作为解决问题的因素数据访问API。事实上,如果我可以重新决定这个问题,我想我会使用专门为GAE构建的数据访问框架,例如objectify。
答案 1 :(得分:6)
低级数据存储API不是为直接使用而设计的,而是为其他框架提供API以与数据存储进行交互。
此程序包包含数据存储区的低级API,主要用于框架作者。应用程序作者应考虑使用提供的JDO或JPA接口来访问数据存储区。
(source)
一个这样的框架是Objectify,一个比JDO或JPA更简单的数据存储区接口,以及一个仅考虑数据存储区的框架。
答案 2 :(得分:4)
我想这是一个品味问题。 ORM解决方案(JDO / JPA)通常更舒适。另一方面,低级API允许完全灵活性,您不受ORM的任何限制。当然,您需要编写更多代码,并且可能需要编写自己的数据存储区抽象层。但如果您稍后需要优化某些事情,这可能会变得很方便。
但是当然你可以开始使用JDO / JPA,如果你认识到需要更多的灵活性,你仍然可以重构代码的某些部分来使用低级函数。如临时提到的那样,内部引用被保存为ID(当然,键也相同)。
一般来说(在SQL世界中)很多人都说通过使用低级别的东西,您可以更多地了解数据库,从而获得更好的优化感觉。有很多人使用ORM但使用它非常无用,因为他们认为ORM为他们完成所有工作。因此,它们会遇到性能或维护问题。
最后,如果您不确定,我认为任何一种解决方案都是正确的选择。但是你应该查看可用的文档和阅读(博客)文章,了解最佳实践,无论你选择JDO / JPA还是低级。
菲利普