2011-10-11 64 views
1

現在谷歌已經宣佈了應用引擎的可用性Cloud SQL storage,將現有數據從BigTable/GAE Datastore遷移到MySQL的最佳方式是什麼?將數據從BigTable/GAE Datastore遷移到RDBMS的最佳方式是什麼?

爲了應對由彼得帶來了出色的問題:

  • 在我的特殊情況下,我一直在我的數據模型非常關係。
  • 我很抱歉讓我的網站停機幾個小時來完成轉換,或者至少警告人們,他們爲接下來的幾個小時所做的任何更改都將因數據庫維護而丟失等。
  • 我的數據設置不是很大 - 我的應用程序的主儀表板顯示爲.67gb,數據存儲統計頁面顯示它更像200mb。
  • 我正在使用python。
  • 我沒有使用blobstore(雖然我認爲這是一個單純的數據存儲遷移的問題 - 可以在維護blobstore的同時將數據存儲區的使用遷移到MySql)。
  • 我會支付一個合理的金額(比如說少於100美元)。
  • 我相信我的應用程序是主/從 - 它是在App Engine預覽期間創建的。我似乎無法找到一個簡單的方法來驗證,雖然。

好像批量上傳應該能夠被用於將數據下載到那時,可以裝載mysqlimport的文本格式,但我沒有與任何一種技術的經驗。此外,雲SQL似乎只支持導入mysqldumps,所以我將不得不在本地安裝MqSQL,mysqlimport數據,然後轉儲它,然後導入轉儲?

我目前的型號代碼的一個例子,在情況下,它要求:

class OilPatternCategory(db.Model): 
    version = db.IntegerProperty(default=1) 
    user = db.UserProperty() 
    name = db.StringProperty(required=True) 
    default = db.BooleanProperty(default=False) 

class OilPattern(db.Model): 
    version = db.IntegerProperty(default=2) 
    user = db.UserProperty() 
    name = db.StringProperty(required=True) 
    length = db.IntegerProperty() 
    description = db.TextProperty() 
    sport = db.BooleanProperty(default=False) 
    default = db.BooleanProperty(default=False) 
    retired = db.BooleanProperty(default=False) 
    category = db.CategoryProperty() 

class League(db.Model): 
    version = db.IntegerProperty(default=1) 
    user = db.UserProperty(required=True) 
    name = db.StringProperty(required=True) 
    center = db.ReferenceProperty(Center) 
    pattern = db.ReferenceProperty(OilPattern) 
    public = db.BooleanProperty(default=True) 
    notes = db.TextProperty() 

class Tournament(db.Model): 
    version = db.IntegerProperty(default=1) 
    user = db.UserProperty(required=True) 
    name = db.StringProperty(required=True) 
    center = db.ReferenceProperty(Center) 
    pattern = db.ReferenceProperty(OilPattern) 
    public = db.BooleanProperty(default=True) 
    notes = db.TextProperty() 

class Series(db.Model): 
    version = db.IntegerProperty(default=3) 
    created = db.DateTimeProperty(auto_now_add=True) 
    user = db.UserProperty(required=True) 
    date = db.DateProperty() 
    name = db.StringProperty() 
    center = db.ReferenceProperty(Center) 
    pattern = db.ReferenceProperty(OilPattern) 
    league = db.ReferenceProperty(League) 
    tournament = db.ReferenceProperty(Tournament) 
    public = db.BooleanProperty(default=True) 
    notes = db.TextProperty() 
    allow_comments = db.BooleanProperty(default=True) 
    complete = db.BooleanProperty(default=False) 
    score = db.IntegerProperty(default=0) 

class Game(db.Model): 
    version = db.IntegerProperty(default=5) 
    user = db.UserProperty(required=True) 
    series = db.ReferenceProperty(Series) 
    score = db.IntegerProperty() 
    game_number = db.IntegerProperty() 
    pair = db.StringProperty() 
    notes = db.TextProperty() 
    entry_mode = db.StringProperty(choices=entry_modes, default=default_entry_mode) 
+1

這是一個相當寬敞的問題,可能有點不成熟。例如,所有這些因素都可能影響答案 - 您有多少數據?你需要在遷移時保持你的應用程序生存嗎?您是否需要轉換數據以使其適合關係模型而不是實體模型?你使用Python或Java?你在使用blobstore嗎?你是否願意付錢來快速完成它,或者你是否想要限制它,以免它發生在你的免費配額中?你是否已經轉向HRD? –

+0

你甚至可以訪問有限的預覽嗎? (如果沒有的話,你可能要等到人們真正使用這個服務,因爲那樣你會得到更好的信息。) –

+0

@Peter這是一個有用的清單 – systempuntoout

回答

1

你有沒有考慮使用Map Reduce框架? 您可以編寫將數據存儲實體存儲在CloudSQL中的映射器。 不要忘記爲數據存儲密鑰添加一列,這可能會幫助您避免重複行或識別缺少的行。

您可能會看看https://github.com/hudora/gaetk_replication 以獲得關於mapper函數的靈感。

相關問題