一种基于MySQL双存储引擎的内存数据库实现方法技术

技术编号:8347904 阅读:617 留言:0更新日期:2013-02-21 01:19
本发明专利技术公开了一种基于MySQL双存储引擎的内存数据库实现方法,目的在于解决现有技术所存在的MySQL产品不能同时满足高可靠性、冗余备份、持久存储、高吞吐量、即时响应等技术问题。它能同时满足高可靠性、冗余备份、存储持久等要求,而且吞吐量大、响应速度快,使用十分方便,它包括以下步骤:选择两台计算机,并分别安装MySQL服务器;分别在所述两台MySQL服务器上启动相同的存储引擎,建立等同的数据库,以实现内存数据库的持久存储功能;利用MySQL的复制功能,使所述两个存储引擎互为备份;配置内存表等。

【技术实现步骤摘要】

本专利技术涉及数据库技术,尤其涉及。
技术介绍
目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、 总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL作为网站数据库。甚至在电信行业中,由于MySQL优越的性能、稳定性、完善的功能,也越来越多的被用于电信产品中。例如公开日为2008年04月09日、公开号为 CN 101158958A的专利文献采用了这样的技术方案,一种在线视频控制系统及控制方法,其通过MySQL常规用法建立MySQL数据库来对用户信息、视频信息和电影评论信息进行控制, 使用户可以通过系统的操作界面输入操作命令来实现操作目的,最终完成对所述视频的各种操作,该方案虽然存在响应速度、可靠性不高等不足,但仍然能够顺利实现视频的各种操作控制。其实,无论是互联网产品还是电信产品,对产品的高可靠性及快速的响应速度,都有着越来越高的要求。为了满足高可靠性,在MySQL产品集中最好的选择是MySQL Cluster,它是一个高冗余的数据库存储引擎,但实 践证明,MySQL Cluster的插入、查询速度并不快,而且价格昂贵,管理功能有限。用户需要很多二次开发,比如,集群中的节点没有自动重启的功能,需要用户自行开发,MySQL Cluster作为一个新产品,也不够稳定。MySQL的Memory引擎,顾名思义,内存中存储数据,非常高速,但MySQL服务器关闭后所有数据消失,没有持久存储的能力,而其使用SQL语句API,虽然方便,但没有使查询性能提高最大化。再者,关于MySQL的复制功能能解决备份、冗余、负载分担等问题,但最终的查询访问还是落在一个MySQL服务器上访问磁盘表而非内存表,对于快速度查询,还是不如直接访问内存快。对于产品MySQL Proxy,是主要借助MySQL的复制功能实现的,存在MySQL复制的问题。另外,虽然MySQL提供Query Cache机制,但它不适合查询语句经常变化的情形,并且如果数据表被更改,那么和这个数据表相关的全部Cache都会无效,并被删除。当然,MySQL的各种存储引擎内一般都有页缓存机制,但这种机制复杂,由于缓存页可能被释放,可能在磁盘与缓存页之间切换,造成过多的消耗,影响性能。还有访问MySQL数据库,还需要解析编译SQL语句,这都是不小的消耗。由上述可知,MySQL产品族中,并没有一个能同时满足高可靠性、冗余备份、持久存储、高吞吐量、即时响应、直接访问表内存的接口等要求的数据库引擎。而MySQL之外的免费内存数据库,比如MonetDB、FastDB都是单机版的数据库,不能解决冗余备份问题。目前比较知名的商业内存数据库有Oracle的TimesTen,其性能非常强劲,但价格非常高昂,由于是关系型数据库,满足严格的ACID (原子性、一致性、隔离性、持久性)要求, 这也对读写速度也有着大的消耗,查询速度未必最大化。其实,为了提高数据库的查询性3能,很多公司都为自己的产品开发基于Oracle之上的内存数据库。Memcached也是常用的内存对象缓存系统,但它不基于数据库表结构,不能直接用做表数据的缓存,需要一些在它之上的许多二次开发。在实际应用中,很多产品并没有严格的一致性要求,当新数据写入数据库中时,其实即使应用程序并不能即时读到该新数据,也不影业务的运行,比如,IPTV系统,用户购买了某些频道的观看权利,由于订购记录还未同步到用户设备访问的服务器中(也可能是内存数据库表中),几秒钟内可能看不到节目,过了几秒钟后再看到,这是可以容忍的。再者, 许多的应用是查询密集的应用,少量的写操作,所以只要能满足高吞吐的查询即可。
技术实现思路
本专利技术主要是解决现有技术所存在的MySQL产品不能同时满足高可靠性、冗余备份、持久存储、高吞吐量、即时响应等技术问题,提供,它能够在一些对一致性要求不严格、查询密集、写操作少的应用中同时满足高可靠性、冗余备份、存储持久等要求,而且吞吐量大、响应速度快,使用十分方便。本专利技术针对现有技术问题主要是通过下述技术方案得以解决的,一种基于MySQL 双存储引擎的内存数据库实现方法,包括以下步骤(A)选择两台计算机,并分别安装MySQL服务器;(B)分别在所述两台MySQL服务器上启动存储引擎,所述存储引擎是具有永久存储功能的存储引擎,建立等同的数据库,以实现内存数据库的持久存储功能;(C)利用MySQL的复制功能,使所述两个存储引擎互为备份;(D)在应用程序中部署内存表和独立运行的缓存引擎。本专利技术选择了两个MySQL存储引擎,这两个存储引擎分别运行在两个安装在两台计算机上的M ySQL服务器之内。本专利技术选择了具有持久存储功能的MySQL存储引擎,比如 MyISAM存储引擎或Innodb存储引擎,以实现内存数据库的持久存储。又利用MySQL的复制 (replication)功能,使两个存储引擎互为备份,满足冗余备份的要求,并且当一个MySQL 存储引擎不能工作时,另外一个能继续提供服务,再加上能提供高并发的快速查询功能的内存表,由此构架了一个高可靠性、高性能的内存数据库平台。作为优选,内存表部署在各个应用程序的进程之内,不同的应用程序内都运行一个独立工作的缓存引擎,应用程序按照自己的需要选择不同的物理数据库表进行缓存,还根据需要从物理数据库表中选择不同的记录进行缓存。各个应用程序依靠自己的缓存引擎从物理数据库表同步数据到内存表,一个缓存引擎的故障并不影响其他缓存引擎的正常工作。两个MySQL存储引擎互相备份,而对表的写操作,可以从任一引擎或两引擎同时进行。作为优选,物理数据库表是MySQL服务器磁盘上的数据库表。物理数据库也就是 MySQL服务器磁盘上的数据库。作为优选,内存表与应用程序进程占用同一个内存空间,提供直接读内存表记录的两种接口,两种接口都是紧耦合接口,一种接口是将内存表记录拷贝到应用进程指定的内存块中,另一种接口是将内存表记录的内存地址返回给应用进程以便直接访问其中数CN 102937955 A书明说3/10 页据,两种接口都采用记录的行读锁。内存表实现在应用进程的内部,与应用程序进程占用同一个内存空间,提供直接读内存表记录的两种接口,两种都是紧耦合的接口,一种接口是将内存表记录拷贝到应用进程指定的内存块中,另一种接口是将内存表记录的内存地址返回给应用进程以直接访问其中数据,两种接口都采用记录的行读锁。这种实现方式保证了对查询密集的快速即时响应。应用本专利技术内存数据库实现方法,可以根据需要部署多个缓存引擎,以实现一种集群的模式。作为优选,利用MySQL的触发器机制,比较实时地跟踪物理数据库表的修改动作, 及时将物理数据库表记录的修改、增加、删除操作同步到内存表中,保持内存与磁盘的最终一致性,即保持内存数据库与物理数据库的一致性。作为优选,缓存引擎运行在应用程序内,当一个MySQL存储引擎不能工作时,缓存引擎自动切换到另一 MySQL存储引擎,继续同步物理数据库表数据。这些操作对应用都是透明的。切换过程及切换后,内存表中的数据并不丢失,并且即使两个存储引擎同时发生故障时,由于内存表依然存在并可用,所以应用程序还可依赖内存表继续提供一定的服务。本专利技术带来的本文档来自技高网
...

【技术保护点】
一种基于MySQL双存储引擎的内存数据库实现方法,其特征在于,包括以下步骤:(A)选择两台计算机,并分别安装MySQL服务器;(B)分别在所述两台MySQL服务器上启动存储引擎,所述存储引擎是具有永久存储功能的存储引擎;(C)利用MySQL的复制功能,使所述两个存储引擎互为备份;(D)在应用程序中部署内存表和独立运行的缓存引擎。

【技术特征摘要】

【专利技术属性】
技术研发人员:徐继军
申请(专利权)人:UT斯达康通讯有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1