2011-03-01 100 views
2

我正在尋找方法來實現免費模式的數據存儲設計。但是,通常在NoSQL學校中使用無模式這個術語。我對NoSQL的可伸縮性優勢不感興趣。一個例子是朋友式的方式(如Bret Taylor的博客中所解釋的)。你能否指點我一些其他資源或設計實例/案例研究,其主要目標是要有一個靈活/無模式設計(我甚至可以犧牲性能)?模式免費數據存儲設計

+0

你能提供一個鏈接到博客文章? – 2011-03-01 20:55:44

+0

它在這裏。 http://bret.appspot.com/entry/how-friendfeed-uses-mysql – mete 2011-03-02 07:01:25

回答

2

我不是100%地肯定你的使用情況,您能分享一下你正在嘗試做一些更多的信息? 當你說你沒興趣「的NoSQL」這是否意味着你必須實現一個關係型數據庫之上的一切嗎? (哪一個?)

有一對夫婦的做法,把關係模式更加靈活:

  • EAV /實體 - 屬性 - 值設計,其中所有「實體」一個表中存儲公用信息/系統中的對象,一個表包含這些實體可以具有的屬性的信息以及一個存儲(entity_id,attribute_id,value)的表。例如,請參見http://en.wikipedia.org/wiki/Entity-attribute-value_model

  • 「皮包骨格的表」,其中你有寬列表,每列類型有一列(一個varchar列,一個blob列,一個int列等),然後只填寫匹配所需值類型的列儲藏。當你只想存儲不同類型的值而不是隨時更改屬性時,這是有意義的。可用於將屬性存儲在EAV模式中。

  • 儲存「三合一」的數據:語義網的人已經花了相當多的時間研究如何最好的商店RDF數據,包括主題關係客體的三元組。有「真正的」RDF商店有自己的查詢語言,但其中一些可以使用關係數據庫作爲存儲後端。如果這聽起來像是要走的路,請看這裏:http://www.w3.org/2003/01/21-RDF-RDB-access/ - 一個簡單的谷歌查詢「在關係數據庫中存儲rdf」應該指向幾個Triplestore的實現,可以有效地映射到關係數據庫中。

希望這有助於!

+0

感謝您的回答。我知道我說的有點模糊,從概念上講,我想存儲的只是數據,我沒有性能限制。那麼我有什麼選擇讓數據保持一種比傳統方法更靈活的方式來修改,這是我的問題。我正在檢查你提到的方法。 – mete 2011-03-04 11:41:08

1

你可能想看看Berkeley DB。它提供了一個無模式簡單的鍵值API(ala NoSQL),並且是一個直接鏈接到您的應用程序的庫。 Berkeley DB的好處在於你可以擁有你的蛋糕並且也可以吃它。它提供了開發人員正在尋找的簡單,靈活,可嵌入的數據存儲,但它非常快速,可擴展且可靠。除了基本密鑰/值對API之外,Berkeley DB還提供了兩個其他對開發友好的API:Java Collections APIDirect Persistence Layer API(類似於POJO的持久性API)。

大多數BDB應用程序開發人員使用最適合於應用程序代表數據的API。 C和C++結構通常存儲爲簡單且不透明的鍵/值對,其中Java集合顯然與該API匹配良好,並且Java類與DPL API匹配良好。

祝您的搜索。

+0

是否可以使用bdb創建高可用性存儲? – mete 2011-03-11 16:11:59

+0

是的,Berkeley DB通過複製已經有很多年了。 Berkeley DB實現了一種主從架構,在這種架構中,必須將寫入數據發送給主機,並將讀取數據發送到主機或副本。事務提交是將更改複製到副本的觸發器。您可以根據需要獲取儘可能多的副本,並分佈在局域網或廣域網中。許多客戶使用BDB HA爲其關鍵任務應用程序提供災難恢復,自動故障轉移和分佈式負載平衡。你可以在這裏閱讀更多關於它的內容:http://bit.ly/gEqhI0。 – dsegleau 2011-03-11 20:42:53