比Redis更快:Berkeley DB面面觀

比Redis更快:Berkeley DB面面觀

Redis很火,最近你們用的多。從兩年前開始,Memcached轉向Redis逐漸成爲潮流;
而Berkeley DB可能不少朋友還很陌生,首先,咱們簡單的介紹一下。redis

Berkeley DB介紹

  • 歷史悠久。Berkeley DB1991年發行初版, 2006年被Oracle收購;
  • Berkeley DB是一個嵌入式數據庫系統,將其歸類到內存數據庫範疇沒有問題;
  • 使用Key-Value結構存儲,自己不支持SQL,5.5版之後整合了SQLite,可以使用sql進行查詢;官方資料給出的評估是若是原生的bdb能讓性能提高10倍,使用SqlLite以後,大概就只有2-3倍;sql的解析及底層的銜接耗時較多;sql

  • 開源產品,使用的開源協議爲: AFFERO GPL (AGPL)。這個協議對商用產品主要的約束是對與使用Berkeley DB的軟件,發佈軟件包時須要付費;舉個例子:若是微軟的office要使用則必須付費;而騰訊的QQ後臺服務器使用則無需付費;數據庫

Berkeley DB設計思想

簡單、小巧、可靠、高性能。
DB庫和應用運行在同一進程空間,接口爲API形式,應用經過API存取DB;緩存

應用範例

MySQL 5.1版以前的數據事務存儲引擎使用的是Berkeley DB;(5.1版以後再也不使用更多的多是出於商業的緣由,由於Berkeley DB被Oracle收購了)
Google Accounts選用的Berkeley DB做爲存儲引擎;服務器

Berkeley DB VS Redis

除了速度,Berkeley DB的最大的優點是支持多索引(次級索引);支持多索引,使得從關係型DB中移植到內存DB更容易,可有效避免數據膨脹及自行處理索引之間的映射關係;

eg:一張學生信息表,以學號爲主鍵(惟一性索引)創建了索引能夠查詢到指定的學生記錄;若是再但願以姓名來查詢,能夠以姓名爲鍵創建次級索引來查詢;
在查詢條件比較複雜的狀況下,可組合創建多個次級索引來找到同一份數據;
想進一步瞭解次級索引如何使用,可參考這篇文章:《Berkeley DB多索引查詢網絡

性能測試對比:Berkeley DB VS Redis

使用環境:oracle

CPU:Intel Core 2 Duo P9xxx 2.0G
MEM:16G
OS:Red Hat Enterprise Linux Server release 6.3  (Santiago) x86_64

一樣是內存數據庫,咱們對比Berkeley DB和Redis的運行時間(單位:ms)
A表記錄:506622條記錄:每條記錄:96個字節
B表記錄:2478條記錄;每條記錄:10個字節;
C表記錄:107221條記錄;每條記錄:82個字節;

重建內存數據庫 BDB用4s,Redis 20s;
更新內存數據庫,BDB和Redis的實驗結果都比較理想
查詢記錄時,BDB比Redis基本快一個數量級;
緩存、重建整個表操做,BDB性能明顯優於Redis;這是由於BDB提供批量讀取全部數據的接口,而Redis沒有提供相似的接口;nosql

性能對比測試:Berkeley DB VS Oracle

爲了將數據從Oracle中移植出來,咱們須要對比關係型數據庫和Berkeley DB的查詢效率:
首先,咱們使用惟一性索引做爲Berkeley DB的主鍵,並所以查詢來和oracle對比;
數據規模:分佈式

實驗數據;1112516條記錄:
大小2.8G;

以查詢出最終結果爲準:
SQL查詢:
SELECT * FROM table_a
WHERE (DATE=to_date(:v, 'YYYYMMDD') AND A =:a AND B =:b AND c>=:c AND D>=:d) AND ( E=:e) AND (F=:F) AND (G=:g) AND H!='C' AND N='N'";
其中>= 、 !=操做沒法編入索引,在索引查處數據後需應用再進行篩選過濾;
最終的查詢結果爲一條記錄;
性能

     在存取速度上,Berkerley DB比關係型數據庫,比redis都快很多,在批量查詢及數據導入操做上甚至快上一個數量級。這主要是由於:
1. 全內存操做;數據都在內存中;
2. DB與應用在同一個進程地址空間中;這樣,就沒有額外的網絡開銷。
固然,咱們會意識到使用Berkerley DB就必須在每一個應用物理節點上都開闢一大塊內存,來存放Berkerley DB的數據。這方面,分佈式的Redis則顯得更爲實惠。
 

若是這篇文章讓你對Berkeley DB產生了興趣,若是你也想着效率那點事,想着將關係數據庫轉到nosql,試着上手吧。傳送門:《Berkeley DB入門篇》。

Posted by: 大CC | 31OCT,2013
博客:blog.me115.com
微博:新浪微博

相關文章
相關標籤/搜索