幾乎沒有關於如何在數據存儲區使用低級api的文檔,在JPA和JDO上也有很多文檔,以及它如何轉化爲它。谷歌應用程序引擎中的數據存儲使用低級別的API?這不好嗎?
我的問題是:在針對JPA或JDO規範進行編碼時有沒有優勢,而不是直接訪問數據存儲的低級別API?
從最初的樣子來看,它看起來簡單直接,但我不確定是否有充足的理由不這樣做。
感謝 CX
幾乎沒有關於如何在數據存儲區使用低級api的文檔,在JPA和JDO上也有很多文檔,以及它如何轉化爲它。谷歌應用程序引擎中的數據存儲使用低級別的API?這不好嗎?
我的問題是:在針對JPA或JDO規範進行編碼時有沒有優勢,而不是直接訪問數據存儲的低級別API?
從最初的樣子來看,它看起來簡單直接,但我不確定是否有充足的理由不這樣做。
感謝 CX
直接使用低級API沒有任何問題。如果你想要更高一點的水平,你應該嘗試一些Thilo提到的替代方案。使用更高級別的API的優點並不總是適用於每個開發人員。例如,使用JDO/JPA對於已經瞭解其中一個或已經擁有使用它們的代碼的人有意義。但是對於新開發者來說,學習JDO/JPA可能比僅僅使用本地API更困難。
你不應該直接使用低級API。它的存在讓框架開發人員可以在其上創建高級庫。文檔針對的是那些人(基本上只有JavaDoc)。谷歌正式支持JDO和JPO框架(它們是Java標準,但不一定非常適合非關係數據存儲(*)),但是有一些「更接近金屬」的替代方案,這個承諾更容易理解,更輕量和更快。
參見objectify,twig,SimpleDS,還有this question。
由此可見,備選庫提供了一些功能。例如,對底層數據存儲實體的訪問爲您提供二進制表示,您可以在沒有可序列化類的情況下執行memcache。您對索引有很好的訪問權限(您可以執行部分索引),並且Twig還爲您提供異步查詢,這可能很有用。 (*)JDO/JPA也有一些反彈,因爲它會影響幾秒的啓動時間,這對於App Engine很重要,因爲Google在幾分鐘不活動後就會關閉JVM,並且下一個用戶等待十秒或更長時間。但是,我認爲這是一個根本有缺陷的觀點,因爲當你使用Java時,你想要使用像JDO或Spring這樣的框架。 Google甚至會這樣做。如果這些框架(特別是Google自己認可的框架)無法在App Engine上合理使用,那麼Google需要解決這個問題,而不是框架作者。
一些測試似乎顯示低級別api的性能優勢(請參閱http://gaejava.appspot.com作爲一個示例,但請自行嘗試。)請閱讀GAE/J論壇(http://groups.google.co.za/group/google-appengine-java)以獲取有關它的意見。
由於您的問題是關於JDO等的的優勢,我會說是 - 有一些。他們更容易管理對象關係,而不是自己處理對象關係。標記一個班級用於他們很容易。
就我個人而言,我更喜歡低級別的,主要是因爲我已經被JDO實現太多次驚訝了。多一點工作,但少一些意外,我和BigTable之間的東西少一些。
你寫道:你不應該直接使用低級API。 然後在JDO和JPO上做了很好的說明。 關鍵是我無法找到任何地方的聲明,如'不要使用低級別的API'在任何谷歌文檔。 – Chez 2010-04-06 12:55:46
好的,低級API仍然是已發佈和支持的API。如果你喜歡它,你可以直接使用它。但在你做之前,你應該嘗試其他接口(物化,樹枝,SimpleDS)。 – Thilo 2010-04-06 14:02:04
我認爲我提到的所有三個庫仍然都是實體<-> bean映射。如果您想要進行無模式化,實際上原始的低級別API可能會更好。 – Thilo 2010-04-06 15:35:35