2012-07-14 59 views
1

可能有人點我發佈/ PDF/explan在這裏,我可以更多地瞭解Hypertable的數據庫設計,我已經找遍了谷歌,但沒有什麼可出現Hypertable的數據庫設計

主要的問題我已經是我該怎麼辦存儲您「不能」表示爲關鍵值的數據。例如,假設我想跟蹤用戶評論,我可以簡單地模仿關係數據庫,生成新的審查密鑰存儲我需要的所有數據,然後爲產品X存儲密鑰以json格式存儲所有評論到x.reviews

我想出的另一件事是簡單地有x.reviewKeys,然後對於每個生成的評論推新密鑰作爲該單元格的新版本,假設我可以存儲無限數量的同一單元格版本。因爲我離開數據庫的一切我都在代碼執行工作

第二條本辦法似乎更適合我。

有誰知道如何來處理這個問題,甚至更好的谷歌是如何處理這與他們的BigTable中

回答

1

此尋找任何可能導致理解Hypertable的數據庫設計的「幾個小時」肯定是不夠的,但這裏是開始點,如果有人跑到這個谷歌

現在據我瞭解,到目前爲止,您可以定義列家庭說,reviews,並且每個列家庭可以有無限數量的鍵,例如,如果你嘗試存儲用戶數據,你可能會寫這樣的東西

userKey:info並且有多個屬性,如,name, address, email ...你將能夠通過簡單地定義鍵,該條目訪問信息,以便例如讓用戶address你會使用userKey:info:address關鍵

一件事,使列族不同(如果我理解得很好)是你可以得到所有在列族鍵,以便例如,如果指定userKey:info你會得到userKey:info:name, userKey:info:address, userKey:info:email的結果,這意味着存儲所有我在我的問題,你會提到的評論創建新的專欄家庭和存儲所有評論的關鍵,你會最終得到像這樣的key:reviews:<review_ID>這將返回所有評論的ID(如果你問它返回鍵:評論),並且你會簡單地使用該ID獲取有關具體審查的詳細信息。

所以基本上就像你有屬性的名稱,地址,電子郵件列家庭信息,在這裏你可以使用審覈ID作爲列屬性。

現在至少部分確定我得到了正確我還檢查了riak數據庫設計(鍵/值數據庫不像hypertable,它是列數據庫?),似乎他們有桶作爲列家族的替代品,所以這個以免似乎是正確的實施

我不知道他們是如何實現這個內部使其效率,所以我必須檢查出來,因爲我總是創建新帳戶所以我不能更新這篇文章,但如果有人有更多的信息後重放/編輯這個職位

0

所以,如果我理解正確的話,你有產品表和另一個評價,他們有一個1:N的關係(有能成爲一個每個產品的評論)?要做到這一點

一種方法是使用列預選賽。

您的產品表中有一個行鍵(即產品ID),一些列的標題,描述,製造商等一列「評論」:

create table Products (title, description, manufacturer, reviews); 

對於您可以創建一個獨特的密鑰的評論,即GUID的行鍵(或者是一個足以大的隨機數,或只是一個獨特的時間戳;我要去使用GUID我我的例子):

create table Reviews (author, rating, text); 

要創建1:N的關係,插入審查的行鍵進入「評論」欄家庭作爲限定符(實際單元格值不需要,可以爲空):

INSERT INTO Reviews VALUES ("product-id", "reviews:1273-1234-234-123a", ""); 

並檢索產品123的所有評論:

SELECT reviews FROM Products WHERE ROW = "123"; 

你甚至可以創建在「評論」一個限定詞索引來加速一些疑問。

+0

這個例子不完整,你插入什麼產品?你如何指定每個表上的鍵? – lurscher 2012-12-24 15:46:25