内存数据库_内存数据库缺点 - CSDN
精华内容
参与话题
  • 常用内存数据库介绍

    万次阅读 2016-10-09 19:55:30
    1. 内存数据库简介 1.1 概念 一、什么是内存数据库  传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称做磁盘数据库(DRDB:Disk-Resident Database)。磁盘数据库需要频繁地访问磁盘来进行数据的操作

    原文地址:http://blog.csdn.net/jackxinxu2100/article/details/6764530

    1.  内存数据库简介

    1.1           概念

    一、什么是内存数据库 
    传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称做磁盘数据库(DRDB:Disk-Resident Database)。磁盘数据库需要频繁地访问磁盘来进行数据的操作,由于对磁盘读写数据的操作一方面要进行磁头的机械移动,另一方面受到系统调用(通常通过CPU中断完成,受到CPU时钟周期的制约)时间的影响,当数据量很大,操作频繁且复杂时,就会暴露出很多问题。
        近年来,内存容量不断提高,价格不断下跌,操作系统已经可以支持更大的地址空间(计算机进入了64位时代),同时对数据库系统实时响应能力要求日益提高,充分利用内存技术提升数据库性能成为一个热点。
        在数据库技术中,目前主要有两种方法来使用大量的内存。一种是在传统的数据库中,增大缓冲池,将一个事务所涉及的数据都放在缓冲池中,组织成相应的数据结构来进行查询和更新处理,也就是常说的共享内存技术,这种方法优化的主要目标是最小化磁盘访问。另一种就是内存数据库(MMDB:Main Memory Database,也叫主存数据库)技术,就是干脆重新设计一种数据库管理系统,对查询处理、并发控制与恢复的算法和数据结构进行重新设计,以更有效地使用CPU周期和内存,这种技术近乎把整个数据库放进内存中,因而会产生一些根本性的变化。两种技术的区别如下表:

    内存数据库系统带来的优越性能不仅仅在于对内存读写比对磁盘读写快上,更重要的是,从根本上抛弃了磁盘数据管理的许多传统方式,基于全部数据都在内存中管理进行了新的体系结构的设计,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,从而使数据处理速度一般比传统数据库的数据处理速度快很多,一般都在10倍以上,理想情况甚至可以达到1000倍。
      而使用共享内存技术的实时系统和使用内存数据库相比有很多不足,由于优化的目标仍然集中在最小化磁盘访问上,很难满足完整的数据库管理的要求,设计的非标准化和软件的专用性造成可伸缩性、可用性和系统的效率都非常低,对于快速部署和简化维护都是不利的。

    2.  内存数据库历史和发展

    一、雏形期 从上个世纪60年代末到80年代初。在这个时期中,出现了主存数据库的雏形。1969年IBM公司研制了世界上最早的数据库管理系统------基于层次模型的数据库管理系统IMS,并作为商品化软件投入市场。在设计IMS时,IBM考虑到基于内存的数据管理方法,相应推出了IMS/VS Fast Path。Fast Path是一个支持内存驻留数据的商业化数据库,但它同时也可以很好地支持磁盘驻留数据。在这个产品中体现了主存数据库的主要设计思想,也就是将需要频繁访问,要求高响应速度的数据直接存放在物理内存中访问和管理。在这个阶段中,包括网状数据库、关系数据库等其他各种数据库技术也都逐渐成型。 

    二、技术理论成熟期 

    1984年,D J DeWitt等人发表了《主存数据库系统的实现技术》一文。第一次提出了Main Memory Database(主存数据库)的概念。预言当时异常昂贵的计算机主存价格一定会下降,用户有可能将大容量的数据库全部保存在主存中,提出了AVL树、哈希算法、主存数据库恢复机制等主存数据库技术的关键理论,为主存数据库的发展指出了明确的方向 。 1984年,D J DeWitt等人提出使用非易逝内存或预提交和成组提交技术作为主存数据库的提交处理方案,使用指针实现主存数据库的存取访问。 1985年,IBM推出了IBM 370上运行的OBE主存数据库 1986年,RB Hagman提出了使用检查点技术实现主存数据库的恢复机制。威斯康星大学提出了按区双向锁定模式解决主存数据库中的并发控制问题。并设计出MM-DBMS主存数据库。贝尔实验室推出了DALI主存数据库模型。 1987年,ACM SIGMOD会议中提出了以堆文件(HEAP FILE)作为主存数据库的数据存储结构。Southern Methodist大学设计出MARS主存数据库模型。 1988年普林斯顿大学设计出TPK主存数据库。 1990年普林斯顿大学又设计出System M主存数据库。 

    三、产品发展期和市场成长期 

    随着互联网的发展,越来越多的网络应用系统需要能够支持大用户量并发访问、高响应速度的的数据库系统,主存数据库市场成熟 半导体技术快速发展,半导体内存大规模生产,动态随机存取存储器(DRAM)的容量越来越大,而价格越来越低,这无疑为计算机内存的不断扩大提供了硬件基础,使得主存数据库的技术可行性逐步成熟 1994年美国OSE公司推出了第一个商业化的,开始实际应用的主存数据库产品Polyhedra 1998年德国SoftwareAG推出了Tamino Database。 1999年日本UBIT会社开发出XDB主存数据库产品。韩国Altibase推出Altibase 2000年奥地利的QuiLogic公司推出了SQL-IMDB 2001年美国McObject推出eXtremeDB。加拿大Empress公司推出EmpressDB

    四、几种主存技术应用的比较 

    第一代:用户定制的主存数据库。通过应用程序来管理内存和数据;不支持SQL语句, 不提供本地存储, 没有数据库恢复技术;性能好但很难维护和在别的应用中不能使用;应用在实时领域比如工厂自动化生产。 

    第二代:简单功能的内存数据库。能够快速处理简单的查询;支持部分的 SQL语句和简单的恢复技术;主要目的是能够快速处理大量事务;针对简单事务处理领域,尤其是交换机, 移动通信等。 

    第三代:通用的主存数据库。针对传统的商业关系型数据库领域,能够提供更高的性能、通用性以及稳定性;提供不同的接口来处理复杂的SQL语句和满足不同的应用领域;可以应用在计费、电子商务、在线安全领域,几乎包括磁盘数据库的所有应用领域。 

    三、目前几种常见的通用内存数据库 

    eXtremeDB:eXtremeDB实时数据库是McObject公司的一款特别为实时与嵌入式系统数据管理而设计的数据库,只有50K到130K的开销,速度达到微秒级。eXtremeDB完全驻留在主内存中,不使用文件系统(包括内存盘)。eXtremeDB采用了新的磁盘融合技术,将内存拓展到磁盘,将磁盘当做虚拟内存来用,实时性能保持微秒级的同时,数据管理量在32BIT下能达到20G。 

    Oracle TimesTen:Oracle TimesTen是Oracle从TimesTen公司收购的一个内存优化的关系数据库,它为应用程序提供了实时企业和行业(例如电信、资本市场和国防)所需的即时响应性和非常高的吞吐量。Oracle TimesTen可作为高速缓存或嵌入式数据库被部署在应用程序层中,它利用标准的 SQL 接口对完全位于物理内存中的数据存储区进行操作。 

    SolidDB:Solid Information Technology 成立于 1992 年,全球总部位于加州Cupertino, Solid数据管理平台将基于内存和磁盘的全事务处理数据库引擎、载体级高可用性及强大的数据复制功能紧密地融为一体。

    ALTIBASE公司从1999年就一直致力于内存数据库软件和其应用的开发,提供高性能和高可用性的软件解决方案。特别适合通信、网上银行、证券交易、实时应用和嵌入式系统领域。目前占据80%以上内存数据库市场,可以说是当今数据库软件技术的领导者。目前Altibase在国内成功案例也比较多,尤其是在电信行业,已经得到了广泛认可.

    4.  常用内存数据库

    4.1           SQLite

    SQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎。特性包括:

    • 事务操作是原子,一致,孤立,并且持久的(ACID),即使在系统崩溃和电源故障之后。
    • 零配置——不需要安装和管理。
    • 实现了绝大多数SQL92标准。
    • 整个数据库存储在一个单一的文件中。
    • 数据库文件可以在不同字节序的机器之间自由地共享。
    • 支持最大可达2T的数据库。 (241 字节)
    • 字符串和BLOB类型的大小最大可达 2G 字节(231字节)。
    • 小的代码: 完整配置的少于250KB,忽略一些可选特性的少于150KB。
    • 在大多数常见操作上比流行的客户/服务器数据库引擎更快
    • 简单,易于使用的API
    • 内建TCL绑定。 另外提供可用于许多其他语言的绑定。
    • 具有良好注释的源代码,95%经过测试。
    • 独立:没有外部依赖。
    • 源代码位于公共域。 可用于任何用途。

    SQLite发行版包含一个独立的命令行访问程序(sqlite),可用于管理SQLite数据库,并适合作为一个如何使用SQLite库的例子。

     

    License:      SQLite使用Public domain授权(注),对于个人使用和商业使用都是免费的。

     

    技术上的优点和特性 SQLite是一个轻量级、跨平台的关系型数据库。

    ◇轻量级

    先说它的第一个特色:轻量级。想必SQLite的作者很看重这个特性,连它的Logo都是用的“羽毛”,来显摆它的轻飘飘。SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。

     

    ◇绿色软件

    SQLite的另外一个特点是绿色:它的核心引擎本身不依赖第三方的软件,使用它也不需要“安装”。所以在部署的时候能够省去不少麻烦。
    ◇单一文件

    所谓的“单一文件”,就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。

    ★技术上的缺点和不足
    ◇并发访问的锁机制 SQLite在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错。
    SQL标准支持不全 在它的官方网站上,具体列举了不支持哪些SQL92标准。我个人感觉比较不爽的是不支持外键约束。
    ◇网络文件系统(以下简称NFS) 有时候需要访问其它机器上的SQLite数据库文件,就会把数据库文件放置到网络共享目录上。这时候你就要小心了。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏)。原因据说是由于某些NFS的文件锁实现上有Bug。
    ★编程语言接口 SQLite支持很多种语言的编程接口。这对于我这种喜欢混用多种编程语言的人来说,是很爽的。下面我大概介绍一下。
    ◇C/C++ 由于SQLite本身是C写的,它自带的API也是C接口的。所以C/C++用起来最直接了。假如你不喜欢面向过程的C API风格,可以另外找个C++的包装库。想重新发明轮子的同学,也可以自己包装一个。 ◇Java 如果要用Java访问SQLite,可以通过SQLite的JDBC驱动,或者通过专门的SQLite包装库。我个人建议走JDBC方式,万一将来要换数据库,代码就不用大改。 ◇Python pysqlite是Python操作SQLite的首选。从Python 2.5开始,它已经被整合到Python的标准库中。看来Python社区还是蛮喜欢SQLite嘛。 ◇.Net 对于喜欢.Net的同学,可以通过SQLite的ADO.NET驱动来访问。 ◇Ruby Ruby可以通过SQLite-Ruby操作SQLite数据库,不过我没用过。 ◇Perl 在CPAN上有DBD::SQLite,不过我也没用过。
    ★一些非技术的参考因素

    需要根据“如何选择开源项目”里面提到的几个参考因素,再评估一下。 ◇授权协议(License) SQLite使用的是Public Domain协议,这是最爽一种,可以放心大胆地用。 ◇用户的普及程度 最近这几年,使用SQLite的人越来越多。包括一些大公司也开始把它整合到产品中(比如Google的Gears、Apple的Safari、Adobe的AIR)。 ◇开发的活跃程度 如果到SQLite的Change Log上大致了解一下,可以看出最近5年基本上每1-2个月都会有更新。说明开发的活跃度还是非常高的。

    SQLite不同于其他大部分的SQL数据库引擎,因为它的首要设计目标就是简单化:

    • 易于管理
    • 易于使用
    • 易于嵌入其他大型程序
    • 易于维护和配置

    许多人喜欢SQLite因为它的小巧和快速. 但是这些特性只是它的部分优点, 使用者还会发现SQLite是非常稳定的. 出色的稳定性源于它的简单, 越简单就越不容易出错. 除了上述的简单、小巧和稳定性外, 最重要的在于SQLite力争做到简单化.

    简单化在一个数据库引擎中可以说是一个优点, 但也可能是个缺点, 主要决定于你想要做什么. 为了达到简单化, SQLite省略了一些人们认为比较有用的特性, 例如高并发性、 严格的存取控制、丰富的内置功能、 存储过程、复杂的SQL语言特性、 XML以及Java的扩展, 超大的万亿级别的数据测量等等. 如果你需要使用上述的这些特性并且不介意它们的复杂性, 那么SQLite也许就不适合你了. SQLite没有打算作为一个企业级的数据库引擎, 也并不打算和Oracle或者PostgreSQL竞争.

    仅凭经验来说SQLite适用于以下场合: 当你更看中简单的管理、使用和维护数据库, 而不是那些企业级数据库提供的不计其数的复杂功能的时候,使用SQLite是一个比较明智的选择. 事实也证明, 人们在许多情况下已经清楚的认识到简单就是最好的选择.

    4.1.1   SQLite最佳试用场合

    ·         网站

    作为数据库引擎SQLite适用于中小规模流量的网站(也就是说, 99.9%的网站). SQLite可以处理多少网站流量在于网站的数据库有多大的压力. 通常来说, 如果一个网站的点击率少于100000次/天的话, SQLite是可以正常运行的. 100000次/天是一个保守的估计, 不是一个准确的上限. 事实证明, 即使是10倍的上述流量的情况下SQLite依然可以正常运行.

    ·         嵌入式设备和应用软件

    因为SQLite数据库几乎不需要管理, 因此对于那些无人值守运行或无人工技术支持的设备或服务, SQLite是一个很好的选择. SQLite能很好的适用于手机, PDA, 机顶盒, 以及其他仪器. 作为一个嵌入式数据库它也能够很好的应用于客户端程序.

    ·         应用程序文件格式

    SQLite作为桌面应用程序的本地磁盘文件格式取得了巨大成功.例如金融分析工具、CAD 包、档案管理程序等等. 一般的数据库打开操作需要调用sqlite3_open()函数,并且标记一个显式本地事务的起始点(BEGIN TRANSACTION)来保证以独占的方式得到文件的内容. 文件保存将执行一个提交(COMMIT)同时标记另一个显式本地事务起始点. 这种事务处理的作用就是保证对于应用程序数据文件的更新是原子的、持久的、独立的和一致的.

    数据库里可以加入一些临时的触发器,用来把所有的改变记录在一张临时的取消/重做日志表中. 当用户按下取消/重做按钮的时候这些改变将可以被回滚. 应用这项技术实现一个无限级的取消/重做功能只需要编写很少的代码.

    ·         替代某些特别的文件格式

    许多程序使用fopen(), fread(), 或 fwrite()函数创建和管理一些自定义的文件用来保存数据. 使用SQLite替代这些自定义的文件格式将是一种很好的选择.

    ·         内部的或临时的数据库

    对于那些有大量的数据需要用不同的方式筛选分类的程序, 相对于编写同样功能的代码, 如果你把数据读入一个内存中的SQLite数据库, 然后使用连接查询和ORDER BY子句按一定的顺序和排列提取需要的数据, 通常会更简单和快速. 按照上述的方法使用内嵌的SQLite数据库将会使程序更富有灵活性, 因为添加新的列或索引不用重写任何查询语句.

    ·         命令行数据集分析工具

    有经验的SQL用户可以使用SQLite命令行程序去分析各种混杂的数据集. 原是数据可以从CSV(逗号分隔值文件)文件中导入, 然后被切分产生无数的综合数据报告. 可能得用法包括网站日志分析, 运动统计分析, 编辑规划标准, 分析试验结果.

    当然你也可以用企业级的客户端/服务器数据库来做同样的事情. 在这种情况下使用SQLite的好处是: SQLite的部署更为简单并且结果数据库是一个单独的文件, 你可以把它存储在软盘或者优盘或者直接通过email发给同事.

    ·         在Demo或测试版的时候作为企业级数据库的替代品

    如果你正在编写一个使用企业级数据库引擎的客户端程序, 使用一个允许你连接不同SQL数据库引擎的通用型数据库后台将是很有意义的. 其更大的意义在于将SQLite数据库引擎静态的连接到客户端程序当中,从而内嵌SQLite作为混合的数据库支持. 这样客户端程序就可以使用SQLite数据库文件做独立的测试或者验证.

    ·         数据库教学

    因为SQLite的安装和使用非常的简单(安装过程几乎忽略不计, 只需要拷贝SQLite源代码或sqlite.exe可执行文件到目标主机, 然后直接运行就可以) 所以它非常适合用来讲解SQL语句. 同学们可以非常简单的创建他们喜欢的数据库, 然后通过电子邮件发给老师批注或打分. 对于那些感兴趣怎样实现一个关系型数据库管理系统(RDBMS)的高层次的学生, 按照模块化设计且拥有很好的注释和文档的SQLite源代码, 将为他们打下良好的基础. 这并不是说SQLite就是如何实现其他数据库引擎的精确模型, 但是很适合学生们了解SQLite是如何快速工作的, 从而掌握其他数据库系统的设计实现原则.

    ·         试验SQL语言的扩展

    SQLite简单且模块化的设计使得它可以成为一个用来测试数据库语言特性或新想法的优秀的原型平台

     

    4.1.2   哪些场合适合使用其他的关系型数据库管理系统(RDBMS)

    ·         客户端/服务器程序

    如果你有许多的客户端程序要通过网络访问一个共享的数据库, 你应当考虑用一个客户端/服务器数据库来替代SQLite. SQLite可以通过网络文件系统工作, 但是因为和大多数网络文件系统都存在延时, 因此执行效率不会很高. 此外大多数网络文件系统在实现文件逻辑锁的方面都存在着bug(包括Unix 和windows). 如果文件锁没有正常的工作, 就可能出现在同一时间两个或更多的客户端程序更改同一个数据库的同一部分, 从而导致数据库出错. 因为这些问题是文件系统执行的时候本质上存在的bug, 因此SQLite没有办法避免它们.

    好的经验告诉我们, 应该避免在许多计算机需要通过一个网络文件系统同时访问同一个数据库的情况下使用SQLite.

    ·         高流量网站

    SQLite通常情况下用作一个网站的后台数据库可以很好的工作. 但是如果你的网站的访问量大到你开始考虑采取分布式的数据库部署, 那么你应当毫不犹豫的考虑用一个企业级的客户端/服务器数据库来替代SQLite.

    ·         超大的数据集

    当你在SQLite中开始一个事务处理的时候(事务处理会在任何写操作发生之前产生, 而不是必须要显示的调用BEGIN...COMMIT), 数据库引擎将不得不分配一小块脏页(文件缓冲页面)来帮助它自己管理回滚操作. 每1MB的数据库文件SQLite需要256字节. 对于小型的数据库这些空间不算什么, 但是当数据库增长到数十亿字节的时候, 缓冲页面的尺寸就会相当的大了. 如果你需要存储或修改几十GB的数据, 你应该考虑用其他的数据库引擎.

    ·         高并发访问

    SQLite对于整个数据库文件进行读取/写入锁定. 这意味着如果任何进程读取了数据库中的某一部分, 其他所有进程都不能再对该数据库的任何部分进行写入操作. 同样的, 如果任何一个进程在对数据库进行写入操作, 其他所有进程都不能再读取该数据库的任何部分. 对于大多数情况这不算是什么问题. 在这些情况下每个程序使用数据库的时间都很短暂, 并且不会独占, 这样锁定至多会存在十几毫秒. 但是如果有些程序需要高并发, 那么这些程序就需要寻找其他的解决方案了.

    方面

    具体要求

    必要条件

    详细描述

    License

    是否收费

     

    免费使用

    是否开源

     

    开源

    是否有技术支持

     

    主要是社区支持,如果需要专业支持需要购买

    商业目的的分发版本是否仍要收费

    免费

    其他

      

    性能

    数据容量支持100000条以上记录

    支持

    并发查询处理能力

     

    SQLite在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错。

    查询速度

     

    修改速度

     

    平台支持

    32/64位

     

    全部支持

    Linux/window/UNIX/mobile

     

    支持Linux/Mac OS/Windows

    运行方式支持

    支持嵌入式

     

    支持

    支持独立运行

     

    不支持

    连接方式支持

    支持ODBC

     

    默认不支持,必须通过第三方的ODBC驱动

    支持JDBC

     

    默认不支持,必须通过第三方的JDBC驱动

    支持内存访问

     

    通过c接口(专用API)

    支持网络访问

     

    不支持

    SQL支持

    支持SQL

    支持

    支持Index,Trigger,

    Constrains,Views

     

    支持,有资料说其不支持外键约束。

    管理界面

    支持管理界面

     

    支持CLI

    管理界面友好程度

     

    较差

     

     

    4.2           Altibase

    Altibase™内存数据库管理系统(DBMS),内存数据管理系统的最新技术,是一个在事务优先的环境中提供高性能和高可用性的软件解决方案。Altibase提供极限性能、容错能力和事务管理的方便性,特别是在通信、网上银行、证券交易、实时应用和嵌入式系统领域。Altibase能够最大限度的发挥数据库服务系统的潜力,使用Altibase能大大增强您公司的数据服务器的处理能力。

    Altibase™内存DBMS为需要容错服务的系统提供实时数据库复制的功能。采用Altibase数据库复制的系统可以实现高性能、高可用性、数据库一致性、负载平衡和系统可伸缩性。如果您希望您的业务能够实现最大的成功,请在您的事务优先的系统中使用我们的Altibase数据库复制解决方案。

    资料比较少,且需要商业License,没有详细去研究

    4.3           Oracle 内存数据库系列 Berkeley DB 和 TimesTen

    Oracle是最重要的商业数据库产品提供商,它也有内存数据库的产品系列:主要就是Oracle Berkeley DB 和 Times Ten.前者是只支持嵌入式内存数据,后者是独立的内存优化数据库。

    4.3.1     Oracle Berkeley DB

        Oracle Berkeley DB是Oracle 收购了开源数据库厂商后推出的产品,其前身是Berkeley DB。它有开源版本,但且对于开源软件免费。商业版本是要付费。

    Oracle Berkeley DB 系列的可嵌入开源数据库为开发人员提供了无需管理的快速、可靠的本地持久性。Oracle Berkeley DB 系列通常部署为“前沿”数据库,为不需要 SQL 的应用程序用例提供很高的性能、可靠性、可伸缩性以及可用性。

    Oracle Berkeley DB 产品系列

    —     Berkeley DB — 事务处理式存储引擎,用于基本键/值数据结构中的非类型化数据 — 新增!版本 4.7 现已推出

    —     针对 Java 环境优化的纯 Java 版 Berkeley DB — 新增!版本 3.3

    —     Berkeley DB XML — 原生 XML 数据库,可基于 XQuery 访问容器中存储的文档,并根据其内容进行索引 — 新增!版本 2.4 现已推出

    4.3.2     Oracle TimesTen

    Oracle 内存数据库 TimesTen 是一个针对内存进行了优化的关系数据库,它为应用程序提供了当今实时企业和行业(如电信、资本市场和国防)所需的即时响应性和非常高的吞吐量。Oracle 内存数据库 TimesTen 作为独立或嵌入式数据库部署在应用层中,利用标准的 SQL 接口对完全位于物理内存中的数据库进行操作。它也可以用作 Oracle 数据库的内存中数据库缓存,以改进用户应用程序的响应时间和吞吐量。

    4.4           eXtremeDB

    eXtremeDB内存式实时数据库是为实时系统及嵌入式系统而特别设计的数据库。与同类产品不同,eXtremeDB不是通过 对企业数据库面向实时嵌入式应用进行剪裁而来;而是总结了30年来McObject公司在编译器、实时编程、数据管理、内核级驱 动软件等领域的经验,面向实时嵌入式应用从头开发的最新实时数据管理技术。

    eXtremeDB满足了您对实时数据库的一切期待:高级数据定义语言、并行访问、基于交易及灵活的索引… …等等。不仅如此,出乎您的意外,eXtremeDB在紧凑的引擎中还提供诸如事件触发、目标历史等等功能。

    eXtremeDB嵌入式数据库满足更多的实时开发的要求。

    ·                     最快的内存数据库。

    ·                     极小尺寸和极小的内存消耗

    ·                     多种索引支持

    ·                     高可用性-组合选项

    ·                     非常灵活的数据存储: 内存式,磁盘式或混合式

    ·                     多种应用接口: 两种 SQL, 两种更快的原始接口

    ·                     几乎牢不可破 -

    又一个商业内存数据库产品,这个特点是实时数据库,号称最快。


    4.5           H2 Database

           h2是Thomas Mueller提供的一个开源的、纯java实现的关系数据库,官方网站:http://www.h2database.com/html/main.html

    它的主要特性是:

    • 非常速的数据库引擎
    • 开源、免费数据库
    • 支持 JDBC和ODBC API,支持SQL
    • 支持嵌入式,服务器和集群模式。支持内存数据库。
    • 提供基于浏览器的管理控制台
    • 整个应用本身只有1MB左右。

    其他特性还包括

    • 基于磁盘或内存的数据库、表,支持只读数据库、临时表。
    • 两段式事务支持
    • 支持多个连接。表级别的锁。
    • 基于成本的优化,为复杂查询使用遗传算法,零管理。
    • 滚动的、可修改的result set支持。支持大结果集、外部结果排序。
    • 加密数据库(AES或XTEA),SHA-256密码加密。

    性能比较(摘自h2database网站)

    嵌入模式下H2的性能比较

    Test Case

    Unit

    H2

    HSQLDB

    Derby

    Simple: Init

    ms

    610

    657

    3187

    Simple: Query (random)

    ms

    297

    312

    1828

    Simple: Query (sequential)

    ms

    203

    266

    1766

    Simple: Update (random)

    ms

    1078

    1484

    22031

    Simple: Delete (sequential)

    ms

    234

    281

    7407

    Simple: Memory Usage

    MB

    6

    7

    11

    BenchA: Init

    ms

    859

    438

    4047

    BenchA: Transactions

    ms

    5266

    2875

    17500

    BenchA: Memory Usage

    MB

    9

    14

    10

    BenchB: Init

    ms

    4016

    2687

    16875

    BenchB: Transactions

    ms

    2609

    3282

    4250

    BenchB: Memory Usage

    MB

    9

    10

    8

    BenchC: Init

    ms

    891

    594

    5766

    BenchC: Transactions

    ms

    4359

    75438

    11718

    BenchC: Memory Usage

    MB

    9

    18

    9

    Executed statements

    #

    594255

    594255

    594255

    Total time

    ms

    20422

    88314

    96375

    Statements per second

    #

    29098

    6728

    6166

     

    .Net使用H2
      1. 嵌入式应用。有一个项目在为.Net使用H2,使用CLI重新编译H2。还没有深入关注。
      2. ODBC。但性能一般。

    4.5           其他内存数据库

    包括Derby, HSQLDB等.

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------

    In-memory database in wikipedia: (http://en.wikipedia.org/wiki/In-memory_database)

    Products

    Product name id="iframe_0.17031436087563634" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://bits.wikimedia.org/skins-1.17/common/images/sort_none.gif?_=2847067%22%20style=%22border:none;max-width:1108px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.17031436087563634',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-style: none; border-width: initial; width: 0px; height: 0px;"> License id="iframe_0.7553614571224898" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://bits.wikimedia.org/skins-1.17/common/images/sort_none.gif?_=2847067%22%20style=%22border:none;max-width:1108px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.7553614571224898',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-style: none; border-width: initial; width: 0px; height: 0px;"> Description id="iframe_0.11256076698191464" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://bits.wikimedia.org/skins-1.17/common/images/sort_none.gif?_=2847067%22%20style=%22border:none;max-width:1108px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.11256076698191464',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-style: none; border-width: initial; width: 0px; height: 0px;">
    Adaptive Server Enterprise (ASE) 15.5 Proprietary enterprise database from Sybase)[4]
    Apache Derby Apache License 2.0 Java RDBMS
    Altibase Proprietary has in-memory and disk table; HYBRID DBMS
    BlackRay GNU General Public Licence (GPLv2) and BSD License  
    CSQL GNU General Public Licence or proprietary  
    Datablitz Proprietary DBMS
    Eloquera Proprietary In-memory, In-memory:persist modes
    eXtremeDB commercial product DBMS, also check out its open source PERST dbms.
    FleetDB MIT NOSQL db with Writing to an append-only log to provide durability.
    H2 Mozilla Public License or Eclipse Public License has a memory-only mode
    HSQLDB BSD license has a memory-only mode
    IBM TM1 Proprietary in-memory BI and data analysis
    InfoZoom Proprietary in-memory BI and data analysis
    KDB Proprietary DBMS, also supports disk based data
    membase Apache License NoSQL, hybrid
    MicroStrategy   in-memory BI for MicroStrategy 9
    MonetDB MonetDB License  
    MySQL GNU General Public License or proprietary has a cluster server which uses a main-memory storage engine
    Oracle Berkeley DB Sleepycat License can be configured to run in memory only
    Panorama   for Windows and Macintosh, both single user and server versions
    ParAccel Proprietary in-memory, columnar, relational, ACID-compliant; disk-based mode as well
    Polyhedra IMDB Proprietary relational, supports High-Availability; acquired in 2001 by ENEA
    QlikView   BI-tool developed by QlikTech
    RDM Embedded Proprietary including hybrid
    RDM Server Proprietary including hybrid
    Redis BSD NoSQL
    solidDB by IBM   including hybrid, HSB-based HA, Shared memory, embedded, XA, etc.
    SAP HANA database Proprietary Database engine of the SAP In-Memory Appliance (SAP HANA) produced by SAP AG
    SQLite Public domain hybrid, RAM and disk dbs can be used together
    Starcounter   in-memory object relational dbms
    TimesTen by Oracle   in memory only or as a cache for Oracle Database
    Vertipaq Proprietary Microsoft PowerPivot and Microsoft Analysis Services in-memory BI engine
    VoltDB GNU General Public License v3 in-memory
    TREX   search engine in the SAP NetWeaver integrated technology platform produced bySAP AG
    Xcelerix byFrontex   commercial product
    展开全文
  • 今天,我们通过DB Engines Ranking公认比较权威的数据库排行,对公认最为活跃的10款典型内存数据库进行对比。10款典型数据库简单对比在开源产品中,Redis...
        

    640?wx_fmt=jpeg

    640?wx_fmt=gif&wxfrom=5&wx_lazy=1

    今天,我们通过DB Engines Ranking公认比较权威的数据库排行,对公认最为活跃的10款典型内存数据库进行对比。

    640?wx_fmt=jpeg

    10款典型数据库简单对比


    在开源产品中,Redis和Memcached是最受欢迎的两款键值对内存数据库;而SQLite是最受欢迎的关系型内存数据库。表中大部分的关系型内存数据库为商用数据库,其中热度最高的是SAP HANA。


    在1995年,发布第一版的Oracle TimesTen数据库仍然在榜上活跃。2014年新发布Apache Ignite兼容键值和关系型数据结构,热度正稳步攀升。


    事务支持方面,大部分的关系型内存数据库称可以支持ACID,但都需要在性能上作出妥协。具体可参考表2中的信息。

     

    内存数据库选型建议


    技术服务于业务,内存数据库的选型应首先遵循业务场景的需求。业务特性决定了数据的应用特性,包括数据量、并发度、读写特性、一致性、响应时间、操作复杂度、业务连续性等要求,对应数据库的一致性、容错性、扩展性、安全性等技术要求。


    在做内存数据库的选型前,建议先梳理业务需求并进行量化;再将核心数据应用特性映射成数据库技术要求;最后按筛选出的技术要求进行选型。


    1.技术因素


    按照技术要求进行内存数据库选型时,可主要考察业务的性能、一致性要求和SQL兼容性三个因素。


    1、业务是否有很高的性能要求?一般有高并发、低时延读写要求的业务,如游戏实时排行、直播粉丝关注等,建议选择内存数据库。


    2、业务数据是否要求强一致性?如果业务对数据的可靠性和一致性要求较高、需要ACID级别的事务支持,则建议使用MySQL等传统的关系型数据库。但需要注意的是,强一致性的要求会对数据库的性能造成一定的影响;如果需要兼具高性能和强一致性,则需要在应用架构层面进行优化,单靠数据库的能力还无法实现。


    3、数据处理是否要求SQL兼容性?在高性能要求的场景下,业务中如果数据结构固定、有复杂的关联计算要求,或是需要SQL语法支持的情况,建议使用关系型内存数据库;对于数据结构多变、扩展性要求高、数据模型和操作简单的场景,建议使用键值对内存数据库。


    除了这三条考察指标,还可以结合数据容量、成本、扩展性、可维护性等需求进行综合考量。

     

    2.非技术因素


    上述选型方法主要考量的是技术因素,除此以外还可以结合实际情况,引入一些其他维度的考量,进行综合评估,最终挑选出适合的产品。包括但不限于以下维度:


    1)生态成熟度。指数据库产品的状态,包括各种配套工具、技术架构成熟度、代码质量、开发模式、社区建设、商业支持服务、版权协议等。


    2)应用架构适配度。指应用架构对数据库架构的兼容性、以及适配改造友好度,包括技术架构适配、开发语言适配等。


    3)团队适应度。指开发团队、维护团队对数据库的熟悉程度、偏好程度、学习成本以及配套运维工具等。

     

    硬件选型建议


    内存数据库是为高性能而存在的,适合才是最好的,因此在硬件选型上建议根据业务情况综合考虑成本和收益。


    1.如何选择存储


    作为内存数据库,硬件选型的时候,优先考虑的就是大内存,比如:256GB或512GB。如果在技术选型的时候,业务上要求有持久化的功能,那么在硬件选型的时候需要考虑到磁盘的IOPS,比如选择了Redis,需要做RDB+AOF的持久化,那么硬盘最好是SSD或者PCI-e。


    如果有足够的预算,并且业务对内存数据的访问量不是非常大,响应时间没有那么高,那么也可以考虑用Persistent Memory(这种新技术的性能是物理内存性能的70-80%)。


    还有一种特别的使用场景,那就是冷热数据分离,热数据存储在内存中,冷数据存储在磁盘上,这种常常会涉及到冷热数据的相互交换,那么这种情况,就需要磁盘要有足够高的性能,PCI-e最佳。


    2.如何选择网络


    千兆网卡即可满足大部分需求,如果预算充足并希望达到极致的性能,可选择万兆交换机和万兆网卡。


    3.如何选择CPU


    基于X86架构的CPU单核心性能更高,能适配大部分的内存数据库产品,成本也相应更高;ARM架构的CPU成本更低廉,但可以适配的内存数据库产品有限。


    在6月4日下午的大会上,重磅发布<内存数据库白皮书>,中国信息通信研究院云计算与大数据研究所王妙琼对白皮书进行了解读。


    内存数据库白皮书

    • https://pan.baidu.com/s/150Uhd6AFEFtlW5on9zLjNQ

    640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1


    白皮书还从技术和管理两个角度提出了产品选型和硬件选型建议,并总结了内存数据库的发展趋势。


    推荐阅读(2019精华):



    温馨提示:

    请识别二维码关注公众号,点击“阅读原文”获取更多云计算、微服务架构等技术资料总结

    640?wx_fmt=jpeg

    640?wx_fmt=gif&wxfrom=5&wx_lazy=1

    展开全文
  • 内存数据库、关系型数据库和非关系型数据库 一、内存数据库、关系型数据库和非关系型数据库 1.个人观点: 二、内存数据库(Redis,MongoDb,SQLite,Oracle等): 三、Raft分布式协议: 四、Redis出现宕机,...

    内存数据库、关系型数据库和非关系型数据库

    一、内存数据库、关系型数据库和非关系型数据库

    1.个人观点:

    二、内存数据库(Redis,MongoDb,SQLite,Oracle等):

    三、Raft分布式协议:

    四、Redis出现宕机,如何保证数据不丢失?


    一、内存数据库、关系型数据库和非关系型数据库

    数据库类型 特性 优点 缺点

    关系型数据库

    SQLite,Oracle,MySQL等

    1,关系型数据库,是指采用了关系模型来组织数据的数据库;
    2,关系型数据库的最大特点就是事务的一致性 ;
    3,简单来说,关系模型的指就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
    1,容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状,层次等其他模型来说更容易理解;
    2,使用方便:通用的SQL语言使得操作关系型数据库非常方便;
    3,易于维护:丰富的完整性(实体完整性,参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;
    4,支持SQL可用于复杂的查询 
    1,为了维护一致性所付出的巨大代价就是其读写性能比较差;
    2,固定的表结构;
    3,高并发读写不行 
    4,海量数据的高效率读写

    非关系型数据库

    MongoDB,Redis,HBase等

    1,使用键值对存储数据 ;
    2,分布式 ;
    3,一般不支持ACID特性 ;
    如图4所示,非关系型数据库严格上不是一种数据库,的英文应该一种数据结构化存储方法的集合
    1,无需经过SQL层的解析,读写性能很高 ;
    2,基于键值对数据没有耦合性,容易扩展;
    3,存储数据的格式:nosql的的的存储格式是键,值形式,文档形式,图片形式等等,文档形式,图片形式等等,而关系型数据库则只支持基础类型
    1,不提供SQL支持,学习和使用成本较高;
    2,无事务处理,附加功能双向和报表等支持也不好;

    1.个人观点:

    关系型数据库:在于关系,对数据操作(比如数据的增删改查)之前需要考虑关系,具备ACID特性(ACID是原子原子性,一致性一致性,隔离性隔离性,耐用性持久性),高并发能力一般不行

     

    二、内存数据库(Redis,MongoDb,SQLite,Oracle等)

    基于内存,读写速度快,数据有可能会丢失,丢失率只能降到最低,但不能根除。

    MongoDB:更适合集群部署,更多的考虑到集群方案,一般可用于“海量数据分析的访问效率提升”。

    Redis:更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。一般可用于“较小数据量的性能和运算,比如网络开发中的session存储”。

     

    三、Raft分布式协议:

    一般分布式都会遵从的协议:有点类似美国的总统选举。

    比如有一个建议,有Ñ个服务器,有大于2N + 1的服务器表示赞同,那么这个建议就被通过。

    假如建议是“一致性”,只要大于2N + 1的服务器之间的数据一致,那他们就是一致。

    假如建议是“主服务器”,只要大于2N + 1的服务器投票给要被选举的服务器,被选举的服务器也将变成主服务器

    还有很多思维:https://www.jdon.com/artichect/raft.html

     

    四、Redis出现宕机,如何保证数据不丢失?

    一台服务器快照持久化(RDB),同时满足在指定的时间间隔内和改动了几个数据的两个条件,生成内存中的数据集快照,然后写入磁盘;日志持久化(AOF),满足everysec(每秒)/always(每次操作)/no(默认30秒)条件,生成日志,然后写入磁盘缓存

    多台服务器:Redis正在开发的Sentinel(哨兵监听),具体网址:http://redisdoc.com/topic/sentinel.html

    展开全文
  • MySQL原来也有内存数据库

    万次阅读 2016-07-22 22:45:09
    这次听了来自台湾的MySQL专家Ivan Tu的讲座,有两点印象深刻,一是MySQL具有丰富的高可用方案,二是MySQL也有内存数据库,即MySQL Cluster CGE。Ivan形象的将内存数据库比喻成浅浅的盘子,而传统的MySQL磁盘存储方式...

    以前只知道MySQL可以做分库分表,支持多种数据库引擎。这次听了来自台湾的MySQL专家Ivan Tu的讲座,有两点印象深刻,一是MySQL具有丰富的高可用方案,二是MySQL也有内存数据库,即MySQL Cluster CGE。Ivan形象的将内存数据库比喻成浅浅的盘子,而传统的MySQL磁盘存储方式比喻成深深的瓶子。

    这里写图片描述

    另外,也探讨了MySQL作为开源数据库,和Oracle数据库的关系。MySQL并行发展企业版和社区版,企业版增加了很多企业级的特性,如安全,备份和恢复,监控,以及CGE(电信运营商版)。MySQL目前主要的目的还是保持生态系统,培养群众基础,营收主要靠服务,培训等。毕竟开源不代表免费。

    这里写图片描述

    不过好像MySQL的内存数据库特性不是那么知名,找个时间研究一下吧。

    展开全文
  • 实时数据库,内存数据库,关系型数据库比较

    万次阅读 多人点赞 2018-09-27 18:45:44
    内存数据库 内存数据库就是将数据放在内存中直接操作的数据库,它利用内存的读写速度比磁盘快、内存是随机访问而磁盘是顺序访问这两个特点,将数据保存在内存中,在内存中模仿建立表结构和索引结构并针对内存特性...
  • 使用SQLite作为内存数据库

    千次阅读 2018-07-09 23:39:04
    https://sqlite.org/inmemorydb.html
  • 内存数据库从范型上可以分为关系型内存数据库和键值型内存数据库。 在实际应用中内存数据库主要是配合oracle或mysql等大型关系数据库使用,关注性能。 作用类似于缓存,并不注重数据完整性和数据一致性。 基于...
  • oracle 体系结构中,数据库实例的系统全局区SGA(System global area) 是核心的组成部分,它是一组共享的内存结构,里面存储了oracle数据库实例(instance)的数据和控制文件信息。SGA主要包括以下几部分:共享池,...
  • 数据库将数据存储在哪里?比如mysql。是存储在内存还是硬盘里
  • 主流内存数据库对比

    万次阅读 2016-10-09 19:58:15
    原文地址:http://blog.csdn.net/nanfeiyannan/article/details/9003009   名称 开源或商业 主要特点 ...1. 符合RDBMS标准的独立内存数据库服务。 2.支持S
  • 查看Mysql数据库表占用内存

    千次阅读 2018-11-29 18:29:45
    SELECT TABLE_NAME,DATA_LENGTH+INDEX_LENGTH,TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA='数据库名'; 单位为字节
  • 内存数据库:大数据时代数据管理新宠 在 2012中国系统架构师大会上,笔者曾做过一份有关大数据的调查,其中一项“在众多的技术趋势中,您所关注的数据管理的新技术是什么?”的调查结果中, “内存数据库”成为仅次...
  • 基于Java的内存数据库

    千次阅读 2012-10-02 08:17:32
    内存数据库(in-memory database,IMDB)是指那些完全用主存作为数据存储的数据库管理系统,由于节省下来磁盘的I/O开销,与基于磁盘的传统数据库管理系统而言效率要高很多。 内存数据库非常适合在 小规模数据...
  • 也许有人迷惑关系型数据库和非关系型数据库区别,其实非关系型数据库就是Nosql,所谓Nosql,就是(Not Only SQL),这个问题等价于关系型数据库和Nosql区别。 Nosql简介 Redis,Memchche,MongoDb的区别 1. 本质:...
  • 刚开始接触项目的实习生,积累...之前做项目,遇到过一次查询数据量过大而导致的内存溢出问题,找了很多办法一直未能实际解决问题, 今天又遇到了,经过前辈的指导,终于解决了问题!! 不过此方法只在DBug启动下有效
  • 在Spring Boot中使用内存数据库

    万次阅读 2020-05-22 10:29:01
    所谓内存数据库就是可以在内存中运行的数据库,不需要将数据存储在文件系统中,但是相对于普通的数据库而言,内存数据库因为数据都在内存中,所以内存的数据库的存取速度会更快。 本文我们将会讨论如何在Spring Boot...
  • 由于sqlite对多进程操作支持效果不太理想,在项目中,为了避免频繁读写 文件数据库带来的性能损耗,我们可以采用操作sqlite内存数据库,并将内存数据库定时同步到文件数据库中的方法。 实现思路如下: 1、创建文件...
  • 常用内存数据库介绍(一)

    万次阅读 2010-07-06 17:03:00
    1. 内存数据库简介1.1 概念 一、什么是内存数据库 <br />传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称做磁盘数据库(DRDB:Disk-Resident Database)。磁盘数据库需要频繁地访问磁盘来...
  • Picture的事务日志文件有问题,刷新企业管理器里的数据库,则Picture数据库变为置疑状态。打开Picture的日志文件存放的磁盘位置,并将Picture_Log.ldf删除,然后在SQL查询分析器中执行下面的语句。1)在查询分析器里...
  • SQLite内存数据库使用有感

    万次阅读 2008-04-12 09:31:00
    SQLite不仅可以把数据库 放在硬盘上,还可以放在内存中(sqlite3_open(":memory:", &db)),经测试,同样条件下数据库放在内存中比放在硬盘上插入记录速度快差不多3倍。但数据库放在内存中时有如下缺陷:1、断电或...
1 2 3 4 5 ... 20
收藏数 907,591
精华内容 363,036
关键字:

内存数据库