2010-11-20 73 views

回答

7

我對JPA不太瞭解,但是我和JDO一起去了,如果你是新手,我可以說它有一個非常陡峭的學習曲線和許多不適用於外部的東西GAE。你贏得的是owned relationships,,它允許你有實際相互引用的類而不是僅僅數據存儲ID。 JDO還有一些有用的東西通過註釋來實現,比如@Element(dependent =「true」)註釋,它可以節省很多工作,因爲它允許你刪除一個父對象,而JDO將刪除它的所有子對象。一般來說,GAE文檔錯過了很多你需要知道的有效使用JDO的東西,所以我認爲它對讀取數據文檔至關重要,並且特別注意提取組。

您還可以找到一個大集合的JDO和JPA簡潔的例子,解決幾乎每一個可以想象的情景here.

最後,我想看看物化和嫩枝,兩個明顯流行的選擇框架,這是在提到過的question I asked當我也試圖做出這個決定。

另一方面,就其他數據庫的可移植性而言,我認爲GAE上可移植性的擔憂有點誤導。儘管Google希望我們認爲GAE代碼是可移植的,但我認爲它是一個夢想。您最終將編碼以Google提供的特定API組合爲目標,這種組合可能不會在其他任何地方看到,並且還會編碼GAE的許多限制和特性,所以我將忘記可移植性作爲解決問題的一個因素一個數據訪問API。事實上,如果我可以在這個問題上重新做出決定,我想我會使用專門爲GAE構建的數據訪問框架,如對象化。

4

我想這是一個品味問題。 ORM解決方案(JDO/JPA)通常更舒適。另一方面,低級API允許完全靈活性,您不受ORM限制的約束。當然,您需要編寫更多代碼,並且您可能需要編寫自己的數據存儲區抽象層。但是如果你以後需要優化某些東西,這可能會變得方便。

但是當然你可以開始使用JDO/JPA,如果你認識到你需要更多的靈活性,你仍然可以重構代碼的某些部分來使用低級函數。正如臨時提到的,內部引用被保存爲ID(當然鍵相同)。

一般來說(在SQL世界中)很多人說,通過使用低級別的東西,您可以更多地瞭解數據庫,從而獲得更好的優化感覺。有很多人使用ORM,但是很不情願地使用它,因爲他們認爲ORM爲他們做了所有的工作。因此他們遇到了性能或維護問題。

最後,我認爲如果您不確定,任何解決方案都是合適的選擇。但是,無論您選擇JDO/JPA還是低級別,您都應該查看可用的文檔並閱讀(博客)文章以瞭解最佳做法。

菲利普

6

低級數據存儲區API不旨在直接使用,而是提供對其他框架來與數據存儲交互的API。

此包爲數據存儲區包含一個主要用於框架作者的低級API。應用程序作者應考慮使用提供的JDO或JPA接口來訪問數據存儲。

source

一個這樣的框架是Objectify,爲數據存儲比JDO或JPA,和一個它的設計只考慮到數據存儲更簡單的接口。

+0

對於appengine-jruby來說,他們推薦使用datamapper,但不能使用Ruby的序列化功能(=> memcache),因爲它對於dm-appengine適配器而言已經損壞。 Google的App Engine文檔並非真正獲獎... – Philip 2010-11-20 21:45:52

相關問題