2010-11-15 65 views
22

在閱讀由Bret Taylor(FriendFeed的聯合創建者; Facebook的最新CTO),How FriendFeed uses MySQL to store schema-less data所寫的令人震驚的文章之後,我開始懷疑是否有使用RDBMS的最佳實踐如Oracle,MySQL或PostgreSQL用於存儲和查詢無模式數據?使用無關數據的關係數據庫 - 最佳實踐

當NoSQL成爲新的熱點時,很少有人願意承認他們正在使用關係數據庫,這使得很難找到有關該主題的優秀文章。如何在關係數據庫之上實現一個無模式(或「面向文檔」)的數據庫作爲一個層?

+2

您的FriendFeed示例看起來像[Inner Platform Effect。](http://en.wikipedia.org/wiki/Inner-platform_effect)的示例。另外,僅僅因爲NoSQL是*新的黑色,*並不意味着關係數據庫在昨天突然變得如此* – 2010-11-15 23:26:53

+1

'@Robert Harvey:'文章說「這些設計很少進入現實世界的生產系統,但是,由於所有額外的連接需要,因爲性能往往不如糟糕。「但是,似乎很多大公司都成功地做到了! – 2010-11-15 23:38:28

+0

技術上無能爲力的開發人員在技術上無能爲力。 – PerformanceDBA 2010-12-21 13:26:26

回答

3

在SQL存儲無模式的數據基本上是指實施key-value存儲出現這種情況將SQL用作後端。由於您沒有使用任何關係特性,並且架構相當平凡,因此您無法通過這種方式找到關於設計SQL數據庫的大量信息。但是,您應該能夠找到許多關於設計將應用的鍵值存儲的應用程序的一般信息。

1

您不會在這個主題上找到太多內容,因爲大多數人都會構建單一目的的解決方案。他們的解決方案旨在很好地滿足一個需求。 NoSQL數據庫在構建這些單一目的的數據存儲時會帶來很多痛苦,但是您付出的代價是沒有RDBMS的靈活性和一些內置控件和安全特性。

2

我已經廣泛研究過這個問題。使用「屬性」表(基本上使用鍵/值對)爲RDBMS中的無模式數據建模非常簡單。困難的部分是索引和查詢你的東西。 (基本上,Friendfeed處理的所有複雜性都集中在這個問題上。)

如果您爲屬性表建立索引,最終會得到一個針對所有屬性的索引。這是不可取的,因爲它會增加太多的開銷,因爲您只想查詢某些屬性。另外,你一定想通過複合索引訪問你的東西。對複合指標進行建模非常複雜。我發現的唯一解決方案需要您使用架構來構建自己的索引,但這非常麻煩。我越看着它看起來不太實際。

這個問題的一個很好的解決方案依賴於使用部分索引(又名。過濾索引)。

1

Quora的工程師使用MySQL as the data store instead of NoSQLs such as Cassandra, MongoDB, CouchDB etc。他們partition data at the application level,這意味着它們只在必要時才分區數據,如果可能的話將數據保存在一臺計算機上,並使用主鍵的散列將多個數據庫中的較大數據集分區。數據的應用程序級分區以這樣的方式工作,即符合一組標準的數據被「切換」到一個數據庫,而不符合這些標準(或可能不同的一組標準)的數據可以被髮送到不同的數據庫