比Redis更快:Berkeley DB面面观

摘要:
比Redis更快:Berkeley DB概述内容目录:BerkeleyDB介绍Berkeley数据库设计思想应用示例Berkeley DBVSRedis性能测试比较:Berkelkeley DBVS Redis性能比较测试:Berkelley DBVSOracle比Redis快:Berkelkey DB概述Redis非常流行,最近有很多大家族。从两年前开始,Memcached逐渐转向Redis;BerkeleyDB可能对很多朋友都不熟悉。首先,让我们简单介绍一下。BerkeleyDB的引入历史悠久。
比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更容易,可有效避免数据膨胀及自行处理索引之间的映射关系;
比Redis更快:Berkeley DB面面观第1张
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个字节;
比Redis更快:Berkeley DB面面观第2张
重建内存数据库 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'";
其中>= 、 !=操作无法编入索引,在索引查处数据后需应用再进行筛选过滤;
最终的查询结果为一条记录;
比Redis更快:Berkeley DB面面观第3张

     在存取速度上,Berkerley DB比关系型数据库,比redis都快不少,在批量查询及数据导入操作上甚至快上一个数量级。这主要是因为:
1. 全内存操作;数据都在内存中;
2. DB与应用在同一个进程地址空间中;这样,就没有额外的网络开销。
当然,我们会意识到使用Berkerley DB就必须在每个应用物理节点上都开辟一大块内存,来存放Berkerley DB的数据。这方面,分布式的Redis则显得更为实惠。
 

如果这篇文章让你对Berkeley DB产生了兴趣,如果你也想着效率那点事,想着将关系数据库转到nosql,试着上手吧。传送门:《Berkeley DB入门篇》。

Posted by: 大CC | 31OCT,2013

免责声明:文章转载自《比Redis更快:Berkeley DB面面观》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VR电脑模拟实现关于微服务(三)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker安装Redis,让宿主机可以访问

一、拉取镜像 docker pull redis #后面可以带上tag号, 默认拉取最新版本 二、查看镜像 docker images #查看容器中的镜像 三、启动并做映射(以配置文件方式启动) 1、创建配置文件目录存放redis.conf,文件从官网下载:http://download.redis.io/redis-stable/redis.conf...

Oracle执行计划

Oracle数据库查看执行计划 基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分析执行计划对SQL进行优化做相应说明。 一、什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中...

redis在.Net程序中使用

1.设置访问密码 config set requirepass 123456 2.连接redis服务器 private static string redisHost = ConfigHelper.GetAppSetting("redisHost"); private static int redisPort = ConfigHelper.GetA...

Thinkphp6笔记十四:Redis配置

cache配置,文件位置:config/cache.php <?php // +---------------------------------------------------------------------- // | 缓存设置 // +--------------------------------------------------...

mssql2000数据库执行SQL语句来创建数据库以及数据表还有索引

mssql2000数据库执行SQL语句来创建数据库以及数据表还有索引 创建数据库MSsql2000Create DATABASE databasename on primary (name='databasename_data',filename='C:databasename_data.mdf',size=3mb,maxsize=UNLIMITED,fi...

Redis的安装和简单使用

Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis数据是存放在内存中,是内存数据库,存值取值都比其他数据库快的多得多。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Red...