0

我正在研究需要在App Engine和其他Java Application Server上運行的項目。在App Engine中,我們使用數據存儲,而在其他環境中,我們將使用傳統的關係數據庫(主要是MySQL)。App Engine數據存儲和關係數據庫的便攜式JDO/JPA設計

我想知道是否有可能「有一個JDO/JPA模型兼容」。

如果可能的話。怎麼樣?具體來說,我們如何處理密鑰? Datastore要求我們使用它自己的Key對象或使用「Key as encoded string」,我們如何將這些關鍵字移植到關係數據庫中。

如果不是,最佳做法是什麼?我們現在的想法是定義抽象的DAO,並有兩套DAO實現。我相信最好的方式是使用Objectify進行關係數據庫的數據存儲和JPA。但這樣我們就無法利用GWT RequestFactory(我們正在使用的另一種技術)。或者我們可以嗎?

回答

0

我不知道GAE,但我知道JDO應該是數據存儲獨立的,因此您可以使用JDO註釋映射您的類,並確保在您這樣做時,您不使用任何基於RDBMS的擴展(即Datanucleus) ,我不確定是否有這樣的擴展名。

對於鑰匙,很明顯你不應該使用GAE,但是我再也不知道它是否是必須的。

1

顯然,JDO設計用於所有數據存儲,無論是RDBMS,ODBMS,文檔,基於映射,基於Web的,基於文檔的,基於文件的......等等等等。是的,這種便攜性是現實的。如果你不想要可移植性,你可以使用Objectify,但是你說你想要可移植性,所以這不是一個選項(所以不知道爲什麼你認爲它是「最好的方式」)。您可以在所有數據存儲中使用字符串作爲PK。

+0

謝謝,但我如何將「編碼密鑰字符串」與「單獨主鍵」移植到關係數據庫中。就像GAE指南中的例子。 – xeranic 2013-03-21 21:56:28

+0

定義「端口」。如果GAE/Datastore中有一些數據,你打算如何處理它?手動複製?脫離並附加到RDBMS?別的東西?通過說便攜式,你必須定義你的意思 – DataNucleus 2013-03-22 07:16:39

+0

「端口」,我的意思是相同的代碼庫適用於不同的存儲技術。例如,我定義了一個JDO Entity,爲了確保它可以在GAE/Datastore上工作,我必須使用「Key as encoded string」+「單獨的字符串鍵」,因爲Entity是其他的子項。但對於RDBMS,我可以重用實體嗎?或者我必須用純String鍵重新定義實體。 – xeranic 2013-03-22 19:00:08

0

我發現很難在關係數據庫和分層數據庫(這裏是數據存儲)上匹配相同的「持久性」模型,因爲大多數時候它需要以不同的方式思考/構造數據。

例如,您可能需要複製跨許多實體的數據,以便能夠使用數據存儲在其上運行查詢。如果您需要在Google App Engine和傳統服務器(tomcat,JBOSS,WebSphere,無論是...)中使用Google Cloud SQL來保留我的數據模型同...

或者,如果你需要在這兩種情況下的分層數據庫,安裝一個開源的一個與「傳統」的服務器...

是我們首先談論什麼樣的項目? :)