2009-08-28 94 views
4

我有一個用php + mysql編寫的應用程序我想要移植到AppEngine,但我找不到將mysql數據移植到數據存儲區的方式。如何將數據放入Google應用引擎的數據存儲中?

我該如何將數據保存到我的數據存儲?這甚至有可能嗎?我只能看到Java對象持久化的文檔,這是否意味着我必須將我的數據庫移植到一堆假對象,每行一個?

編輯:我說虛假的對象,因爲我不想使用它們,他們只是一種方法來克服GAE設計的缺點。

我有一個30兆表我需要檢查每個GET,通過使用對象我需要爲每一行創建一個對象,所以我會有一個java類,也許45 megs與成千上萬的行例如:

Row Row23423 = new Row(123,346,75,34,「a cow」);

我簡直不敢相信這是唯一的方法。

下面是一個想法,通過POST對象逐個填充數據存儲如何?我的意思是,像博客中的帖子。您編寫一個生成並保存數據的類,然後將數據逐個捲曲到URL中。慢,但它可能工作?

+0

你是什麼意思的「假」對象? – 2009-08-28 18:29:47

+0

它們是假的,因爲系統要求我創建它們,它們不是我想要的代碼中的對象。 – Saiyine 2010-02-04 20:56:21

回答

0

數據存儲區here上有文檔。

我看不到有關原始數據移植服務的任何信息,但是如果您可以將數據從MySQL數據庫提取到文本文件中,那麼編寫腳本將其導入到應用引擎的數據中應該相對容易使用它提供的持久性框架進行存儲。

您的腳本會將您的原始數據轉換爲(Java)對象模型並將這些Java對象加入商店。

+0

對不起,我需要java。而文檔沒有幫助我。 – Saiyine 2009-08-28 12:28:44

+0

啊,對不起,沒有閱讀最後一行...所以它真的必須與假物件? :( – Saiyine 2009-08-28 12:29:35

0

將應用程序遷移到Google應用程序引擎我認爲這將是相當艱鉅的任務。如您所見,App Engine沒有關係數據庫,而是使用BigTable。這可能涉及將它導出到Java對象(以某種方式序列化)並插入它們。
你在帖子中說「虛假」的對象,但我必須使用Java對象,我認爲他們不會是假的,除非你計劃使用一組對象進行遷移,併爲應用程序使用一組新對象。

4

如何使用批量加載器上傳數據描述爲here。它不是在Java的直接支持,但是這並沒有阻止你 - 只要做到以下幾點:

創建一個看起來像這樣的app.yaml中:

application: myapp 
version: upload 
runtime: python 
api_version: 1 

handlers: 
- url: /remote_api 
    script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py 
    login: admin 

確保應用程序的名稱與您的Java應用程序相同,版本爲而不是與您用於Java的版本相同。使用appcfg.py上傳這個'空'應用程序。

現在,按照上面鏈接頁面中的批量加載說明進行操作。當需要運行該工具時,請使用--server = upload.latest.myapp.appspot.com指定服務器地址。

由於同一個應用程序的多個版本共享相同的數據存儲 - 即使在運行時間 - 使用Python版本上傳的數據也可以被Java訪問。

0

對於如何將關係型應用程序移植到GAE數據存儲區這個問題沒有(良好的)一般性答案,因爲「數據」的概念在兩者之間不兼容。關係數據庫都是關於模式的。 GAE甚至沒有一個。它是一個具有非常特定API的無模式持久對象數據存儲。如果您正在從頭開發,該環境適用於某些類型的應用程序,但要移植到該應用程序非常棘手。

也就是說,你可以導入CSV文件,正如Nick解釋的那樣,你應該可以很容易地從MySQL中導出。 GAE使用版本機制「同時」支持Java和Python。因此,您可以使用Python設置您的數據存儲,然後在Java中針對您的應用程序運行它。 (散裝裝載器的Java版本正在開發中。)

相關問題