2013-04-28 35 views
0

我正在GAE中構建一個Web應用程序,需要使用數據存儲實體之間的一些簡單關係。此外,我想從一開始就盡我所能使導入和導出更容易,並減少將應用程序遷移到其他平臺的開發時間。GAE:規劃出口能力和關係數據庫

我能看到的處理實體之間的關係數據存儲中的兩種可能的方式:

  • 包括相關實體在實體鍵(或ID)作爲現場 或
  • 創建一個獨特的標識符作爲實體的應用定義字段,以允許其他實體參考它

後者與GAE集成得較少,並且需要某種機制來確保唯一標識符實際上是uniq ue(這又將依賴祖先查詢)。

但是,後者可能會使數據可移植性更容易。例如,如果實體是在本地機器上創建的,則它們可以上傳(假設唯一標識符是唯一的),沒有問題。相比之下,依賴於GAE定義的ID將不起作用,因爲從開發到部署環境ID不一致。

也可能出於數據導出的考慮,這意味着應用程序定義的唯一標識符更可取。

這樣做的最好方法是什麼?

+0

我認爲你只需要編寫一個自定義工具將其從使用GAE方式的GAE數據存儲中導出即可。 – Linuxios 2013-04-28 20:06:10

+0

爲什麼不通過將所有低級實體訪問抽象爲數據訪問層來將底層實體實現與業務邏輯分離?這樣,當你進行遷移時,你只需要改變你的數據訪問層,關係設計將遵循適合你選擇的平臺的關係設計,而不是試圖讓你現有的平臺在不同的平臺範例中具有通用性。 – 2013-04-28 21:21:40

回答

1

GAE的數據存儲不能很好地導出到SQL。通常情況下,GAE需要對數據進行非常不同的建模,以支持某些查詢,即多對多關係。反規範化也是支持GAE數據存儲的一些查詢的正確方法。祖先關係是SQL世界中不存在的東西。

爲了導入導出數據,您需要編寫特定於您的數據模型的腳本。

如果您打算與SQL兼容,請使用CloudSQL而不是數據存儲。

在開發/生產之間移動數據方面,您已經確定了實現方法。沒有真正的「簡單」方法。

+0

謝謝。很高興知道我沒有明顯的缺失。 – user1379351 2013-04-29 06:40:00