【轉】內存數據庫、關係型數據庫和非關係型數據庫

內存數據庫、關係型數據庫和非關係型數據庫

一、內存數據庫、關係型數據庫和非關係型數據庫

1.個人觀點:

二、內存數據庫(Redis,MongoDb,SQLite,Oracle等):

三、Raft分佈式協議:

四、Redis出現宕機,如何保證數據不丟失?


一、內存數據庫、關係型數據庫和非關係型數據庫

數據庫類型

特性

優點

缺點

關係型數據庫

SQLite,Oracle,MySQL等

1,關係型數據庫,是指採用了關係模型來組織數據的數據庫;
2,關係型數據庫的最大特點就是事務的一致性 ;
3,簡單來說,關係模型的指就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織。

1,容易理解:二維表結構是非常貼近邏輯世界一個概念,關係模型相對網狀,層次等其他模型來說更容易理解;
2,使用方便:通用的SQL語言使得操作關係型數據庫非常方便;
3,易於維護:豐富的完整性(實體完整性,參照完整性和用戶定義的完整性)大大減低了數據冗餘和數據不一致的概率;
4,支持SQL可用於複雜的查詢 

1,爲了維護一致性所付出的巨大代價就是其讀寫性能比較差;
2,固定的表結構;
3,高併發讀寫不行 
4,海量數據的高效率讀寫

非關係型數據庫

MongoDB,Redis,HBase等

1,使用鍵值對存儲數據 ;
2,分佈式 ;
3,一般不支持ACID特性 ;
如圖4所示,非關係型數據庫嚴格上不是一種數據庫,的英文應該一種數據結構化存儲方法的集合

1,無需經過SQL層的解析,讀寫性能很高 ;
2,基於鍵值對數據沒有耦合性,容易擴展;
3,存儲數據的格式:nosql的的的存儲格式是鍵,值形式,文檔形式,圖片形式等等,文檔形式,圖片形式等等,而關係型數據庫則只支持基礎類型

1,不提供SQL支持,學習和使用成本較高;
2,無事務處理,附加功能雙向和報表等支持也不好;

1.個人觀點:

關係型數據庫:在於關係,對數據操作(比如數據的增刪改查)之前需要考慮關係,具備ACID特性(ACID是原子原子性,一致性一致性,隔離性隔離性,耐用性持久性),高併發能力一般不行

 

二、內存數據庫(Redis,MongoDb,SQLite,Oracle等):

基於內存,讀寫速度快,數據有可能會丟失,丟失率只能降到最低,但不能根除。

MongoDB:更適合集羣部署,更多的考慮到集羣方案,一般可用於“海量數據分析的訪問效率提升”。

Redis:更偏重於進程順序寫入,雖然支持集羣,也僅限於主-從模式。一般可用於“較小數據量的性能和運算,比如網絡開發中的session存儲”。

 

三、Raft分佈式協議:

一般分佈式都會遵從的協議:有點類似美國的總統選舉。

比如有一個建議,有?個服務器,有大於2N + 1的服務器表示贊同,那麼這個建議就被通過。

假如建議是“一致性”,只要大於2N + 1的服務器之間的數據一致,那他們就是一致。

假如建議是“主服務器”,只要大於2N + 1的服務器投票給要被選舉的服務器,被選舉的服務器也將變成主服務器

還有很多思維:https://www.jdon.com/artichect/raft.html

 

四、Redis出現宕機,如何保證數據不丟失?

一臺服務器快照持久化(RDB),同時滿足在指定的時間間隔內和改動了幾個數據的兩個條件,生成內存中的數據集快照,然後寫入磁盤;日誌持久化(AOF),滿足everysec(每秒)/always(每次操作)/no(默認30秒)條件,生成日誌,然後寫入磁盤緩存

多臺服務器:Redis正在開發的Sentinel(哨兵監聽),具體網址:http://redisdoc.com/topic/sentinel.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章