比Redis更快:Berkeley DB面面觀


比Redis更快:Berkeley DB面面觀

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

Berkeley DB介紹

  • 歷史悠久。Berkeley DB1991年發行第一版, 2006年被Oracle收購;
  • Berkeley DB是一個嵌入式數據庫系統,將其歸類到內存數據庫范疇沒有問題;
  • 使用Key-Value結構存儲,本身不支持SQL,5.5版以后整合了SQLite,可使用sql進行查詢;官方資料給出的評估是如果原生的bdb能讓性能提升10倍,使用SqlLite之后,大概就只有2-3倍;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

使用環境:

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沒有提供類似的接口;

性能對比測試: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
微博:新浪微博

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM