數據存儲的各個發展階段

內存讀寫速度 = 10倍 * 磁盤讀寫速度,
磁盤容量 > 1000倍*內存容量

數據存儲總體可以分爲文件存儲階段、關係型數據庫階段、非關係型數據庫階段、內存數據庫階段、分佈式數據庫階段

文件存儲階段
計算機發展初期,所有的信息都存儲在文件中,那時需要存儲的信息相對較少,但是如果大量數據存儲在一個文件中,那就會造成文件查詢緩慢、文件插入刪除緩慢。因爲所有操作都是針對整個文件操作。

關係型數據庫階段
數據庫爲什麼會比存取或者讀寫速度快呢?
關係型數據庫利潤mysql、oracle裏面都有數據庫的概念,比如oracle默認數據庫大小默認爲8k,可以說在文件存儲階段的一個大文件會分成很多給8k大小的小文件。如果僅僅時分塊,沒有把分塊管理起來,那效率跟文件存儲階段也差不多。我們知道一般關係型數據庫按行進行存儲,並且每行數據都是結構化的。假如我們要查找數據庫是否存在某個字段值爲”張三“的,最快方法就是張三字段作爲索引,那索引在數據庫又是怎麼實現的呢?
我們知道一個塊大小爲8k,假如存儲一整條數據庫,每條數據1k,則能存儲8條,而我們的索引也是一條數據,但是索引不會記錄一條完整的數據,它只用記錄”張三“字段 及其所在位置,一條索引只有0.1k,那一個塊大小則能存儲8000條索引數據,而整個索引信息一般採用B+樹進行管理,可以根據鍵值能快速定位哪條索引信息可以命中相應的數據塊,然後取存儲數據的數據庫中去獲取整個數據庫的信息即可,這樣就能避免全表掃描。效率肯定比全文件掃描要快得多。
也就是說數據庫比文件快的原因主要包括:
數據分塊,數據結構化、順序索引
常見的關係型數據庫包括:oracle,mysql、ibm的db2、sqlserver、sqlite、h2等
爲了提高關係型數據庫的處理效率,常見於給其增加緩存,即將部分數據讀到內存中,加快處理時效性。根本原因就是內存讀取速度比磁盤快!

 **內存數據庫階段**

內存數據庫即數據只存儲到內存中,從存儲的位置就可以看出,內存數據庫肯定比數據存儲到磁盤的關係型數據庫快,還有就是數據庫存儲量會受內存大小的限制。內存存儲空間一般要比磁盤小很多,所以內存數據庫主要是存儲一些使用高頻的數據。
常見的純內存數據庫有memcache和redis,memcache比redis出現得早,兩種都是key-value形式存儲,memcache只支持string類型得value,而redis能支持五種數據類型,並且redis是單線程的,處理速度更快,所以redis更受廣大開發者歡迎。
爲什麼redis是單線程還處理速度更快呢?
redis是存儲在內存中,不是磁盤,不用等待磁盤讀寫數據,然後cpu才能處理。如果是多線程會涉及到cpu在不同上下文之間的切換,需要保存和讀取上下文,這是很耗時間的,而單線程就是順序執行,可以省去CPU保存現場的時間。好比一個人只幹一件事速度一般會快過一個人同時幹兩件事,流水線不就是這樣嗎?
內存數據庫因爲其存儲空間的侷限性,已經價格相對昂貴而無法做主要存儲數據庫。

   **分佈式數據庫階段**

分佈式系統的核心理念是讓多臺服務器協同工作,完成單臺服務器無法處理的任務,尤其是高併發或者大數據量的任務。分佈式數據庫是數據庫技術與網絡技術相結合的產物,它通過網絡技術將物理上分開的數據庫連接在一起,進行邏輯層面上的集中管理。
國內主要的分佈式數據庫有:開源的mysql,騰訊的TDsql(在mysql5.6版本上做的封裝),華爲的GaussDB(高斯數據庫,在PostgreSQL9.2上封裝),阿里的Oceanbase

關係型數據庫與非關係型數據庫對比
 關係型數據庫
  1、容易理解:二維表結構是非常貼近邏輯世界一個概念,關係模型相對網狀、層次等其他模型來說更容易理解;
  2、使用方便:通用的SQL語言使得操作關係型數據庫非常方便;
  3、易於維護:豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大減低了數據冗餘和數據不一致的概率;
  4、支持SQL,可用於複雜的查詢。
  關係型數據庫的缺點
  1、爲了維護一致性所付出的巨大代價就是其讀寫性能比較差;
  2、固定的表結構;
  3、高併發讀寫需求;
  4、海量數據的高效率讀寫;
非關係型數據庫
  非關係型數據庫的特性
  1、使用鍵值對存儲數據;
  2、一般不支持ACID特性;
  3、非關係型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合。
  非關係型數據庫的優點
  1、直接操作數據,無需經過sql層的解析,讀寫性能很高;
  2、基於鍵值對,數據沒有耦合性,容易擴展;
  3、存儲數據的格式:nosql的存儲格式是key,value形式、文檔形式、圖片形式等等,文檔形式、圖片形式等等,而關係型數據庫則只支持基礎類型。
  非關係型數據庫的缺點
   1、不提供sql支持,學習和使用成本較高;
   2、無事務處理

	當然存儲還涉及hadoop的分佈式文件系統hdfs、zookeeper等,後面再對此部分進行梳理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章