2012-07-09 47 views
1

我正在建立一個社交網絡(連接和他們的連接,消息和位置),我有點困惑決定是否去與關係數據庫(MySQL)或沒有數據庫系統(MongoDB)在設計我們的後端API時。有人對什麼時候使用有任何意見嗎? PS:我正在爲開發人員構建開發人員API以使用oAuth來訪問我們的系統。因此可伸縮性和性能也是關鍵因素。 Rails 3 +設計(最有可能)。我應該去與MySql或mongodb

回答

3

這在很大程度上取決於你是舒適與技術,是什麼你真的想離開這等等等。

回到你的問題,並非所有的數據都是關係型的。所以對於這些情況,NoSQL可能會有所幫助。據說,NoSQL代表「不只是SQL」。它並不打算摧毀MySQL或取而代之。

SQL或MySQL有幾個非常大的優勢:

  1. MySQL是強大的數學基礎。
  2. 聲明性語法。
  3. 結構化查詢語言(SQL)中的着名語言。
  4. 高度可靠和非常可靠的技術。 MySQL已經遠遠超過了最古老的noSQL。這是一項成熟的技術。 Google Adsense運行在MySQL上,Facebook持久存儲是MySQL。這些例子表明其可靠性。
  5. 由於成熟的技術,人們已經優化了它的狗屎。
  6. 巨大的網絡和開源社區都爲支持和提供的功能,而不是NOSQL技術(看看發生了什麼卡桑德拉)

在我看來,所有上述問題對我很重要,當我選擇了一塊技術。嘿好,如果它要與現實一些後果掀起那麼做率性你一個星期天晚上的項目,但如果它是稍微更嚴重的話,請考慮這些問題。

SQL沒有(甚至在NOSQL)消失。把這想成是一個論辯或者論證是錯誤的。 NoSQL的是,人們需要考慮當它適合,這是所有的替代品。

文件可以存儲在非關係數據庫,像CouchDB的,甚至在MySQL(它的邊界上的虐待,但仍)。原則上一個關係數據庫可以做一個很好的解決方案NOSQL

看看這個hilarious video。這使得關於這一主題不同的角度:)

enter image description here

+0

@SergioTulentsev,大聲笑我知道你的意思。如果使用「不正確」,即使是最優化的技術也會崩潰。因此,挑戰是弄清楚「正確」是什麼。我已經看到人們使用mySQL從關鍵值存儲到高度複雜的銀行交易系統。找出正確的組合非常重要。 – 2012-07-10 02:46:05

0

如果您的項目需要某些對象之間的實際關係,那麼MySql將會很好。如果您要存儲通常只包含固有數據的內容,例如向其他用戶發送消息的用戶,那麼文檔樣式數據庫(例如MongoDB)更有意義。

你可以在mongo中建立關係,但它們在關係數據庫中有更多的意義。但是,如果你的大部分數據都是用戶的固有內容,那麼mongo更有意義。

在你的情況的文檔類型的方案更有意義,其中每個用戶具有連接用戶和他們自己的個人atributes,ECT清單...

1

我選擇的MongoDB我的「社交」應用由於架構和可擴展性/性能的靈活性。 MongoDB允許我調整模式,而不必進行劇烈的代碼更改,並使讀取/查找數據變得非常簡單。

我也選擇了MongoDB作爲學習體驗。我想知道這些「noSQL」數據庫有什麼大驚小怪,現在我知道爲什麼了。在我看來,MongoDB非常棒,而且絕對值得關注需要可伸縮性和性能的社交網絡。 Node.js也是API的絕佳選擇;)

1

既不。

使用網絡/圖形數據庫,您不會後悔。我目前最喜歡的是Neo4j。

http://neo4j.org/

注:沒有關係的Neo4j

我想的Neo4j的最新版本有一個SQL接口,以防萬一你需要SQL兼容性。否則,請使用他們的本地庫進行研究。它非常快。

如果您需要將圖形數據可視化,這對於向您的上司顯示效果非常好,請使用yEd軟件包。要Neo4j的導出到graphml格式,使用:

Convert Neo4j DB to XML?

你可以正面配有一塊關係數據庫或MongoDB中結束的Neo4j你的人際關係和後端它。我也看到了這些混合架構。