内存数据库产品是把数据放在内存中,实现高效读写,目前是传统的关系型数据库的有效补充。在此我以产品演化的视角简单总结一下我所理解的内存数据库发展历史,目的是理解内存数据库产品的发展趋势,不恰当的地方请读者指正。
一、关系数据库缓存--内存数据库的雏形
适用于对吞吐量和响应时间要求不高的企业级应用。
代表产品:Oracle、Mysql等主流关系数据库缓存。
关系数据库设计之初就包含了缓存的设计,即将最近从数据库访问的数据存储在缓存中,根据最近最久未使用(LRU)算法,在有限的内存情况下,保留常用的数据在缓存中,提高缓存的利用率,最终尽可能的提高关系数据库的吞吐量,但作用有限。
这种设计沿用至今,并不断被优化。
二、关系型内存数据库--关系型数据库的进化产品
适用于高事务性,高吞吐量,实时性要求高,要求关系型数据处理的场景。
代表产品:Timesten内存数据库(2005年被Oracle公司收购)。
Times Ten官方定义:TimesTen/Cache is a real-time dynamic data caching system. It includes TimesTen‘s in-memory database and data exchange technologies. Together, they enable applications to combine the real-time performance of TimesTen with the large storage capacity of an RDBMS.
将数据放在内存中,关系型数据库。
Timesten优点:
高事务吞吐量,支持标准SQL语句查询,可持久化,可恢复到内存,高可用性,无数据丢失。
有商业公司支持,技术响应速度快,可以和Oracle数据库通信,作为Oracle数据库的缓存使用。
Timesten缺点:
不开源,价格昂贵。
三、NoSQL数据库--关系型数据库之外的扩展
适用于并发访问量大、响应速度要求较高的,数据结构关系不复杂,允许KV方式存储数据的场景。
代表产品:Redis,Memcache等KV数据库。
将数据存储于内存,可以定时持久化到磁盘。列式存储结构,压缩比大,能够提供比关系数据库更高效的读写访问、分页等需求;但事务性弱,不支持ACDI,不能存储复杂的关系型数据,不善于复杂条件查询。
适合做关系数据库的简单结构的数据缓存,以及博客、论坛等业务逻辑不复杂的数据存储。
预想未来,由于内存价格越来越低廉,互联网产品对大并发、高响应速度的需求,内存数据库会大行其道。将会有越来越多的关系型内存数据库开源产品出现。