雲計算背後的秘密:nosql誕生的原因和優缺點
我本來一直覺得nosql其實很容易理解的,我本身也已經對nosql有了非常深入的研究,但是在最近準備yuntable的chart的時候,發現nosql不僅非常博大精深,而且我個人對nosql的理解也只是皮毛而已,但我還算是乙個「知恥而後勇」的人,所以經過一段時間的學習之後,從本系列第六篇開始,就將和大家聊聊nosql,而本篇將主要給大家做一下nosql資料庫的綜述。
首先將和大家聊聊為什麼nosql會在關係型資料庫已經非常普及的情況下異軍突起?
誕生的原因
隨著網際網路的不斷發展,各種型別的應用層出不窮,所以導致在這個雲計算的時代,對技術提出了更多的需求,主要體現在下面這四個方面:
1. 低延遲的讀寫速度:應用快速地反應能極大地提公升使用者的滿意度;
2. 支撐海量的資料和流量:對於搜尋這樣大型應用而言,需要利用pb級別的資料和能應對百萬級的流量;
3. 大規模集群的管理:系統管理員希望分布式應用能更簡單的部署和管理;
4. 龐大運營成本的考量:it經理們希望在硬體成本、軟體成本和人力成本能夠有大幅度地降低;
目前世界上主流的儲存系統大部分還是採用了關係型資料庫,其主要有一下優點:
1.事務處理---保持資料的一致性;
2.由於以標準化為前提,資料更新的開銷很小(相同的字段基本上只有一處);
3.可以進行join等複雜查詢。
雖然關係型資料庫已經在業界的資料儲存方面佔據不可動搖的地位,但是由於其天生的幾個限制,使其很難滿足上面這幾個需求:
1. 擴充套件困難:由於存在類似join這樣多表查詢機制,使得資料庫在擴充套件方面很艱難;
2. 讀寫慢:這種情況主要發生在資料量達到一定規模時由於關係型資料庫的系統邏輯非常複雜,使得其非常容易發生死鎖等的併發問題,所以導致其讀寫速度下滑非常嚴重;
3. 成本高:企業級資料庫的license**很驚人,並且隨著系統的規模,而不斷上公升;
4. 有限的支撐容量:現有關係型解決方案還無法支撐google這樣海量的資料儲存;
業界為了解決上面提到的幾個需求,推出了多款新型別的資料庫,並且由於它們在設計上和傳統的nosql資料庫相比有很大的不同,所以被統稱為「nosql」系列資料庫。總的來說,在設計上,它們非常關注對資料高併發地讀寫和對海量資料的儲存等,與關係型資料庫相比,它們在架構和資料模型方量面做了「減法」,而在擴充套件和併發等方面做了「加法」。現在主流的nosql資料庫有bigtable、hbase、cassandra、******db、couchdb、mongodb和redis等。接下來,將關注nosql資料庫到底存在哪些優缺點。
優缺點
在優勢方面,主要體現在下面這三點:
1. 簡單的擴充套件:典型例子是cassandra,由於其架構是類似於經典的p2p,所以能通過輕鬆地新增新的節點來擴充套件這個集群;
2. 快速的讀寫:主要例子有redis,由於其邏輯簡單,而且純記憶體操作,使得其效能非常出色,單節點每秒可以處理超過10萬次讀寫操作;
3. 低廉的成本:這是大多數分布式資料庫共有的特點,因為主要都是開源軟體,沒有昂貴的license成本;
但瑕不掩瑜,nosql資料庫還存在著很多的不足,常見主要有下面這幾個:
1. 不提供對sql的支援:如果不支援sql這樣的工業標準,將會對使用者產生一定的學習和應用遷移成本;
2. 支援的特性不夠豐富:現有產品所提供的功能都比較有限,大多數nosql資料庫都不支援事務,也不像ms sql server和oracle那樣能提供各種附加功能,比如bi和報表等;
3. 現有產品的不夠成熟:大多數產品都還處於初創期,和關係型資料庫幾十年的完善不可同日而語;
上面nosql產品的優缺點都是些比較共通的,在實際情況下,每個產品都會根據自己所遵從的資料模型和cap理念而有所不同,接下來,將給大家介紹nosql兩個最重要的概念:資料模型和cap理念,並在本文最後,對主流的nosql資料庫進行分類。
NoSQL簡介和興起的原因
nosql資料庫具有以下幾個特點 1 靈活的可擴充套件性 2 靈活的資料模型 3 與雲計算緊密融合 怎麼理解橫向擴充套件和縱向擴充套件 縱向擴充套件 傳統思想,把電腦的cpu配到頂配,記憶體擴充套件,硬碟擴大,就可以讓單機更高效率地處理更高更多的資料。縱向擴充套件存在瓶頸,因為單機處理能力到一定程度...
vector list 和deque的優缺點
vector表示一段連續的記憶體區域,隨機訪問效率很高,因為每次訪問離起始處的位移都是固定的,但是在隨意位置插入刪除元素效率很低,因為它需要將後面的元素複製一遍。list表示非連續的記憶體區域,並通過一對指向首尾元素的指標雙向鏈結起來,從而允許向前和向後兩個方向進行遍歷。在list的任意位置插入和刪...
Apache和Nginx的優缺點
nginx相對於apache的優點 1 輕量級,同樣起web 服務,比apache占用更少的記憶體及資源 2 抗併發,nginx 處理請求是非同步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 3 能保持低資源低消耗高效能 4 高度模組化的設計,編寫模組相對簡單 5 社群活躍,各種高效...