内存数据库

内存数据库。顾名思义就是将数据放在内存中直接操作的数据库。

相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上訪问可以极大地提高应用的性能。同一时候。内存数据库抛弃了磁盘数据管理的传统方式,基于所有数据都在内存中又一次设计了体系结构,而且在数据缓存、高速算法、并行操作方面也进行了对应的改进。所以数据处理速度比传统数据库的数据处理速度要快非常多,一般都在10倍以上。内存数据库的最大特点是其“主拷贝”或“工作版本号”常驻内存,即活动事务仅仅与实时内存数据库的内存拷贝打交道。

内存数据库与传统数据库的异同

传统的数据库系统是关系型数据库,开发这样的数据库的目的,是处理永久、稳定的数据。

关系数据库强调维护数据的完整性、一致性。但非常难顾及有关数据及其处理的定时限制,不能满足工业生产管理实时应用的须要。由于实时事务要求系统能较准确地预报事务的执行时间。

对磁盘数据库而言,因为磁盘存取、内外存的数据传递、缓冲区管理、排队等待及锁的延迟等使得事务实际平均运行时间与估算的最坏情况运行时间相差非常大。假设将整个数据库或其基本的“工作”部分放入内存,使每一个事务在运行过程中没有I/O。则为系统较准确估算和安排事务的运行时间。使之具有较好的动态可预报性提供了有力的支持。同一时候也为实现事务的定时限制打下了基础。这就是内存数据库出现的主要原因。

内存数据库所处理的数据一般是“短暂”的,即有一定的有效时间,过时则有新的数据产生,而当前的决策推导变成无效。

所以,实际应用中採用内存数据库来处理实时性强的业务逻辑处理数据。

而传统数据库旨在处理永久、稳定的数据,其性能目标是高的系统吞吐量和低的代价,处理数据的实时性就要考虑的相对少一些。实际应用中利用传统数据库这一特性存放相对实时性要求不高的数据。

在实际应用中这两种数据库经常结合使用,而不是以内存数据库替代传统数据库。

常见内存数据库

SQLite

SQLite是一个开源内存数据库,实现了独立的,可嵌入的。零配置的SQL数据库引擎。

http://www.sqlite.com.cn/

Oracle TimesTen内存数据库

Oracle TimesTen是一个全新设计的内存数据库。

它使用基于行的关系模型(表、列、数据类型、索引等)实现数据存储。并使用SQL作为訪问语言。

它提供了很多API,而且支持Oracle PL/SQL。应用程序的訪问方式与其它关系数据库全然同样。

http://download.csdn.net/detail/xunzaosiyecao/7307121l

IBM SolidDB

IBM solidDB 能够提供每秒数万至数十万事务的吞吐率,而且始终能够获得微秒级的响应时间(或延时)。

http://www-01.ibm.com/software/data/soliddb/

SAP-HANA

http://help.sap.com/hana/

Sqlserver 2014 Hekaton内存数据库引擎

http://www.cnblogs.com/CareySon/p/3155753.html

其它參考资料:

http://www.searchdatabase.com.cn/guide/imdb.htm

http://hemeicun.blog.163.com/blog/static/11157304820113645525209/

时间: 2024-08-09 02:18:57

内存数据库的相关文章

In-Memory:内存数据库

在逝去的2016后半年,由于项目需要支持数据的快速更新和多用户的高并发负载,我试水SQL Server 2016的In-Memory OLTP,创建内存数据库实现项目的负载需求,现在项目接近尾声,系统运行稳定,写一篇博客,记录一下使用内存数据库的经验. SQL Server 2016的In-Memory OLTP,通俗地讲,是内存数据库,使用内存优化表(Memory-Optimized Table,简称MOT)来实现,MOT驻留在内存中,使用 Hekaton 内存数据库引擎访问.在查询MOT时,

内存数据库索引

记得早前第一份工作的时候,很得意自己能写非常庞大的存储过程,聊起天来就是怎样引用索引.怎么写sql快:想想那时候多好,容易满足,容易开心,开怀大笑! 还是在前年的时候,忙完一个大项目之后!刚好有点时间研究fastdb,因为早期没用商用数据库之前就是用的这个.后来发现并发能力的问题,才切换到商用数据库. 如果单从数据读写能力来看,fastdb无疑具有非常强的竞争力:我记得几年前测试fastdb查询能力就比timesten的速度快非常多,但是关键在于fastdb在进程并发的时候就变的很慢.因为fas

Altibase 内存数据库

数据库复制机制(Replication), Altibase内存数据库也有自己内置的复制机制,保证以下几点: (1)    数据备份(2)    负载平衡(load balancing)(3)    高可用性(high availability)和容错 Altibase 内存数据库具有两种复制方式,一种叫做Lazy模式(非同步),另一种叫做Eager模式(同步): CREATE REPLICATION replication_name WITH 'remote_host_ip', remote_

Redis源码分析(十八)--- db.c内存数据库操作

我们知道Redis数据库作为一个内存数据库,与memcached比较类似,基本的操作都是存储在内存缓冲区中,等到缓冲区中数据满后,在持久化到磁盘中.今天,我主要研究了对于redis中对于内存数据库的操作.与普通的数据操作比较,并没有什么特别多的其他的一些操作.下面是我分类出的一些API: /*----------------------------------------------------------------------------- * C-level DB API *-------

内存数据库中列转行的应用,h2中列转行,hsqldb中列转行

其实列转行是比较简单的用sum和decode函数就可以了,但是我遇到的项目,不知道数据谁设计的居然字段里面还设计成long类型,此long类型与java中的不同,oracle中的long是指可变长二进制数据,最长2G,哎没办法只好转换了. 以下是hsqldb的转换,用到了转换函数convert,可以将long类型的转换为double类型,其中d.value是long类型,status是int类型,所以value需要转换 SELECT P.NAME,P.ID, SUM(DECODE(D.K_NAM

内存数据库之Apache Ingite

上一篇文章,我们做了内存数据库的技术选型: 内存数据库技术选型 本文中,我们继续深入研究Apache Ignite,同时分享一些我们.Net的编码实践. 首先,Apache Ignite是一个内存数据组织是高性能的.集成化的以及分布式的内存平台,他可以实时地在大数据集中执行事务和计算,和传统的基于磁盘或者闪存的技术相比,性能有数量级的提升. 其中: Data Grid:Ignite内存数据网格是一个内存内的键值存储,他可以在分布式集群的内存内缓存数据. 它通过强语义的数据位置和关系数据路由,来降

再谈EF Core内存数据库单元测试问题

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:在用EF Core的内存数据库进行单元测试的时候遇到"无法访问已释放的对象"的错误怎么办? 之前在EF Core 1.0中使用Include的小技巧中简单谈到了使用EF Core内存数据库进行单元测试的方法.不过这个方法有个小问题,就是容易出现"无法访问已释放的对象"的错误. 在之前的示例代码中(http://git.oschina.net/ike/co

一个简单的NoSQL内存数据库—Berkeley DB基本操作的例子

一个简单的NoSQL内存数据库—Berkeley DB基本操作的例子 最近,由于云计算的发展,数据库技术也从结构式数据库发展到NoSQL数据库,存储模式从结构化的关系存储到现在如火如荼的key/value存储.其中Berkeley DB就是上述过程中的一个比较有代表性的内存数据库产品,数据库的操作是通过程序来实现的,而不是SQL语句.特别是当今数据不断动态增加的过程中,试图 通过数据切割来达到扩充的思路已经行不通了,因为事先不知道客户数据格式,因此服务提供商不可能进行数据切割.而无模式的key/

内存数据库中的索引技术

引言 传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称作磁盘数据库(DRDB: Disk-Resident Database).磁盘数据库需要频繁地访问磁盘来进行数据的操作,磁盘的读写速度远远小于CPU处理数据的速度,所以磁盘数据库的瓶颈出现在磁盘读写上. 基于此,内存数据库的概念被提出来了.内存数据库(MMDB:Main Memory Database,也叫主存数据库)[1],就是将数据全部或者大部分放在内存中进行操作的数据库管理系统,对查询处理.并发控制与恢复的算法和数据结构进行重

SQLite剖析之临时文件、内存数据库

一.7种临时文件    SQLite的一个不同特性是一个数据库由单个磁盘文件构成.这简化了SQLite的使用,因为移动或备份数据库只要拷贝单个文件即可.这也使得SQLite适合用作应用程序文件格式.但是,当在单个文件中存储一个数据库时,SQLite会在处理数据库的过程中使用许多临时文件.    SQLite目前使用7种不同类型的临时文件:    * 回滚日志(Rollback journals)    * 主日志(Master journals)    * SQL语句日志(Statement j