1. 程式人生 > 資料庫 >一、Redis 企業級快取資料庫簡述

一、Redis 企業級快取資料庫簡述

一、   企業級快取資料庫簡述

1、   快取資料庫的概念

傳統的資料庫管理系統把所有資料都放在磁碟上進行管理,所以稱做磁碟資料庫(DRDB:Disk-Resident Database)。磁碟資料庫需要頻繁地訪問磁碟來進行資料的操作,由於對磁碟讀寫資料的操作一方面要進行磁頭的機械移動,另一方面受到系統呼叫(通常通過CPU中斷完成,受到CPU時鐘週期的制約)時間的影響,當資料量很大,操作頻繁且複雜時,就會暴露出很多問題。

 

近年來,記憶體容量不斷提高,價格不斷下跌,作業系統已經可以支援更大的地址空間(計算機進入了64位時代),同時對資料庫系統實時響應能力要求日益提高,充分利用記憶體技術提升資料庫效能成為一個熱點。

 

在資料庫技術中,目前主要有兩種方法來使用大量的記憶體。一種是在傳統的資料庫中,增大緩衝池,將一個事務所涉及的資料都放在緩衝池中,組織成相應的資料結構來進行查詢和更新處理,也就是常說的共享記憶體技術,這種方法優化的主要目標是最小化磁碟訪問。另一種就是記憶體資料庫(MMDB:Main Memory Database,也叫主存資料庫)技術,就是乾脆重新設計一種資料庫管理系統,對查詢處理、併發控制與恢復的演算法和資料結構進行重新設計,以更有效地使用CPU週期和記憶體,這種技術近乎把整個資料庫放進記憶體中,因而會產生一些根本性的變化。

 

記憶體資料庫系統帶來的優越效能不僅僅在於對記憶體讀寫比對磁碟讀寫快上,更重要的是,從根本上拋棄了磁碟資料管理的許多傳統方式,基於全部資料都在記憶體中管理進行了新的體系結構的設計,並且在資料快取、快速演算法、並行操作方面也進行了相應的改進,從而使資料處理速度一般比傳統資料庫的資料處理速度快很多,一般都在10倍以上,理想情況甚至可以達到1000倍。

 

而使用共享記憶體技術的實時系統和使用記憶體資料庫相比有很多不足,由於優化的目標仍然集中在最小化磁碟訪問上,很難滿足完整的資料庫管理的要求,設計的非標準化和軟體的專用性造成可伸縮性、可用性和系統的效率都非常低,對於快速部署和簡化維護都是不利的。

 

2、   記憶體資料庫歷史和發展

 

2.1、  雛形期

從上個世紀60年代末到80年代初。在這個時期中,出現了主存資料庫的雛形。1969年IBM公司研製了世界上最早的資料庫管理系統——基於層次模型的資料庫管理系統IMS,並作為商品化軟體投入市場。在設計IMS時,IBM考慮到基於記憶體的資料管理方法,相應推出了IMS/VS Fast Path。Fast Path是一個支援記憶體駐留資料的商業化資料庫,但它同時也可以很好地支援磁碟駐留資料。在這個產品中體現了主存資料庫的主要設計思想,也就是將需要頻繁訪問,要求高響應速度的資料直接存放在實體記憶體中訪問和管理。在這個階段中,包括網狀資料庫、關係資料庫等其他各種資料庫技術也都逐漸成型。

 

2.2、  技術理論成熟期

1984年,D J DeWitt等人發表了《主存資料庫系統的實現技術》一文。第一次提出了Main Memory Database(主存資料庫)的概念。預言當時異常昂貴的計算機主存價格一定會下降,使用者有可能將大容量的資料庫全部儲存在主存中,提出了AVL樹、雜湊演算法、主存資料庫恢復機制等主存資料庫技術的關鍵理論,為主存資料庫的發展指出了明確的方向 。

 

1984年,D J DeWitt等人提出使用非易逝記憶體或預提交和成組提交技術作為主存資料庫的提交處理方案,使用指標實現主存資料庫的存取訪問。

 

1985年,IBM推出了IBM 370上執行的OBE主存資料庫。

 

1986年,RB Hagman提出了使用檢查點技術實現主存資料庫的恢復機制。威斯康星大學提出了按區雙向鎖定模式解決主存資料庫中的併發控制問題。並設計出MM-DBMS主存資料庫。貝爾實驗室推出了DALI主存資料庫模型。

 

1987年,ACM SIGMOD會議中提出了以堆檔案(HEAP FILE)作為主存資料庫的資料儲存結構。Southern Methodist大學設計出MARS主存資料庫模型。

 

1988年普林斯頓大學設計出TPK主存資料庫。

 

1990年普林斯頓大學又設計出System M主存資料庫。

 

3、   產品發展期和市場成長期

隨著網際網路的發展,越來越多的網路應用系統需要能夠支援大使用者量併發訪問、高響應速度的的資料庫系統,主存資料庫市場成熟

半導體技術快速發展,半導體記憶體大規模生產,動態隨機存取儲存器(DRAM)的容量越來越大,而價格越來越低,這無疑為計算機記憶體的不斷擴大提供了硬體基礎,使得主存資料庫的技術可行性逐步成熟

1994年美國OSE公司推出了第一個商業化的,開始實際應用的主存資料庫產品Polyhedra

 

1998年德國SoftwareAG推出了Tamino Database。

 

1999年日本UBIT會社開發出XDB主存資料庫產品。韓國Altibase推出Altibase。

 

2000年奧地利的QuiLogic公司推出了SQL-IMDB。

 

2001年美國McObject推出eXtremeDB。加拿大Empress公司推出EmpressDB。

 

4、   幾種主存技術應用的比較

第一代:使用者定製的主存資料庫。通過應用程式來管理記憶體和資料;不支援SQL語句, 不提供本地儲存, 沒有資料庫恢復技術;效能好但很難維護和在別的應用中不能使用;應用在實時領域比如工廠自動化生產。

 

第二代:簡單功能的記憶體資料庫。能夠快速處理簡單的查詢;支援部分的 SQL語句和簡單的恢復技術;主要目的是能夠快速處理大量事務;針對簡單事務處理領域,尤其是交換機, 行動通訊等。

 

第三代:通用的主存資料庫。針對傳統的商業關係型資料庫領域,能夠提供更高的效能、通用性以及穩定性;提供不同的介面來處理複雜的SQL語句和滿足不同的應用領域;可以應用在計費、電子商務、線上安全領域,幾乎包括磁碟資料庫的所有應用領域。

 

5、   幾種企業中常用的快取資料庫比較

5.1、  Memcached

Memcached是一個自由開源的,高效能,分散式記憶體物件快取系統。

 

Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric為首開發的一款軟體。現在已成為mixi、hatena、Facebook、Vox、LiveJournal等眾多服務中提高Web應用擴充套件性的重要因素。

 

Memcached是一種基於記憶體的key-value儲存,用來儲存小塊的任意資料(字串、物件)。這些資料可以是資料庫呼叫、API呼叫或者是頁面渲染的結果。

 

Memcached簡潔而強大。它的簡潔設計便於快速開發,減輕開發難度,解決了大資料量快取的很多問題。它的API相容大部分流行的開發語言。

 

本質上,它是一個簡潔的key-value儲存系統。

 

一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度、提高可擴充套件性。

 

5.1.1、 優缺點
  • 優點:高效能讀寫、單一資料型別、支援客戶端式分散式叢集、一致性hash多核結構、多執行緒讀寫效能高。
    • 缺點:無持久化、節點故障可能出現快取穿透、分散式需要客戶端實現、跨機房資料同步困難、架構擴容複雜度高。

5.2、  Redis

REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value儲存系統。

 

Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。

 

它通常被稱為資料結構伺服器,因為值(value)可以是 字串(String), 雜湊(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等型別。

 

5.2.1、 優缺點
  • 優點:高效能讀寫、多資料型別支援、資料持久化、高可用架構、支援自定義虛擬記憶體、支援分散式分片叢集、單執行緒讀寫效能極高。
  • 缺點:不支援多執行緒讀寫,相比Memcached會慢。

5.3、  Tair

Tair是由淘寶網自主開發的Key/Value結構資料儲存系統,在淘寶網有著大規模的應用。您在登入淘寶、檢視商品詳情頁面或者在淘江湖和好友“搗漿糊”的時候,都在直接或間接地和Tair互動。

 

Tair是一個Key/Value結構資料的解決方案,它預設支援基於記憶體和檔案的兩種儲存方式,分別和我們通常所說的快取和持久化儲存對應。

 

Tair除了普通Key/Value系統提供的功能,比如get、put、delete以及批量介面外,還有一些附加的實用功能,使得其有更廣的適用場景。

 

5.3.1、 優缺點
  • 優點:高效能讀寫、支援三種儲存引擎(ddb、rdb、ldb)、支援高可用、支援分散式分片叢集、支撐了幾乎所有淘寶業務的快取。
  • 單機情況下,讀寫效能較其他兩種產品較慢。

 

5.4、測試

 

 

 

 

 

 

 

 

 

 

 

5.4.1、 測試結果

Memcached:多核的快取服務,更加適合於多使用者併發訪問次數(訪問次數較少的應用場景)。

Redis:單核快取服務,在單節點情況下,更加適合少量使用者,多次訪問的應用場景。

Memcached:多核的快取服務,更加適合於多使用者併發訪問次數(訪問次數較少的應用場景)。

Redis:單核快取服務,在單節點情況下,更加適合少量使用者,多次訪問的應用場景。