内存数据库是相对于磁盘数据库来说的。我们都知道我们经常使用的关系型数据库,比如MySQL,它的数据文件最终是存储到磁盘上的。而内存数据库则是将所有的数据存储在内存中,磁盘和内存在访问速率上不是一个量级的,完全没有可比性。
随着内存容量不断加大、价格不断下降,互联网的流量越来越大的情况下,内存数据库逐步被广泛应用起来。
应用场景
缓存数据:将高频访问的数据通过一定的机制加载到内存中,减少应用与数据库的连接,极大的提高了应用的性能;
内存计算:如果你的数据在内存中,那么你可以充分利用CPU的资源去做数据的计算、聚合、查询,而不用担心数据库是否能承受你的SQL查询。
主流的内存数据库
关系型内存数据库:H2、Apache Ignite、SQLite
H2:支持嵌入式,服务器和集群模式,支持内存数据库,纯Java开发
Apache Ignite:高性能、集成化、分布式的内存平台,他可以实时地在大数据集中执行事务和计算,可以像操作数据库一样,操作内存缓存
SQLite:小而精美,iOS和Android开发本地数据库的不二之选
Key-Value内存数据库:redis、Memcached
redis:支持String、Set、Hash、Sorted Set、List
Memcached:是一个简洁的、高性能的、分布式的内存对象缓存系统
传统数据库的内存数据库引擎:
MySQL Memory Engine
SQL Server 2016 In-Memory OLTP
传统数据库提供的内存数据库,将磁盘数据加载到内存中,利用查询引擎操作内存数据
总结
以上是个人整理的一些内存数据库,都是我们平常业务开发时候多少都有用到的内存数据库。了解每一种内存数据库的特性,结合它们的优缺点并应用于不同的业务场景,才是正确的编码之道。
内存数据库不是银弹,他也不能代替传统数据库,只有内存数据库与传统数据库(磁盘数据库)强强联手、互相补充才能发挥出数据存储技术的强大威力!
关系型 Mongodb、Hana、H2;
MongoDB 是一个基于分布式文件存储的数据库,介于关系型和非关系型之间,数据以文档的形式存在,文档以BSON格式存放。
Hana是德国SAP公司的产品,非开源、价格比较昂贵并且对服务器硬件配置要求比较高,国内用的比较少。
H2开源产品,优点小而快、查询语法简单,嵌入式和单独部署皆可。
KV型 Redis、Memcache、 Ignite、Guavacache;
Redis常被用做分布式缓存组件,支持的数据结构比较丰富,集群架构部署性能更强悍。
Memcache仅仅是作为第三方缓存组件使用,不能称之为数据库,支持的数据结构单一,支持集群部署。
Apache Ignite从名字就能看的出来,Apache的开源分布式产品,支持内嵌也支持单独部署,功能挺强大,有兴趣的可以看下官网,JVM堆外内存。
Guavacache仅仅是作为项目内部缓存使用,不能称之为数据库,内嵌式,占用JVM堆内存。
以上就是服务器端常用的内存数据库,大多数对持久化都支持的挺好;
但是一般关系型的用来存储数据并且持久化,KV型的用来做缓存,两者搭配来用。
以上仅个人观点,欢迎大家评论区留言指正。
1,SQLITE是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎。
2,ORACLE内存数据库系列BERKELEY DB和TIMES TEN,前者只支持嵌入式内存数据,后者是独立的内存优化数据库。
3,EXTREMEDB内存式实时数据库是为实时系统及嵌入式系统而特别设计的数据库。
4,H2 DATABASE 是THOMAS MUELLER提供的一个开源的,纯JAVA实现的关系数据库。
内存数据库从范型上可以分为关系型内存数据库和键值型内存数据库。
在实际应用中内存数据库主要是配合oracle或mysql等大型关系数据库使用,关注性能。
作用类似于缓存,并不注重数据完整性和数据一致性。
基于键值型的内存数据库比关系型更加易于使用,性能和可扩展性更好,因此在应用上比关系型的内存数据库使用更多。
比较FastDB、Memcached和Redis主流内存数据库的功能特性。
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客户端。