学术文化网:本站代理期刊可作为职称及学位评审依据;并代写(职称、本科、硕士、博士)论文,代写代发论文一条龙服务;保证原创,保证质量,100%通过,保密服务

学术文化网

重点推荐省级国家级期刊、北大中文核心、CSSCI、EI、SCI发表,稳妥操作,速度快,包发表。有意向联系客服咨询。
论文代写:十年专业服务品质,全部由期刊编辑、硕士、博士撰写;保证原创、版权归您;保证通过、否则全额退款。代写论文申请表
论文发表:与百家优秀期刊合作,代理审核组稿,论文发表涵盖所有专业领域,全部正刊,保证出刊,否则全额退款。代写代发论文申请表
业务合作:因业务发展需要,诚招优秀写手合作,要求硕士以上学历,不限专业,另诚征优秀期刊代理合作,具体详谈。QQ:415835425 代写论文写手申请表
当前位置: 主页 > 工科论文

基于MySQL数据库存储的Redis协议实现

基于MySQL 数据库存储的Redis 协议实现
韩利,李昕**
作者简介:韩利,(1985-),男,硕士研究生,主要研究方向:宽带通信网。
通信联系人:李昕,北京邮电大学宽带网研究中心副教授、硕士生导师,研究方向为宽带通信网. E-mail:
cplalx@gmail.com
(北京邮电大学网络与交换国家重点实验室,北京 100876)
5 摘要:随着互联网的发展,WEB2.0 应用程序对于后台数据处理程序的性能要求也越来越高,
传统的关系型数据库不能满足这种需求,因而非关系型数据库NoSQL 得到了广泛的应用。但
目前大多数的NoSQL 数据库产品为了寻求更高的性能,都是基于内存存储的,数据的持久化
功能并不完善。本文在关系型数据库MySQL 的存储引擎基础上实现了NoSQL 数据库产品
Redis 协议,结合了MySQL 数据库良好的数据持久化方案和NoSQL 数据库的高性能操作方式,
10 给海量数据存储提供了又一可靠的方案。
关键词:数据库;海量数据存储;MySQL 数据库;NoSQL;Redis
 0 引言
在Web2.0 之前,关系型数据库可以很好的处理传统网站中的数据。但随着Web2.0 的
兴起,关系型数据库很难快速的处理每天都在产生的新的海量数据。由此,Google 设计了
30 BigTable[1]用来存储海量数据,Amazon 设计了Dynamo[2]用来进行海量数据处理。BigTable
主要用于Google 的海量数据存储,方便进行后期的离线数据操作,是一种可靠的海量数据
存储方案;而Dynamo 是一个典型的分布式系统,可以很容易的实现系统的扩容。 目前其
他的多种NoSQL 数据库,如Memcache、Redis、LevelDB 等,基本上是基于上面两种数据
库理论产生的。
35 Redis[3]是一种Key-Value 类型的NoSQL 数据库产品,全称是远程字典(数据结构)服
务,与使用广泛的Memcache 相比,Redis 支持更多的数据类型,包括字符串、链表、集合、
有序集合等,每种数据类型都有其对用的数据操作协议。与Memcache 只是用来做WEB 应
用的前端或后端缓存相比,Redis 适用的场景更多,可以直接用于数据存储服务。新浪微博
中就广泛的使用了Redis 数据库。
40 在MySQL 数据中实现NoSQL 的访问方式,是用户可以通过定制的API 直接访问数据
库底层的存储引擎,使得用户既可以使用MySQL 中较为成熟的关系数据存储架构,又可以
在进行简单数据处理时得到更快的性能。
 1 设计原理
目前的网络应用,更多的是读多写少,并且读都是一些简单的主键查询(key-value),
45 并不需要复杂的表连接等操作。而目前MySQL 都是基于SQL 进行查询的,在操作具体的
数据之前,会花费大量的时间进行SQL 语句的解析、优化,表之间的连接,查询方案的指
定,锁表与解锁表等,而这些操作的典型的不涉及复杂SQL 语句的应用场景中并不需要,
因此便会浪费较多的内存资源与CPU 资源。而如果能避开这些这些操作,则可以大幅度的
提高MySQL 数据库的读写操作性能。
50 在试验版本的MySQL 数据库中,已经将Memcache 协议集成到了MySQL 数据库中[4],
运行用户通过Memcache 协议的set\get 操作直接读写MySQL 数据库中的数据,绕过MySQL
上层的各种SQL语句解析等操作,但Memcache 协议的功能较少,只包括key-value 的 set\get
操作。同样DeNA 公司在MySQL 数据库基础上实现了自己的NoSQL 协议操作
HandlerSocket,并取得了较好的性能,但因为协议私有,客户端较少,并且程序本身仍有很
55 多问题,应用并不广泛。
因为Redis 的简单易用并且数据类型丰富,目前应用场合非常多,因此本文参考
HandlerSocket[5] 的方式,基于MySQL 数据库实现了Redis 协议的DaemonPlugin 。
DaemonPlugin[6]是MySQL 的一种插件,可以很方便的让用户实现自己的数据库操作。下图
是RedisPlugin 的体系结构图。
60
图1 RedisPlugin 体系架构
Fig.1 The Architecture of RedisPlugin
由图可见,底层的数据存储仍然使用MySQL 的InnoDB 存储引擎进行数据存储,将数
65 据存储在磁盘上,因此不像传统NoSQL 那样受到内存大小的限制。在使用了RedisPlugin
之后,因为底层InnoDB 中存储的数据仍然是模式化的,MySQL 数据库就同时提供了两套
访问接口,通过传统的SQL 语句同样可以访问RedisPlugin 添加的数据,这样也就增加了灵
活性。Redis 程序本身是单进程单线程的,所有的协议操作都是顺序执行的,在使用了主从
 结构后,主从进程之间的数据复制会阻塞其他的协议指令。在使用RedisPlugin 之后,主从
70 结构的操作均交给了MySQL 进行处理,由于MySQL 是多线程模式的,主从进程之间的数
据复制并不会影响其他协议指令的执行,这在一定程度上也提高了程序的性能。
2 程序实现
RedisPlugin 将Redis 移植到MySQL 内部,将Redis 的进程转变成MySQL 的线程,并
转换其内部数据存储方式。Redis 使用单进程单线程模式的部分原因是因为自身的数据存储
75 决定的,如果使用多线程则必须对数据操作做加锁解锁操作,同样会影响性能,因而作者采
用了单进程单线程模式;而MySQL 的存储引擎本身就是多线程模式,内部又具有高效的锁
操作,因此可以将Redis 的单线程模式修改为多线程模式,提高事务的吞吐量。RedisPlugin
使用MySQL 底层数据存储引擎InnoDB 存储数据,有固定的数据模式,而Redis 本身在存
储数据时使用的是无模式方式,因此就要将Redis 中的数据存储模式转换为可存入InnoDB
80 模式表中的数据类型。以Key-Value 和Set 操作为例,在MySQL 数据库中创建如下数据表。
表 1 Key-Value 数据表
Tab. 1 Key-Value Database Schema Table
KEY(INT32) VALUE(BLOB)
85 其中列KEY 对应Key-Value 操作中的key 值,列VALUE 对应Key-Value 操作中的
VALUE 值。在进行key-value 的set 操作时,如果操作的Key 在表中已经存在相应的记录,
则更新VALUE 值为新的VALUE 操作值,如果没有,则在表中插入一条新的记录。进行
key-value 的get 操作时,如果存在key 相应记录,在返回该记录中VALUE 值,没有则返回
空。
90
表2 SET 数据表
Tab. 2 SET Database Schema Table
KEY(INT32) COUNT(INT32) VALUE(BLOB)
其中value 使用二进制协议存储方式,即将下表作为一个数据整体存入上表中的VALUE
95 列,每一个元素都是一个32 位的整数,这些整数也可以是KEY-VALUE 表中的KEY 值。
表 3 SET 表中VALUE 列数据结构
Tab. 3 Data Structure of VALUE in SET Table
VALUE1 VALUE2 …… VALUEn‐1 VALUEn
100 其中KEY 列对应SET 集合操作中的key 值,COUNT 对应SET 集合中元素数目,VALUE
则代表集合本身。VALUE 中的数据元素是按序排列的,这样在进行集合的交集、差集、并
集运算时会提高运算的效率。
分别以Key-Value 协议中的set 操作和SET 协议中sinter 操作为例,列出程序的执行过
程。
 图 2 set 程序执行过程
Fig. 2 Flow of set Operation
由上述过程可见,整个命令执行存储的过程中,只涉及到表的打开、索引的初始化、按
110 照索引读取KEY 对应的记录、添加修改记录、表的关闭等,与MySQL 的执行相应SQL 语
句相比,省掉了SQL 的解析与优化、查询方案的设定等过程,缩减了执行时间。
图 3 sinter 程序执行过程
Fig. 3 Flow of sinter Operation
115
SET 集合的操作与KEY-VALUE 的执行过程相类似,只不过首先要将两个集合的
 VALUE 先从数据库中取出,再对VALUE 中的元素进行交集处理。可以先将集合按照元素
数目进行排序,再依次查找这个数目较少的集合中的元素是否在剩余的集合中,因为所有的
集合本身都是按照顺序排列的,因此可以用二分法进行查找,有效地提高查找速度。
120 3 测试结果
针对MySQL、RedisPlugin、Redis 三者之间的性能对比,下表以KEY-VALUE 为例进
行了简单的读写测试,不同的硬件环境与软件版本对于测试的结果都有影响,但是整体的性
能趋势大致是相同的。
125 图4 IO 性能对比
Fig. 4 Comparsion of IO Operation
由测试结果可见,RedisPlugin 较于MySQL 性能有明显的提升,可见这种RedisPlugin
的方案是可行的,SQL 语句的解析也确实占据了较多的系统资源。相对于纯内存操作的Redis
130 来说,虽然RedisPlugin 的性能仍有一定的差距,但是因为其存储是在磁盘上,存储本身就
已经持久化,不需要在对数据进行持久化,这一点相对于Redis 仍具有一定的优势。
4 总结
互联网的快速普及以及数据量爆炸式的增长,使得对数据库的性能需求越来越高,传统
的关系型数据库已经力显不足。结合了NoSQL 的易操作性以及关系型数据库的丰富功能的
135 RedisPlugin 显示出这种结合的优越之处,由此可见,这种结合在海量数据处理方面必定是
一个重要的方向,有一定的研究价值。这种结合策略比较新颖,在业内使用尚不广泛,仍有
待进一步的研究与改进。


学术论文网Tag:代写论文 论文发表 计算机论文 职称论文发表
本站郑重声明:
  1、我们与数十所知名高校博士强强联手,保持常年稳定合作关系,论文质量更有保证;;
  2、写作领域涉及所有专业,实力操作,出稿更快,质量更高,通过率100%;
  3、所有代写文章,全部原创,包检测,保证质量,后续免费修改,保证通过;
  4、信誉实力服务,专业代写毕业论文,职称论文,硕博士论文,留学生论文,成熟操作;
------分隔线----------------------------
栏目列表
联系我们
服务承诺
推荐内容