① 資料庫的問題:關系型資料庫與非關系型資料庫的區別,和各自的發展前景
當前主流的關系型資料庫有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。
非關系型資料庫有 NoSql、Cloudant。
nosql和關系型資料庫比較
優點:
1)成本:nosql資料庫簡單易部署,基本都是開源軟體,不需要像使用oracle那樣花費大量成本購買使用,相比關系型資料庫價格便宜。
2)查詢速度:nosql資料庫將數據存儲於緩存之中,關系型資料庫將數據存儲在硬碟中,自然查詢速度遠不及nosql資料庫。
3)存儲數據的格式:nosql的存儲格式是key,value形式、文檔形式、圖片形式等等,所以可以存儲基礎類型以及對象或者是集合等各種格式,而資料庫則只支持基礎類型。
4)擴展性:關系型資料庫有類似join這樣的多表查詢機制的限制導致擴展很艱難。
缺點:
1)維護的工具和資料有限,因為nosql是屬於新的技術,不能和關系型資料庫10幾年的技術同日而語。
2)不提供對sql的支持,如果不支持sql這樣的工業標准,將產生一定用戶的學習和使用成本。
3)不提供關系型資料庫對事物的處理。
關系型資料庫的最大特點就是事務的一致性:傳統的關系型資料庫讀寫操作都是事務的,具有ACID的特點,這個特性使得關系型資料庫可以用於幾乎所有對一致性有要求的系統中,如典型的銀行系統。
關系型資料庫為了維護一致性所付出的巨大代價就是其讀寫性能比較差,而像微博、facebook這類SNS的應用,對並發讀寫能力要求極高,關系型資料庫已經無法應付(在讀方面,傳統上為了克服關系型資料庫缺陷,提高性能,都是增加一級memcache來靜態化網頁,而在SNS中,變化太快,memchache已經無能為力了),因此,必須用新的一種數據結構存儲來代替關系資料庫。
關系資料庫的另一個特點就是其具有固定的表結構,因此,其擴展性極差,而在SNS中,系統的升級,功能的增加,往往意味著數據結構巨大變動,這一點關系型資料庫也難以應付,需要新的結構化數據存儲。
於是,非關系型資料庫應運而生,由於不可能用一種數據結構化存儲應付所有的新的需求,因此,非關系型資料庫嚴格上不是一種資料庫,應該是一種數據結構化存儲方法的集合。
② 比較mongodb和mysql在存儲結構化數據時的異同
1. MongoDB比MySQL快在它有Memory-Mapping以及它不用處理事物
2. MySQL適用於傳統的對關聯要求高的方面,MongoDB更多用於Logging、SNS等以K-V居多的需求,但是兩種資料庫其實都能勝任大多數需求。
對MongoDB來說,關聯一般是做成內聯的,最大程度發揮其優勢。而如果內聯起來比較糾結或者冗餘太多處理麻煩的時候當然用SQL更恰當了
3. 新項目可以考慮用MongoDB 如果經驗不足而時間緊迫則可以繼續用MySQL
4. 總之適當的任務用適當的工具
5. MongoDB有比較好的擴展能力,可以很容易做成分布式架構
6. 對MongoDB來說,內存越多越好
③ 談談mongodb,mysql的區別和具體應用場景
(1)MySQL資料庫:
屬於關系型資料庫。
在不同的引擎上有不同的存儲方式。
查詢語句是使用傳統的sql語句,擁有較為成熟的體系,成熟度很高。
開源資料庫的份額在不斷增加,mysql的份額頁在持續增長。
缺點就是在海量數據處理的時候效率會顯著變慢。
(2)Mongodb資料庫:
非關系型資料庫(nosql ),屬於文檔型資料庫。先解釋一下文檔的資料庫,即可以存放xml、json、bson類型系那個的數據。這些數據具備自述性(self-describing),呈現分層的樹狀數據結構。數據結構由鍵值(key=>value)對組成。
存儲方式:虛擬內存+持久化。
查詢語句:是獨特的Mongodb的查詢方式。
適合場景:事件的記錄,內容管理或者博客平台等等。
架構特點:可以通過副本集,以及分片來實現高可用。
數據處理:數據是存儲在硬碟上的,只不過需要經常讀取的數據會被載入到內存中,將數據存儲在物理內存中,從而達到高速讀寫。
成熟度與廣泛度:新興資料庫,成熟度較低,Nosql資料庫中最為接近關系型資料庫,比較完善的DB之一,適用人群不斷在增長。
分析一下Mysql和Mongodb應用場景
1.如果需要將mongodb作為後端db來代替mysql使用,即這里mysql與mongodb 屬於平行級別,那麼,這樣的使用可能有以下幾種情況的考量: (1)mongodb所負責部分以文檔形式存儲,能夠有較好的代碼親和性,json格式的直接寫入方便。(如日誌之類) (2)從data models設計階段就將原子性考慮於其中,無需事務之類的輔助。開發用如nodejs之類的語言來進行開發,對開發比較方便。 (3)mongodb本身的failover機制,無需使用如MHA之類的方式實現。
2.將mongodb作為類似redis ,memcache來做緩存db,為mysql提供服務,或是後端日誌收集分析。 考慮到mongodb屬於nosql型資料庫,sql語句與數據結構不如mysql那麼親和 ,也會有很多時候將mongodb做為輔助mysql而使用的類redis memcache 之類的緩存db來使用。 亦或是僅作日誌收集分析。
參考原文:http://www.cnblogs.com/eternal1025/p/5419905.html