`
colin115
  • 浏览: 41925 次
社区版块
存档分类
最新评论

比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
微博:新浪微博

 

分享到:
评论

相关推荐

    Redis深度历险:核心原理和应用实践【TALKDATA推荐】1

    这种互动式的学习方法有助于读者更好地理解和掌握Redis的使用。 总的来说,《Redis深度历险:核心原理和应用实践》是一本深入浅出的Redis指南,它不仅讲解了Redis的基本概念,还探讨了其在实际工作中的应用,是IT...

    Redis深度历险:核心原理和应用实践.zip

    《Redis深度历险:核心原理和应用实践》这本书是一本深入了解Redis数据库的宝贵资源,尤其在C++开发环境中具有很高的参考价值。Redis是一款高性能的键值存储系统,广泛应用于缓存、消息队列、计数器等多个场景。下面...

    Redis深度历险:核心原理和应用实践.png

    总结《Redis深度历险:核心原理和应用实践》的xmind图

    Redis-begin.zip_Redis java_adodb REDIS_java redis_redis_site:www

    Redis,典型的NoSQL数据库服务器,和BerkeleyDB相比,它可以作为服务程序独立运行于自己的服务器主机。在很多时候,人们只是将Redis视为Key/Value数据库服务器,然而事实并非如此,在目前的版本中,Redis除了Key/...

    Redis - Redis深度历险.pdf.zip

    Redis,全称Remote Dictionary Server,是一款开源的、高性能的键值对存储系统,常用于数据库、缓存和消息中间件的角色。"Redis深度历险"这本书可能是为了深入讲解Redis的各种特性和使用技巧,帮助读者全面了解和...

    docker-redis-cluster:一个 Redis 集群 Docker 镜像

    docker-redis-cluster Redis 集群 Docker 映像。 此图像用于测试环境。... docker run -v /some/path/:/data tommy351/redis-cluster:3.2 如果您使用的是 Redis 4.0 及更高版本,则可以设置CLUSTER_ANNOUNCE

    Redis-Fast:Redis-Fast 的只读发布历史

    Redis::Fast - Redis 数据库的 Perl 绑定 概要 ## Defaults to $ENV{REDIS_SERVER} or 127.0.0.1:6379 my $redis = Redis::Fast->new; my $redis = Redis::Fast->new(server => 'redis.example.com:8080'); ## Set ...

    在ASP.NET MVC中使用Redis 的Demo:通过Redis实现用户登陆,并保持登陆状态。

    在ASP.NET MVC框架中,Redis常被用作一个...通过使用Redis,我们可以构建更健壮、高可用的系统,提高用户体验。记得在实际部署时,考虑Redis的集群配置、持久化策略以及安全性措施,确保数据的安全性和服务的稳定性。

    redis-namespace:此gem添加了Redis :: Namespace类,该类可用于命名空间Redis键

    Redis命名空间Redis的::命名空间提供了一个接口,您的命名空间的子集密钥空间(例如,具有共同的开始键),并要求宝石。 require 'redis-namespace'# => trueredis_connection = Redis . new# => #<Redis>namespaced...

    redis 同步工具redis-port.tgz

    redis-port(Linux 64 位) 是一组开源工具集合,主要用于 Redis 节点间的数据库同步、数据导入、数据导出,支持 Redis 的跨版本数据迁移。其包括以下工具: redis-sync:支持在 Redis 实例之间进行数据迁移。 redis...

    Redis深度历险:核心原理和应用实践 全部代码实现

    redis基本命令 Redis深度历险:核心原理和应用实践 全部代码实现 1.线程10模型,md 11.RedisDistributeLock.md 12.md 15.Redis主从同步,md 17.Redis Codis.md 18.Redis Cluster.md 19.Redis info.md 2.通信协议.md 3...

    Redis 核心篇:唯快不破的秘密.rar

    Redis,全称Remote Dictionary Server,是一款高性能的键值存储系统,因其速度极快而闻名于世,常被用作数据库、缓存以及消息中间件。本资料“Redis 核心篇:唯快不破的秘密”将深入探讨Redis的内部机制,揭示其速度...

    Redis内存碎片:深度解析与优化策略

    1. **内存中数据存储**:Redis 将所有数据保持在内存中,这使得读写速度非常快。 2. **持久化**:尽管 Redis 是一个内存数据库,但它提供了持久化机制,可以将内存中的数据保存到磁盘,防止数据丢失。 3. **支持事务...

    redis面试题:redis笔记-精选整理PDF

    1.什么是redis? Redis是一个基于内存的高性能key-value数据库。 2.Reids的特点1)Key-Value类型的内存数据库, 2)支持保存多种数据结构,3)Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能...

    Redis集群管理工具Redis::Sentinel.zip

    Redis-sentinel是Redis的作者antirez完成的,因为Redis实例在各个大公司的应用,每个公司都需要一个Redis集群的管理工具,被迫都自己写管理工具来管理Redis集群,antirez考虑到社区的急迫需要(详情),花了几个星期写...

    Ansible PlayBook Redis 单机版

    例如,`redis.conf.j2`可能包含Redis的默认配置,如端口、日志路径等,而`redis.service`定义了Redis服务的启动和停止命令。 此外,为了使Ansible能正确执行PlayBook,你需要确保Ansible的主机清单(`hosts.ini`)...

    Redis实战指南:掌握性能键值数据库.txt

    redis

    redis:7.0.8 docker镜像

    redis:7.0.8 docker镜像

    Redis实战.pdf

    - **Redis Cluster**:Redis 集群支持自动分区,将数据分散在多个节点上,提供更高的扩展性和容错性。 7. **Redis在实际应用中的场景** - **缓存**:由于Redis的高性能,常用于网站的页面缓存、数据缓存等。 - *...

    redis2.8.6安装,错误解决

    redis2.8.6的安装过程和一些错误的解决,

Global site tag (gtag.js) - Google Analytics