在网络技术和计算机技术广泛普及的今天,数据库已经成为IT领域最重要的课题之一。所谓数据库,是指一种用于存储数据的库存,可以为IT开发者访问数据提供极大的便利。目前很多管理系统基本都需要数据库支持。内存数据库是指通过内存实现数据访问的一种数据库。与从磁盘读取数据的数据库相比,内存数据库可以大大提高读取速度,减少数据库访问的时间。
传统数据库是我们经过严格定义后产生的关系数据库。所谓关系,是指数据库中各种实体和属性之间的关系。比如我们建立学生和课程管理的数据库,肯定会涉及到学生、课程和老师。师生之间通常是多对多的关系,即一个老师可以教很多学生,一个学生可以上很多老师教的课,而教师和课程之间一般是一对多的关系。传统数据库一般都是这样的关系。它通常适用于存储稳定和持久的数据。
而传统的数据库不方便限制数据处理的时间,会浪费时间。但是在一些对时间有特殊要求的行业,太慢的数据库读取速度会严重影响整个系统的运行效率。如果我们将数据直接存储在内存中,将会节省大量的时间和执行过程中产生的I/O。同时可以通过计算准确反映系统对应的工作时间和处理时间。这和传统数据库在处理机制上是不同的,也可以看做是工作时间上的不同。
另外,内存数据库中存储的数据一般是相对于传统数据库中存储的数据而言的,即内存数据库中存储的数据一般具有较低的时效性。通常,在内存数据库中,每个数据都有一个生效时间和有效期。如果数据存储时间或读取时间超过这个有效时间,原来的数据就会失效,会产生新的数据进行替换。这种特殊性决定了内存数据库只能在一些特殊的场合和特定的范围内使用。然而,在现实生活中,为了同时保证读取的效率和数据的稳定性,开发人员往往将传统数据库与内存数据库相结合。
什么是数据库?
主流的有FastDB,Memcached,Redis。
FastDB
1.FastDB不支持客户端-服务器架构,所以所有使用FastDB的应用必须运行在同一台主机上;
2.fastdb假设整个数据库都存在于RAM中,并根据这个假设优化查询算法和接口。
3.fastdb没有数据库缓冲区管理的开销,不需要在数据库文件和缓冲池之间传输数据。
4.整个fastdb的搜索算法和结构都是建立在假设所有数据都存在内存中的基础上的,所以数据交换的效率不会很高。
5.Fastdb支持事务、在线备份和系统崩溃后自动恢复。
6.fastdb是一个面向应用的数据库,数据库表由应用的类信息构成。
FastDB不支持Java API接口,这使得它不适合在这个应用程序中使用FastDB。
Memcached
Memcached是一个基于键值的开源缓存服务器系统,主要用作数据库的数据缓存,但不能完全称为数据库。
Memcached API使用32位循环冗余校验(CRC-32)计算键值,然后将数据分布在不同的机器上。当表满时,下一个新数据将被LRU机制替换。因为memcached通常只用作缓存系统,所以使用memcached的应用程序在回写较慢的系统(比如后端数据库)时,需要额外的过程来更新memcached中的数据。
Memcached有多种语言的客户端开发包,包括:Perl、PHP、JAVA、C、Python、Ruby、C#。
雷迪斯
Redis是一个高性能的键值数据库。redis的出现很大程度上弥补了memcached等keyvalue存储的不足,在某些场合可以对关系数据库起到很好的补充作用。它提供了C、Java、Python、Ruby、Erlang和PHP客户端。
作为一种新型的数据库,内存数据库的研究实际上还没有传统数据库成熟。如果要大规模使用,还需要一段时间的研究和探索。