我打算開發使用Scala編程語言的可擴展的Web應用程序。我是scala的新手。我正在考慮使用nginx作爲前端和碼頭作爲後端與播放框架。我很困惑選擇正確的數據庫。我應該去mongodb或hbase或mysql?合適的數據庫和網絡服務器的可擴展的Web應用程序
回答
那麼,MongoDB和MySql都是GPL,除了查詢MongoDB的方式以外,存儲數據的方式具有性能優勢。
在MongoDB中,數據存儲爲數據頁面,這是MySQL中許多表格的結構替換,因此,當您查詢MongoDB時,您將訪問索引查找並從一頁中檢索數據。
在MySQL中,對於相同的數據,由於它放置在幾十個表中,因此您可以執行數十個索引查找,數十個範圍查找和數十個數據查找。
因此,第一輪的獲勝者是MongoDB。
我對HBase的瞭解不多,但是有一個很好的比較圖here,MongoDB似乎佔了上風。
也許一個用例會讓答案更合適。通常,數據的類型及其使用將決定是否使用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....
首先,正如其他人所說,你的持久層的選擇取決於你的使用情況。
如果你正在尋找一個SQL的解決方案,來看看在SO answer to "Good examples of Scala database persistence"概述,這給實例爲:
您可能還想看看SORM Framework。
對於Slick,有一個很有前途的項目,play-slick,它有助於將其集成到Play框架中。
現在,愉快地選擇數據庫可能是一個具有挑戰性的練習,因爲它的風格令人難以置信。這是一個有趣的視覺其中強調了這一點:
http://blogs.the451group.com/information_management/files/2013/02/db_Map_2_13.jpg
的選擇應該真的什麼是最容易從開發人員的技能和API的角度看,數據的結構和規模使用來驅動,多久你寫你的數據與您讀取數據的頻率,您需要的ACID需求類型以及您的應用程序需要擴展的方式。我把可擴展性放在最後,因爲在大多數情況下,當你把可擴展性放在第一位時,結果是沒有問題的解決方案。如果它是一個新的應用程序,事實上你實際上可能不知道任何關於可伸縮性要求的東西,所以我會選擇一些適合你的其他需求的東西。由於您的應用程序構建在Scala中,因此可能還會考慮可用於正在考慮的技術的適用於Scala的封裝器的成熟度和質量。如果您決定採用非關係數據庫,這一點尤其重要,因爲您可能不得不放棄已經存在許多Scala友好包裝的統一JDBC API。
既然你特別提到了MongoDB和HBase,我假設你可能有理由使用非關係數據庫。事實上,在這個早期階段,您面臨的艱難選擇實際上是採用關係型還是非關係型解決方案。如果您選擇關係解決方案,那麼從一個關係數據庫移動到另一個關係數據庫可能相對容易。如果您選擇非關係數據庫,這種情況就不那麼正確了,因爲這些API與一種非關係數據庫的差別很大。
那麼如何知道您是否需要採用非關係數據庫?
- 你有很多列的表嗎?
- 你有幾列但關係很多的表嗎?
- 你有沒有父母和祖先孩子的樹狀數據?
- 您是否打算存儲XML或JSON等結構化數據格式?
- 您是否預見到需要頻繁更改數據庫模式?
如果您對這些問題中的任何一個回答「是」,那麼您可能是非關係型的,但您可能不是重建者。在這種情況下,第二個最難的問題是要選擇哪個非關係數據庫。再次,根據您的數據結構進行選擇,以及它們與其他技術選擇的匹配程度,您需要的ACID屬性,您的技能所在以及最簡單的地方。
- 1. 亞馬遜擴展Web服務器的數據庫服務器
- 2. 商業Web應用程序 - 可擴展的數據庫設計
- 3. 適用於Android應用程序的數據庫服務器
- 4. 在.NET中選擇合適的網絡和Web服務技術
- 5. MySQL數據庫和Android應用程序的Web服務
- 6. 網絡服務和服務器程序的Android位置感知應用程序
- 7. 適用於網絡和移動應用程序的node.js服務器
- 8. iPhone應用程序和網絡服務
- 9. 同步android應用程序與Web服務器數據庫的數據庫
- 10. 適用於應用程序和網站的服務器
- 11. 任何可擴展的OLAP數據庫(Web應用程序規模)?
- 12. 實施一個可擴展的和高性能的網絡應用程序
- 13. 適用於網絡服務器的SSL
- 14. 數據擴展確切的目標網絡服務錯誤
- 15. 專用網絡和數據庫服務器之間的網絡通信
- 16. 支付服務的網絡應用程序的數據庫設計
- 17. 分離的Web服務器和應用程序服務器?
- 18. 網絡應用程序和Web服務部署在一起?
- 19. 可擴展的網絡
- 20. Android社交網絡應用程序的Web服務?
- 21. 我應該使用數據庫和應用程序服務器之間的專用網絡通道嗎?
- 22. 擴展WSO2身份服務器JDBCUserStoreManager以適應外部用戶數據庫
- 23. 數據庫網絡應用程序
- 24. 將Android應用程序連接到Web服務器數據庫
- 25. 數據庫和網絡服務模型
- 26. 在iphone上的網絡服務器和服務發現應用程序
- 27. 網絡服務和網絡應用程序
- 28. 適用於可擴展的Web應用程序體系結構的提示
- 29. Architeture Web服務器,應用服務器和數據庫服務器
- 30. 如何使用Windows應用程序訪問網絡服務器的數據
你的意思是MongoDB而不是MangoDB .. – lobster1234 2013-02-27 07:50:53
是的..蒙戈...不知道爲什麼我一直打字芒果...:D – Archer 2013-03-01 18:41:49