3

首先,我來自RDBMS/SQL/C++/Java/Python背景,我是Gaelyk的新手
,Google API和Google數據存儲。關係數據模型到Google數據存儲映射

我喜歡模型(使用流程圖代碼和數據庫的數據庫建模工具)
我代碼之前。
我過去大量使用Erwin來做數據庫建模。

在Erwin中,我設計了一個數據庫的邏輯/物理數據模型,我想使用Google數據存儲和Gaelyk與Google AppEngine SDK實現

我想在編碼任何東西之前設計數據佈局。
我選擇的設計工具是Erwin Data Modeler。

當我看着谷歌的數據存儲,我看到有
沒有關係約束,並加入通過
WHERE子句完成:綁定變量。

如何將現有模型(包含PK/FK,相關實體,重關係鏈接)映射到Google數據存儲區?

有沒有一種建模工具可以讓我爲Google數據存儲設計?
數據庫設計是否應該從Gaelyk MVC模式和直接編碼流出來?
我不習慣這個,因爲我來自一個RDBMS背景,在那裏你模型很重要
所有好東西都來自良好的關係設計。

此外,在命令式語言(C++,C,Java和Python)的,
編碼數據庫客戶端應用程序之前,我喜歡寫僞代碼,但首先談到數據庫設計(如果應用程序
有DB後端)

我這樣做全錯嗎?看起來有一套工具可用於我
開始編碼,但設計工具集不存在。

附錄:
這裏的邏輯模型,我試圖映射Model

我將如何映射一個循環關係
帳戶 - (1:M) - 下 - (M:1 ) - following_account_id - (1:1) - account_id?

+0

你的問題太模糊,以至於不明智地回答。向我們展示您的模型,並向我們詢問關於如何在App Engine中對其進行建模的具體問題。此外,「連接通過WHERE子句:綁定變量完成」 - 這不是真的,你不能在App Engine中進行連接。綁定參數就是爲了這個 - 查詢的參數。 –

+0

@Nick Johnson我已經根據您的要求添加了Erwin邏輯數據模型。我如何映射循環關係帳戶 - (1:m) - following - (m:1) - following_account_id - (1:1) - account_id? –

回答

10

一般來說,App Engine數據存儲區的指導原則(以及所有非關係數據庫)都是「優化讀取」。總之,這意味着反規範化,反規範化,反規範化。在某些情況下,這會使更新更加困難 - 例如,如果您將用戶名作爲帳戶表的主鍵,並且用戶想更改用戶名 - 並且在某些情況下需要複製數據(例如存儲持久計數)。儘管如此,所有這些都是值得的,因爲它提供了更好的讀取性能和可擴展性,而在典型的Web應用程序中,讀取的數量多達幾百個。

特別看看你的模型,它非常規範化 - 甚至比我看到的大多數RDBMS模型更加如此。一些建議:

  • 將諸如'user_name_id'之類的內容彙總到主帳戶表中。
  • 對於「跟隨」之類的情況,如果某人跟隨的人數通常較少(< 1000),則使用列表屬性,否則使用fan-out pattern
  • 爲每個表選擇一個合理的主鍵,如用戶名或電子郵件,並將其用作鍵名。這使得查詢記錄時可以使用獲取操作而不是查詢,而查詢的速度要快得多。
  • 當需要查找表(如「帳戶類型」)時,請確保外鍵具有足夠的描述性,您只需查找相應的記錄以進行管理操作即可。更好的做法是,在數據存儲區外存儲少量不經常變化的細節,以便可以立即訪問它們。
  • 對於標籤之類的東西,使用列表屬性可以減少查找相關實體的次數,並使索引更容易。

當然,這只是表面上的劃痕,並且在這裏有很多關於SO的內容,在團體和博客like mine上。歡迎回來問一些關於數據建模的具體問題!

要回答您的其他問題,不,我沒有意識到GAE特定的數據建模工具,但您可以像以前一樣使用標準圖表工具。模型確實是在代碼中定義的,因爲數據存儲是無模式的,但這並不一定是實現事物順序的障礙。

+0

+1用於回答比較模糊的問題。在GAE中使用列表屬性的示例(想到一對多關係)詳細討論:http://novyden.blogspot.com/2011/02/efficient-keyword-search-with-relation.html – topchef