主流内存数据库功能特性和性能比较
内存数据库从范型上可以分为关系型内存数据库和键值型内存数据库。在实际应用中内存数据库主要是配合oracle或mysql等大型关系数据库使用,关注性能,作用类似于缓存,并不注重数据完整性和数据一致性。基于键值型的内存数据库比关系型更加易于使用,性能和可扩展性更好,因此在应用上比关系型的内存数据库使用更多。本文首先比较FastDB、Memcached和Redis主流内存数据库的功能特性,再从性能上比较H2、Memcached和Redis三种内存数据库,希望大家能够根据自己业务需求的具体特点,选择合适的开源产品。
主流内存数据库功能比较
FastDB
FastDb是高效的关系型内存数据库系统,具备实时能力及便利的C++接口。FastDB针对应用程序通过控制读访问模式作了优化。通过降低数据传输的开销和非常有效的锁机制提供了高速的查询。对每一个使用数据库的应用数据库文件被影射到虚拟内存空间中。因此查询在应用的上下文中执行而不需要切换上下文以及数据传输。fastdb中并发访问数据库的同步机制通过原子指令实现,几乎不增加查询的开销。
FastDB的特点包括如下方面:
1、FastDB不支持client-server架构因而所有使用FastDB的应用程序必须运行在同一主机上;
2、fastdb假定整个数据库存在于RAM中,并且依据这个假定优化了查询算法和接口。
3、fastdb没有数据库缓冲管理开销,不需要在数据库文件和缓冲池之间传输数据。
4、整个fastdb的搜索算法和结构是建立在假定所有的数据都存在于内存中的,因此数据换出的效率不会很高。
5、Fastdb支持事务、在线备份以及系统崩溃后的自动恢复。
6、fastdb是一个面向应用的数据库,数据库表通过应用程序的类信息来构造。
FastDB不能支持Java API接口,这使得在本应用下不适合使用FastDB。
Memcached
Memcached是一种基于Key-Value开源缓存服务器系统,主要用做数据库的数据高速缓冲,并不能完全称为数据库。
memcached的API使用三十二位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。由于 memcached通常只是当作缓存系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程序更新memcached内的资料。memcached具有多种语言的客户端开发包,包括:Perl、PHP、JAVA、C、Python、Ruby、C#。
Redis
Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了C++、Java、Python,Ruby,Erlang,PHP客户端。
小结
由于不支持Java客户端,因此FastDB并不合适。在Memcached和Redis的比较上,分为性能和功能两个方面。
关于性能方面的详细内容建议继续阅读后面的内容,我对H2、Memcached和Redis亲自从读写删三方面进行了性能测试。因此从内存数据库功能特性方面综合来看,推荐使用Redis。
主流内存数据库性能比较
测试目的
本次性能测试选择目前成熟度和使用度都比较高的内存数据库,通过读写的性能测试比较这些主流数据库中的性能优劣。在性能测试过程中同时记录各个产品的稳定性。
比较的内存数据库包括Memcached、Redis、H2。
测试方法
性能测试主要包括对内存数据库读、写、删除的测试。
使用单个线程将一定量的记录插入内存数据库,记录插入时间,每条记录的数据大小相同;然后在进行一定量的读操作,记录读出时间;最后将这些数据删除,记录时间。
根据读写效率综合评估内存数据库性能。
具体的测试数据量为:
1、插入10000条数据,记录时间;
2、读取上述10000条数据,记录时间;
3、将上述10000条数据逐条删除,记录时间。
测试环境
本次测试共需要使用一台联系服务器,配置如下:
CPU:Intel® Xeon® CPU E7-4830 @ 2.13GHz,共32个CPU,每个CPU8核;
内存:物理内存8G,交换分区9G;
磁盘:物理磁盘250G;
网卡:单网卡,带宽上限1000Mbps,全双工
在该服务器上搭建中标云平台,并创建虚拟机,三种内存数据库均部署在该虚拟机中,虚拟机配置为:
CPU:Intel® Xeon® CPU E7-4830 @ 2.13GHz,共2个CPU,每个CPU8核;
内存:物理内存1G,交换分区5G;
磁盘:物理磁盘50G;
网卡:单网卡,带宽上限1000Mbps,全双工
测试应用部署在一台普通台式机中,台式机配置为:
CPU:Intel® Xeon® CPU E7-4830 @ 2.13GHz,共2个CPU,每个CPU2核;
内存:物理内存1G,交换分区2G;
磁盘:物理磁盘64G;
网卡:单网卡,带宽上限1000Mbps(共享),全双工
台式机和服务器采用普通内部局域网连接。
内存数据库部署
Memcached
Memcached的安装前先安装依赖的libevent库,步骤如下:
tar -zxvf libevent-2.0.12.stable.tar.gz
cd libevent-2.0.12.stable
./configure –prefix=/usr/libevent
make
make install
安装的memcached需要从源码编译安装,步骤如下:
tar -zxvf memcached-1.4.15.tar.gz
cd ./memcached-1.4.15
./configure –with-libevent=/usr/libevent
make
make install
Redis
Redis的安装也是从源码开始,将Redis源码压缩包拷贝到/usr/local/目录下,安装步骤如下:
tar -zxvf redis-2.6.14.tar.gz
cd ./redis-2.6.14
make
开启Redis服务器和Redis自带的客户端访问工具如下:
src/redis-server
src/redis-cli
H2
H2的安装较为简单,直接使用unzip命令进行解压即可。
解压之后进入bin目录,并修改h2.sh文件中的Java命令启动的主类和选项为:
org.h2.tools.Server -tcpAllowOthers -webAllowOthers
然后执行脚本h2.sh即可启动数据库。H2提供本地命令行控制台,启动方式为:
java -cp *.jar org.h2.tools.Shell
一般来说,使用图形化的Web界面更为方便。
测试结果
Memcached的测试结果如下:
Benchmark result has listed as follow:
Set Data spent time (ms): 344
Get Data spent time (ms): 8297
Delete Data spent time (ms): 187
Redis的测试结果如下:
Benchmark result has listed as follow:
Set Data spent time (ms): 5594
Get Data spent time (ms): 6312
Delete Data spent time (ms): 3969
H2的测试结果如下:
Benchmark result has listed as follow:
Set Data spent time (ms): 14609
Get Data spent time (ms): 14859
Delete Data spent time (ms): 10469
结果分析
从结果来看,Memcached的性能最好,Redis其次,而H2的性能则最差。细节方面,Redis的读性能要略好于Memcached。
在执行本次测试之前并没有对各个软件进行优化,因为测试数据总量10000条,每条不到1KB,总共不过10MB,而且单个线程,所以默认配置应该都是足够的,因此测试结果能够反映各自的性能情况。产生这个结果的原因主要是三种软件的功能丰富程度不同,以及使用内存的情况不同。H2作为关系型数据库,具有持久存储功能,因此还是大量使用了磁盘,而且H2也要考虑数据完整性和原子性等关系数据库的关键特性;而Redis采用Key-Value范型,不能达到关系型数据库那样的可靠性,实现的特性少,可以更加关注性能,但是为了防止数据丢失,支持持久存储机制;而同样是Key-Value方式的Memcached则不支持持久存储,纯内存软件。还有一项与性能无关的情况需要指出,在编写测试应用的时候,Memcached操作的代码量最少,其次为Redis,H2所需代码最多。
结论
综合上述功能特性的分析和性能测试结果分析,对于内存数据库的选型结论如下:
1、如果无特殊要求,则Memcached综合性能最好,编程最方便,推荐使用;
2、如果读操作很多,而且需要内存数据库提供持久存储以避免重启之后数据丢失,则推荐使用Redis。
在性能方面,可以参考资料[6]中的比较。最终的比较结果表明,在小文件和大文件的读写性能上,Redis都要胜过Memcached,特别是在大文件读写方面,memcached性能不高。在功能方面,可以参考资料[7]中的分析。该分析中指出Redis对Memcached的最大的补充是对持久化的支持,这使得在机器重启或者升级时数据不至于丢失。我的测试代码采用Java开发,开发环境为Eclipse 3.7,如果需要我的全部测试代码,可以在评论里留下邮箱,我会发过去。
参考资料
[1] Memcached Build from Source.http://code.google.com/p/memcached/wiki/NewInstallFromSource.
[2] Configure Memcached.http://code.google.com/p/memcached/wiki/NewConfiguringServer.
[3] Redis Document.http://redis.io/documentation.
[4] Jedis 2.0 API.http://www.jarvana.com/jarvana/view/redis/clients/jedis/2.0.0/jedis-2.0.0-javadoc.jar!/index.html.
[5] H2 Database Engine Version 1.3.172 (2013-5-25).http://www.h2database.com/html/main.html.
[6] Memcache and Redis Performance Compare.http://timyang.net/data/mcdb-tt-redis/.
[7] Memcache and Redis Functional Analysis.http://www.oschina.net/news/26691/memcached-timeout.
主流内存数据库功能特性和性能比较相关推荐
- 手机 html5评测,三款主流手机浏览器HTML5性能横向评测
到目前为止带给大家更多的是一种神秘感,我们并未看到很多以HTML5为主的网站在我们生活中出现,正是因为这份神秘感让我们想对HTML5进行一次深入的探秘,去了解一下什么是HTML5,并且HTML5究竟应 ...
- 超轻薄笔记本电脑软件测试,50轮Cinebench极限测试 8款主流轻薄本CPU性能横评
01前言 在开始本篇横评之前,我们首先要弄清一个问题,即笔记本CPU的性能高低并非完全取决于型号.规格上的差异,比如i7一定比i5强.R7一定比R5强,而是取决于笔记本厂商对CPU性能的释放.调校策略 ...
- html5手机排行,三款主流手机浏览器HTML5性能横向评测
到目前为止HTML5带给大家更多的是一种神秘感,我们并未看到很多以HTML5为主的网站在我们生活中出现,正是因为这份神秘感让我们想对HTML5进行一次深入的探秘,去了解一下什么是HTML5,并且HTM ...
- 各linux桌面性能比较,主流Linux桌面环境性能大比拼!
为了让linux桌面系统能吸引更多的用户,开源社区在桌面环境上下了不少功夫.依靠X灵活的架构,使linux可以拥有多种用户界面,让用户可以按照自己的习惯自由选择. 经过多年的发展,KDE和Gnome成 ...
- 计算机网络网络性能需求分析报告,主流游戏对处理器性能需求分析总结
4)<使命召唤:高级战争>CPU处理器性能部分 双核双线程的G3220不满足游戏最低需求,直接进不了游戏,只能用Core i系列处理器进行测试.我们可以看到,高端的四核八线程Core i7 ...
- 五款主流 Linux 发行版性能对比,稳而不强?
测试结果解读 2018 即将结束,年末正是各种基准测试对比轮番出炉的时候,通过这些报告,我们可以看到 Linux 性能的各个方面在 2018 是如何发展的.但本文的这份性能对比会更加深入 -- 将研究 ...
- Linux学习总结(52)——主流 Linux 发行版性能对比
2018 即将结束,年末正是各种基准测试对比轮番出炉的时候,通过这些报告,我们可以看到 Linux 性能的各个方面在 2018 是如何发展的.但本文的这份性能对比会更加深入 -- 将研究五个主流 Li ...
- 主流WiFi芯片与性能简介
随着"互联网+"时代的到来,网络越来越成为我们生活中不可缺少的一部分.作为家庭网络的核心--路由器特别是无线路由器是我们每天都离不开的.市场上的路由器品牌众多.方案不同.性能各异, ...
- 绝了,几款主流的 JSON 库性能对比!
本篇通过JMH(Oracle官方测试框架)来测试一下Java中几种常见的JSON解析库的性能.每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库.但是百闻不如一见,只有自己亲手测试过的才 ...
最新文章
- 使用.net开发手机管理软件 (七) IrMC简介
- 算法--中兴面试:输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数, 使其和等于 m
- 《R语言数据挖掘》----1.15 结果可视化
- Android WebView重定向问题,Android WebView 重定向问题
- 创业公司,没有好领导,有多少人才都是死路一条
- 《局域网聊天——Android》
- 中年发福谁之“过”?Science论文采用“双标水”法首次揭示全生命周期代谢规律...
- startssl申请免费ssl证书
- python退出帮助系统_Python退出脚本并返回Main
- c语言switch语句可以用在数组上吗,Microchip工程师社区 - C语言switch语句不能给数组吗? - Microchip C语言编译器论坛 - 麦田论坛...
- PHP+crontab 完美实现定时任务
- 2022年 微信大数据挑战赛
- FineUI 后台Grid中 某列添加背景色 AspCore MVC
- N95滤材之父:滤材才是关键!道翰天琼认知智能机器人平台API接口大脑为您揭秘-2。
- 5-大数据分析之 druid 介绍
- 提取富文本内容(包括去除图片)
- java实现发送qq邮箱验证码
- 英语--日常生活名词收集 Daily Life Nouns Collection
- DIY一台键盘主机,有点点Raspberry Pi 400那味了
- nprogress 插件 网页顶部加载进度条
热门文章
- 强强联手,共为教育——格瑞教育集团与英国才奕国际教育集团战略合作签约
- 使用oshi-core开发服务监控模块
- js获取子元素的内容
- ubuntu查看内存占用情况
- DuiVision开发教程(17)-对话框
- 登陆网站时验证码有什么作用
- 未能加载文件或程序集“System.Web.DataVisualization.Design”或它的某一个依赖项。生成此程序 集的运行时比当前加载的运行时新,无法加载此程序集。...
- react项目中使用react-particles-js实现粒子动态背景
- <input> 标签的 readonly 属性
- 性能监视器perfmon