2013-02-27 35 views

回答

0

那麼,MongoDB和MySql都是GPL,除了查詢MongoDB的方式以外,存儲數據的方式具有性能優勢。

在MongoDB中,數據存儲爲數據頁面,這是MySQL中許多表格的結構替換,因此,當您查詢MongoDB時,您將訪問索引查找並從一頁中檢索數據。

在MySQL中,對於相同的數據,由於它放置在幾十個表中,因此您可以執行數十個索引查找,數十個範圍查找和數十個數據查找。

因此,第一輪的獲勝者是MongoDB。

我對HBase的瞭解不多,但是有一個很好的比較圖here,MongoDB似乎佔了上風。

+0

你的意思是MongoDB而不是MangoDB .. – lobster1234 2013-02-27 07:50:53

+0

是的..蒙戈...不知道爲什麼我一直打字芒果...:D – Archer 2013-03-01 18:41:49

0

也許一個用例會讓答案更合適。通常,數據的類型及其使用將決定是否使用SQL(關係型,例如MySQL)或NoSQL架構(例如MongoDB)。

這個article可能有助於指導。

....As programmers we can embrace what we’re given. Most likely we’ll have our own opinions. I sure do. But if you’re doing something that lends itself nicely to SQL tables, then we can get our job done. If you’re doing something that requires complex data structures and lends itself nicely to a NoSQL database, then we can similarly get our job done....

0

現在,愉快地選擇數據庫可能是一個具有挑戰性的練習,因爲它的風格令人難以置信。這是一個有趣的視覺其中強調了這一點:

http://blogs.the451group.com/information_management/files/2013/02/db_Map_2_13.jpg

的選擇應該真的什麼是最容易從開發人員的技能和API的角度看,數據的結構和規模使用來驅動,多久你寫你的數據與您讀取數據的頻率,您需要的ACID需求類型以及您的應用程序需要擴展的方式。我把可擴展性放在最後,因爲在大多數情況下,當你把可擴展性放在第一位時,結果是沒有問題的解決方案。如果它是一個新的應用程序,事實上你實際上可能不知道任何關於可伸縮性要求的東西,所以我會選擇一些適合你的其他需求的東西。由於您的應用程序構建在Scala中,因此可能還會考慮可用於正在考慮的技術的適用於Scala的封裝器的成熟度和質量。如果您決定採用非關係數據庫,這一點尤其重要,因爲您可能不得不放棄已經存在許多Scala友好包裝的統一JDBC API。

既然你特別提到了MongoDB和HBase,我假設你可能有理由使用非關係數據庫。事實上,在這個早期階段,您面臨的艱難選擇實際上是採用關係型還是非關係型解決方案。如果您選擇關係解決方案,那麼從一個關係數據庫移動到另一個關係數據庫可能相對容易。如果您選擇非關係數據庫,這種情況就不那麼正確了,因爲這些API與一種非關係數據庫的差別很大。

那麼如何知道您是否需要採用非關係數據庫?

  1. 你有很多列的表嗎?
  2. 你有幾列但關係很多的表嗎?
  3. 你有沒有父母和祖先孩子的樹狀數據?
  4. 您是否打算存儲XML或JSON等結構化數據格式?
  5. 您是否預見到需要頻繁更改數據庫模式?

如果您對這些問題中的任何一個回答「是」,那麼您可能是非關係型的,但您可能不是重建者。在這種情況下,第二個最難的問題是要選擇哪個非關係數據庫。再次,根據您的數據結構進行選擇,以及它們與其他技術選擇的匹配程度,您需要的ACID屬性,您的技能所在以及最簡單的地方。

相關問題