还剩21页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
常用内存数据库介绍
(一)博客分类•内存数据库数据结构Oracle企业应用网络应用设计模式(注部分资料直接来源于Inteoet)
1.内存数据库简介
1.1概念
一、什么是内存数据库传统的数据库管理系统把全部数据都放在磁盘上进行管理,所以称做磁盘数据库(DRDB:Disk-ResidentDatabase)o磁盘数据库需要频繁地访问磁盘来进行数据的操作,由于对磁盘读写数据的操作一方面要进行磁头的机械移动,另一方面受到系统调用(通常通过CPU中断完成,受到CPU时钟周期的制约)时间的影响,当数据量很大,操作频繁且简单时,就会暴露出很多问题近年来,内存容量不断提高,价格不断下跌,操作系统已经可以支持更大的地址空间(计算机进入了64位时代),同时对数据库系统实时响应力量要求日益提高,充分采用内存技术提升数据库性能成为一个热点在数据库技术中,目前主要有两种方法来使用大量的内存一种是在传统的数据库中,增大缓冲池,将一个事务所涉及的数据都放在缓冲池中,组织成相应的数据结构来进行查询和更新处理,也就是常说的共享内存技术,这种方法优化的主要目标是最小化磁盘访问另一种就是内存数据库(MMDB:MainMemoryDatabase也叫主存数据库)技术就是干脆重新设计一种数据库管理系统,对查询处理、并发掌握与恢复的算法和数据结构进行重新设计,以更有效地使用CPU周期和内存,这种技术近乎把整个数据库放进内存中,因而会产生一些根本性的变化两种技术的区分如下表的同一部分,从而导致数据库出错.由于这些问题是文件系统执行的时候本质上存在的bug因此SQLite没有方法避开它们.好的阅历告知我们,应避开在很多计算机需要通过一个网络文件系统同时访问同一个数据库的状况下使用SQIate.高流量网站SQLite通常状况下用作一个网站的后台数据库可以很好的工作.但是假如你的网站的访问量大到你开头考虑实行分布式的数据库部署•,那么你应亳不迟疑的考虑用一个企也级的客户端/服务器数据库来替代SQLite.超大的数据集当你在SQLite中开头一个事务处理的时候(事务处理睬在任何写操作发生之前产生而不是必需要显示的调用BEGIN...COMMIT)数据库引擎将不得不安排一小块脏页(文件缓冲页面)来关心它自己管理回滚操作.每1MB的数据库文件SQLite需要256字节.对于小型的数据库这些空间不算什么,但是当数据库增长到数十亿字节的时候,缓冲页面的尺寸就会相当的大了.假如你需要存储或修改几十GB的数据,你应考虑用其他的数据库引擎.高并发访问SQLite对于整个数据库文件进行读取/写入锁定.这意味着假如任何进程读取了数据库中的某一部分,其他全部进程都不能再对该数据库的任何部分进行写入操作.同样的,假如任何•个进程在对数据库进行写入操作,其他全部进程都不能再读取该数据库的任何部分.对于大多数状况这不算是什么问题.在这些状况下每个程序使用数据库的时间都很短暂,并且不会独占,这样锁定至多会存在十几毫秒.但是假如有些程序需要高并发,那么这些程序就需要查找其他的解决方案了.性能数据容量支持100000条以上纪支持录AltibaseAltibaseTM内存数据库管理系统(DBMS)内存数据管理系统的最新技术,是一个在事务优先的环境中供应高性能和高可用性的软件解决方案Aliibase供应极限性能、容错力量和事务管理的便利性,特殊是在通信、网上银行、证券交易、实时应用和嵌入式系统领域Altibase能够最大限度的发挥数据库服务系统的潜力,使用Altibase能大大增加您公司的数据服务器的处理力量AllibaseTM内存DBMS为需要容错服务的系统供应实时数据库复制的功能采纳Altibase数据库复制的系统可以实现高性能、高可用性、数据库全都性、负载平衡和系统可伸缩性假如您盼望您的业务能够实现最大的胜利,请在您的事务优先的系统中使用我们的Altibase数据库复制解决方案资料比较少,且需要商业License没有具体去讨论Oracle内存数据库系列BerkeleyDB和TimesTenOracle是最重要的商业数据库产品供应商,它也有内存数据库的产品系列主要就是OracleBerkeleyDB和TimesTen.前者是只支持嵌入式内存数据,后者是独立的内存优化数据库OracleBerkeleyDBOracleBerkeleyDB是Oracle收购了开源数据库厂商后推出的产品,其前身是BerkeleyDB它有开源版本,但且对于开源软件免费商业版本是要付费OracleBerkeleyDB系列的可嵌入开源数据库为开发人员供应了无需管理的快速、牢靠的本地长久性OracleBerkeleyDB系列通常部署为“前沿数据库,为不需要SQL的应用程序用例供应很高的性能、牢靠性、可伸缩性以及可用性OracleBerkeleyDB产品系列-BerkeleyDB-事务处理式存储引擎,用于基本键/值数据结构中的非类型化数据—新增!版本
4.7现已推出针对Java环境优化的纯Java版BerkeleyDB—新增!版本
3.3BerkeleyDBXML—原生XML数据库,可基于XQuery访问容器中存储的文档并依据其内容进行索引一新增!版本
2.4现已推出OracleTimesTenOracle内存数据库TimesTen是一个针对内存进行了优化的关系数据库,它为应用程序供应了当今实时企业和行业(如电信、资本市场和国防)所需的即时响应性和特别高的吞吐量Oracle内存数据库TimesTen作为独立或嵌入式数据库部署在应用层中,采用标准的SQL接口对完全位于物理内存中的数据库进行操作它也可以用作Oracle数据库的内存中数据库缓存,以改进用户应用程序的响应时间和吞吐量eXtremeDBeXtremeDB内存式实时数据库是为实时系统及嵌入式系统而特殊设计的数据库与同类产品不同,eXtremeDB不是通过对企业数据库面对实时嵌入式应用进行剪裁而来;而是总结了30年来McObject公司在编译器、实时编程、数据管理、内核级驱动软件等领域的阅历,面对实时嵌入式应用从头开发的最新实时数据管理技术eXtremeDB满意了您对实时数据库的一切期盼高级数据定义语言、并行访问、基于交易及敏捷的索引等等不仅如此,出乎您的意外,eXtremeDB在紧凑的引擎中还供应诸如大事触发、目标历史等等功能extremes嵌入式数据库满意更多的实时开发的要求最快的内存数据库微小尺寸和微小的内存消耗多种索引支持高可用性■组合选项特别敏捷的数据存储内存式,磁盘式或混合式多种应用接口:两种SQL两种更快的原始接口几乎牢不行破・乂一个商业内存数据库产品,这个特点是实时数据库,号称最快常用内存数据库介绍
(四)博客分类•内存数据库嵌入式DcrbyHSQLDB应用服务器算法
4.5H2Databaseh2是ThomasMueller供应的一个开源的、纯java实现的关系数据库,官方网站它的主要特性是特别速的数据库引擎开源、免费数据库支持JDBC和ODBCAPI支持SQL支持嵌入式,服务器和集群模式支持内存数据库供应基于扫瞄器的管理掌握台整个应用本身只有1MB左右其他特性还包括基于磁盘或内存的数据库、表,支持只读数据库、临时表两段式事务支持支持多个连接表级别的锁基于成本的优化,为简单查询使用遗传算法,零管理滚动的、可修改的resultset支持支持大结果集、外部结果排序•加密数据库(AES或XTEA).SHA-256密码加密性能比较(摘自h2database网站)嵌入模式下H2的性能比较.Net使用H
2.嵌入式应用有一个项目在为.Net使用H2使用CLI重新编译H2还没有深化关注
2.ODBC但性能一般其他内存数据库包括DerbyHSQLDB等(JavaEye对字数的限制,请见下一章5内存数据库之比较常用内存数据库介绍
(五)博客分类•内存数据库SQLileLinuxJDBCMobi1eOracle
5.内存数据库之比较上述内存数据库,首先由于License限制,排解了全部的商业数据库产品包括:AlitibaseOralceBerkelayDBOracleTimesTeneXtrmeDB还包括BerkelayDB这样的开源,但限制商业使用的数据库所以比较的重点就是SQLite和H2需要购买常用内存数据库介绍
(六)博客分类•内存数据库数据结构SQLiteXPSQLWindows
6.性能测试下面分别对SQLite和H2进行了性能测试SQLite测试方案测试环境主机操作系统WindowsXP;CPU IntelDual
2.2GHZ;内存I.99GB内存测试目标版本SQLite测试数据测试数据库表ip_tablc结构如下字段名类型测试过程然后执行一系列的测试测试结果引)结论SQLIite内存数据库的处理速度很快;SQLIite内存数据库在查找数据时有索引的状况下,查询、更新、删除速度快;SQLIite内存数据库并发性比较差,可以认为并发力量为0;SQLIite内存数据库占用内存空间,10()w条数据在40M左右(创建单个索引,6个字段)针对数据流探针来说,5w条数据SQLIite归并的速度在
0.688s可以尝试将部分功能用数据库归并实现SQLLite支持自定义函数,效率没有测试,应和他供应的API效率差不多SQLLite支持复合sql语句常用内存数据库介绍
(七)博客分类•内存数据库数据结构SQLServerSQLJDBCWindows
6.2H2测试方案测试环境主机操作系统WindowsServer2003EnterpriseEditionSP2;CPU IntelDual-Core
2.5GHz;内存数据库系统带来的优越性能不仅仅在于对内存读写比对磁盘读写快上,更重要的是,从根本上抛弃了磁盘数据管理的很多传统方式,基于全部数据都在内存中管理进行了新的体系结构的设计,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,从而使数据处理速度一般比传统数据库的数据处理速度快很多,一般都在10倍以上,抱负状况甚至可以达到1000倍而使用共享内存技术的实时系统和使用内存数据库相比有很多不足,由于优化的目标仍IH集中在最小化磁盘访问.匕很难满意完整的数据库管理的要求,设计的非标准化和软件的专用性造成可伸缩性、可用性和系统的效率都特别低,对于快速部署和简化维护都是不利的内存数据库历史和进展
一、雏形期从上个世纪60年月末到80年月初在这个时期中,消失了主存数据库的雏形1969年IBM公司研制了世界上最早的数据库管理系统——基于层次模型的数据库管理系统IMS并作为商品化软件投入市场在设计IMS时,IBM考虑到基于内存的数据管理方法,相应推出了IMS/VSFastPathFastPath是一个支持内存驻留内存
3.99GB内存测试数据测试数据库表employee结构如下测试数据库表department结构如下字段名类型DeptlDPKIntegerDeptVarchar20mangcrIDInteger测试数据库表salary结构如下测试过程使用Java编写了测试工程,启动测试程序后150000条级另I」的测试先分另ij插入至employee表、department表、alary表中
50000、和
1000、50000条数据,然后执行一系列的测试I100w条级别的测试先分别插入到employee表、department表、alary表中
1000000、和10H、1000000条数据,然后执行一系列的测试测试结果100w(条)10个并发线程
2.
950.
71.
2621.
71.
10.9优点
1.数据库小巧敏捷;
2.支持JDBC对SQL支持良好,并支持内存模式;占用系统资源较少,启动较快;数据库支持并发访问;索引查询更新速度快;缺点大数量访问优势不明显,与常用数据库基本全都;无索引状况卜速度较慢,与数据库的数据后成正比:数据的商业化数据库,但它同时也可以很好地支持磁盘驻留数据在这个产品中体现了主存数据库的主要设计思想,也就是将需要频繁访问,要求高响应速度的数据直接存放在物理内存中访问和管理在这个阶段中,包括网状数据库、关系数据库等其他各种数据库技术也都渐渐成型
二、技术理论成熟期1984年,DJDeWitt等人发表了《主存数据库系统的实现技术》一文第一次提出/MainMemoryDatabase主存数据库的概念预言当时特别昂贵的计算机.主存价格肯定会下降,用户有可能将大容量的数据库全部保存在主存中,提出了AVL树、哈希算法、主存数据库恢复机制等主存数据库技术的关键理论,为主存数据库的进展指出了明确的方向1984年,DJDeWitt等人提出访用非易逝内存或预提交和成组提交技术作为主存数据库的提交处理方案,使用指针实现主存数据库的存取访问1985年,IBM推出了IBM370上运行的OBE主存数据库1986年,RBHagman提出了使用检查点技术实现主存数据库的恢复机制威斯康星高校提出了按区双向锁定模式解决主存数据库中的并发掌握问题并设计出主存数据库贝尔试验室推出了DALT主存数据库模型1987年,ACMSIGMOD会议中提出了以堆文件HEAPFILE作为主存数据库的数据存储结构SouthernMethodist高校设计出MARS主存数据库模型1988年普林斯顿高校设计出TPK主存数据库1990年普林斯顿高校又设计出SystemM主存数据库
三、产品进展期和市场成长期随着互联网的进展,越来越多的网络应用系统需要能够支持大用户量并发访问、高响应速度的的数据库系统,主存数据库市场成熟半导体技术快速进展,半导体内存大规模生产,动态随机存取存储器DRAM的容量越来越大,而价格越来越低,这无疑为计算机内存的不断扩大供应了硬件基础,使得主存数据库的技术可行性逐步成熟1994年美国0SE公司推出了第一个商业化的,开头实际应用的主存数据库产品Polyhedra1998年德国SoftwareAG推出了TaminoDatabaseo1999年日本UBIT会社开发出XDB主存数据库产品韩国Altibase推出Altibase2000年奥地利的QuiLogic公司推出了SQL-IMDB2001年美国McObject推出eXtremeDBo加拿大Empress公司推出EmpressDB
四、几种主存技术应用的比较第一代用户定制的主存数据库通过应用程序来管理内存和数据;不支持SQL语句,不供应本地存储,没有数据库恢复技术;性能好但很难维护和在别的应用中不能使用;应用在实时领域比如工厂自动化生产其次代简洁功能的内存数据库能够快速处理简洁的查询;支持部分的SQL语句和简洁的恢复技术;主要目的是能够快速处理大量事务;针对简洁事务处理领域,尤其是交换机,移动通信等第三代通用的主存数据库针对传统的商业关系型数据库领域,能够供应更高的性能、通用性以及稳定性;供应不同的接口来处理简单的SQL语句和满意不同的应用领域;可以应用在计费、电子商务、在线平安领域,几乎包括磁盘数据库的全部应用领域
五、目前几种常见的通用内存数据库eXtremcDB:eXtromcDB实时数据库是McObject公司的一款特殊为实时与嵌入式系统数据管理而设计的数据库,只有50K到130K的开销,速度达到微秒级eXtremeDB完全驻留在主内存中,不使用文件系统(包括内存盘)eXtremeDB采纳了新的磁盘融合技术,将内存拓展到磁盘,将磁盘当做虚拟内存来用,实时性能保持微秒级的同时,数据管理量在32BIT下能达到20GOracleTimesTcn:OracleTimcsTen是Oracle从TimesTen公司收购的一■个内存优化的关系数据库,它为应用程序供应了实时企业和行业(例如电信、资本市场和国防)所需的即时响应性和特别高的吞吐量OracleTimesTen可作为高速缓存或嵌入式数据库被部署在应用程序层中,它采用标准的SQL接口对完全位于物理内存中的数据存储区进行操作SolidDB:SolidInformationTechnology成立于1992年,全球总部位于加州CupertinoSolid数据管理平台将基于内存和磁盘的全事务处理数据库引擎、载体级高可用性及强大的数据复制功能紧密地融为一体Altibase:ALTIBASE公司从1999年就始终致力于内存数据库软件和其应用的开发,供应高性能和高可用性的软件解决方案特殊适合通信、网上银行、证券交易、实时应用和嵌入式系统领域目前占据80%以上内存数据库市场,可以说是当今数据库软件技术的领导者目前Altibase在国内胜利案例也比较多,尤其是在电信行业,己经得到了广泛认可常用内存数据库介绍
(二)博客分类•内存数据库SQLite企业应用PythonSQL嵌入式(部分资料直接来源于Internet)
4.常用内存数据库1SQLiteSQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎特性包括事务操作是原子,全都,孤立,并且长久的(ACID)即使在系统崩溃和电源故障之后零配置一不需要安装和管理实现了绝大多数SQL92标准整个数据库存储在一个单一的文件中数据库文件可以在不同字节序的机器之间自由地共享支持最大可达2T的数据库(2,1字节)字符串和BLOB类型的大小最大可达2G字节⑵।字节)小的代码完整配置的少于250KB忽视一些可选特性的少于150KB在大多数常见操作上比流行的客户/服务器数据库引擎更快简洁,易于使用的API.内建TCL绑定此外供应可用于很多其他语言的绑定具有良好注释的源代码,95%经过测试独立没有外部依靠源代码位于公共域可用于任何用途SQLite发行版包含一个独立的命令行访问程序(sqlite)可用于管理SQLite数据库,并适合作为一个如何使用SQLite库的例子License:SQLite使用Publicdomain授权(注)对于个人使用和商业使用都是免费的技术上的优点和特性SQLite是一个轻量级、跨平台的关系型数据库◊轻量级先说它的第一个特色轻量级想必SQLite的作者很看重这个特性,连它的Log都是用的“羽毛”,来显摆它的轻飘飘SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能而且那个动态库的尺寸也挺小,以版本为例,Windows下487KB、Linux下347KBO绿色软件SQLite的此外一个特点是绿色它的核心引擎本身不依靠第三方的软件,使用它也不需要“安装”所以在部署的时候能够省去不少麻烦◊单一文件所谓的“单一文件%就是数据库中全部的信息(比如表、视图、触发器、等)都包含在一个文件内这个文件可以copy到其它名目或其它机器上,也照用不误★技术上的缺点和不足◊并发访问的锁机制SQLite在并发(包括多进程和多线程)读写方面的性能始终不太抱负数据库可能会被写操作独占,从而导致其它读写操作堵塞或出错SQL标准支持不全在它的官方网站上,具体列举了不支持哪些SQL92标准我个人感觉比较不爽的是不支持外键约束◊网络文件系统(以下简称NFS)有时候需要访问其它机器上的SQLite数据库文件,就会把数据库文件放置到网络共享名目上这时候你就要当心了当SQLite文件放置于NFS时,在并发读写的状况下可能会出问题(比如数据损坏)缘由据说是由于某些NFS的文件锁实现上有Bug★编程语言接口SQLite支持很多种语言的编程接口这对于我这种喜爱混用多种编程语言的人来说,是很爽的下面我或许介绍一下OC/C++由于SQLite本身是C写的,它自带的API也是C接口的所以C/C++用起来最直接了假如你不喜爱面对过程的CAPI风格,可以此外找个C++的包装库想重新创造轮子的同学,也可以自己包装一个◊Java假如要用Java访问SQLite可以通过SQLite的JDBC驱动,或者通过特地的SQLite包装库我个人建议走JDBC方式,万一将来要换数据库,代码就不用大改OPythonpysqlite是Python操作SQLite的首选从Python
2.5开头,它已经被整合到Python的标准库中看来Python社区还是蛮喜爱SQLite嘛O.Net对于喜爱.Net的同学,可以通过SQLite的ADO.NET驱动来访问ORubyRuby可以通过SQLite-Ruby操作SQLite数据库,不过我没用过OPerl在CPAN上有DBD::SQLite不过我也没用过★一些非技术的参考因素需要依据“如何选择开源项目”里面提到的几个参考因素,再评估一下◊授权合同(License)SQLite使用的是PublicDomain合同,这是最爽一种,可以放心大胆地用◊用户的普及程度最近这几年,使用SQLite的人越来越多包括一些大公司也开头把它整合到产品中(比如Google的Gears、Apple的Safari、Adobe的AIR)◊开发的活跃程度假如到SQLite的ChangeLog上大致了解一下,可以看出最近5年基本上每1-2个月都会有更新说明开发的活跃度还是特别高的SQLite不同于其他大部分的SQL数据库引擎,由于它的首要设计目标就是简洁化易于管理易于使用易于嵌入其他大型程序易于维护和配置很多人喜爱SQLite由于它的小巧和快速.但是这些特性只是它的部分优点,使用者还会发觉SQLite是特别稳定的.精彩的稳定性源于它的简洁,越简洁就越不简洁出错.除了上述的简洁、小巧和稳定性外,最重要的在于SQLite力争做到简洁化.简洁化在一个数据库引擎中可以说是一个优点,但也可能是个缺点,主要打算于你想要做什么.为了达到简洁化,SQLite省略了一些人们认为比较有用的特性,例如高并发性、严格的存取掌握、丰富的内置功能、存储过程、简单的SQL语言特性、XML以及Java的扩展,超大的万亿级别的数据测量等等.假如你需要使用上述的这些特性并且不介意它们的简单性,那么SQLite或许就不适合你了.SQLite没有准备作为一个企业级的数据库引擎,也并不准备和Oracle或者PostgreSQL竞争.仅凭阅历来说SQLite适用于以下场合当你更看中简洁的管理、使用和维护数据库,而不是那些企业级数据库供应的不计其数的简单功能的时候,使用SQLite是一个比较明智的选择.事实也证明,人们在很多状况下已经清晰的熟悉到简洁就是最好的选择.SQLite最佳试用场合网站作为数据库引擎SQLite适用于中小规模流量的网站(也就是说,
99.9%的网站).SQLite可以处理多少网站流量在于网站的数据库有多大的压力.通常来说,假如一个网站的点击率少于100000次/天的话,SQLite是可以正常运行的.100000次/天是一个保守的估量,不是一个精确的上限事实证明,即使是10倍的上述流量的状况下SQLite依旧可以正常运行.嵌入式设施和应用软件由于SQLite数据库几乎不需要管理,因此对于那些无人值守运行或无人工技术支持的设施或服务,SQLite是一个很好的选择.SQLite能很好的适用于手机,PDA机顶盒,以及其他仪器.作为一个嵌入式数据库它也能够很好的应用于客户端程序.应用程序文件格式SQLite作为桌面应用程序的本地磁盘文件格式取得了巨大胜利.例如金融分析工具、CAD包、档案管理程序等等.一般的数据库打开操作需要调用sqlite3_open函数,并且标记一个显式本地事务的起始点BEGINTRANSACTION来保证以独占的方式得到文件的内容.文件保存将执行一个提交COMMIT同时标记另一个显式本地事务起始点.这种事务处理的作用就是保证对于应用程序数据文件的更新是原子的、长久的、独立的和全都的.数据库里可以加入一些临时的触发器,用来把全部的转变纪录在一张临时的取消/重做日志表中.当用户按下取消/重做按钮的时候这些转变将可以被回滚.应用这项技术实现一个无限级的取消/重做功能只需要编写很少的代码.替代某些特殊的文件格式很多程序使用fopenOfreadO或fwriteO函数创建和管理一些自定义的文件用来保存数据.使用SQLite替代这些自定义的文件格式将是一种很好的选择.内部的或临时的数据库对于那些有大量的数据需要用不同的方式筛选分类的程序,相对于编写同样功能的代码,假如你把数据读入一个内存中的SQLite数据库,然后使用连接查询和ORDERBY子句按肯定的挨次和排列提取需要的数据,通常会更简洁和快速.依据上述的方法使用内嵌的SQLite数据库将会使程序更富有敏捷性,由于添加新的列或索引不用重写任何查询语句.命令行数据集分析工具有阅历的SQL用户可以使用SQLite命令行程序去分析各种混杂的数据集.原是数据可以从CSV逗号分隔值文件文件中导入,然后被切分产生很多的综合数据报告.可能得用法包括网站日志分析,运动统计分析,编辑规划标准,分析试验结果.当然你也可以用企业级的客户端/服务器数据库来做同样的事情.在这种状况下使用SQLite的好处是SQLite的部署更为简洁并且结果数据库是一个单独的文件,你可以把它存储在软盘或者优盘或者直接通过email发给同事.在Demo或测试版的时候作为企业级数据库的替代品假如你正在编写一个使用企业级数据库引擎的客户端程序,使用一个允许你连接不同SQL数据库引擎的通用型数据库后台将是很有意义的.其更大的意义在于将SQLite数据库引擎静态的连接到客户端程序当中,从而内嵌SQLite作为混合的数据库支持.这样客户端程序就可以使用SQLite数据库文件做独立的测试或者验证.•数据库教学由于SQLite的安装和使用特别的简洁(安装过程几乎忽视不计,只需要拷贝SQLite源代码或sqlite.exe可执行文件到目标主机,然后直接运行就可以)所以它特别适合用来讲解SQL语句.同学们可以特别简洁的创建他们喜爱的数据库,然后通过电子邮件发给老师批注或打分.对于那些感爱好怎样实现一个关系型数据库管理系统(RDBMS)的高层次的同学,依据模块化设计且拥有很好的注释和文档的SQLite源代码,将为他们打下良好的基础.这并不是说SQLite就是如何实现其他数据库引擎的精确模型,但是很适合同学们了解SQLite是如何快速工作的,从而把握其他数据库系统的设计实现原则..・试验SQL语言的扩展SQLite简洁且模块化的设计使得它可以成为一个用来测试数据库语言特性或新想法的优秀的原型平台.常用内存数据库介绍
(三)博客分类•内存数据库数据结构OracleSQLile嵌入式网络应用(上接内存数据库介绍
4.1SQLite)哪些场合适合使用其他的关系型数据库管理系统(RDBMS)•客户端/服务器程序假如你有很多的客户端程序要通过网络访问一个共享的数据库,你应考虑用一个客户端/服务器数据库来替代SQLite.SQLite可以通过网络文件系统工作,但是由于和大多数网络文件系统都存在延时,因此执行效率不会很高.此外大多数网络文件系统在实现文件规律锁的方面都存在着bug(包括Unix和windows).假如文件锁没有正常的工作,就可能消失在同一时间两个或更多的客户端程序更改同一个数据库方面具体要求必要条件具体描述License是否收费免费使用是否开源开源主要是社区支持,假是否有技术支持如需要专业支持需要购买商业目的的分发版本是否仍要收费其他是免费SQLite在并发(包括多进程和多线程)读写方面的性能始终不并发查询处理力量太抱负数据库可能会被写操作独占,从而导致其它读写操作堵塞或出错查询速度是修改速度是平台支持32/64位全部支持Linux/window/UNIX/mobile支持Linux/MacOS/Windows运行方式支持支持嵌入式支持支持独立运行不支持默认不支持,必需连接方式支持支持ODBC默认不支持,必需通通过第三方的ODBC驱动支持JDBC过第三方的JDBC驱动支持内存访问通过c接口(专用API)支持网络访问不支持SQL支持支持SQL是支持支持IndexTrigger支持,有资料说其不ConstrainsViews支持外键约束管理界面管理界面友好程度支持管理界面较差支持CLITestCaseUnitH2HSQLDBDerbySimple:Inilms6106573187Simple:Queryrandomms2973121828Simple:Querysequentialms2032661766Simple:Updaterandomms1078148422031Simple:Deletesequentialms2342817407Simple:MemoryUsageMB6711BenchA:Inilms8594384047BenchA:Transactionsms5266287517500BcnchA:MemoryUsageMB91410BenchB:Inims4016268716875BenchB:Transactionsms260932824250BcnchB:MemoryUsageMB9108BenchC:Inilms8915945766BenchC:Transactionsms43597543811718BcnchC:MemoryUsageMB9189Executedstatements#594255594255594255Totaltimems204228831496375Statementspersecond#2909867286166方面具体要求必要条件SQLiteH2License是否收费免费使用免费使用是否开源开源开源主要是社区支主要是社是否有技术支持持,假如需要专业支持需要区支持,假如需要购买专业支持商业目的的分发版本是否仍要收费是免费免费其他数据容量性能支持100000条是支持支持以上纪录SQLite在并发(包括多进程和多线程)并发性较读写方面的性好(在模能始终不太抱拟器中有并发查询处理力量负数据库可使用,支能会被写操作持50个并独占,从而导发查询没致其它读写操问题)作堵塞或出错数据量少查询速度是的状况特别好修改速度是全部支平台支持32/64位全部支持持(需java平台支持)Linux/window/UNIX/mobile支持Linux/MacOS/Windows全部支持(需java平台支持)运行方式支持支持嵌入式支持支持支持独立运行不支持支持连接方式支持支持ODBC必需通过第三不支持支持支持JDBC方的JDBC驱动支持通过支持内存访问通过c接口(专用API)JDBC不支持API访问支持网络访问不支持支持SQL支持支持SQL是支持支持支持IndexTrigger支持,有资料说其不支持外支持ConstrainsViews键约束支持Web管理界面支持管理界面支持CLI界面的管理掌握台管理界面友好程度较差较好IdPKIntegerDs_ipVarchar20Agcnt_ipVarchar20Dst_macVarchar20Dst_portIntegerDst_vlanVarchar20用例名5w(条)单个线程lOOw(条)单个线程lOOw(条)10个并发线程初始插入时间2s45s初始插入时间(不加索引)
1.782s
38.109s插入1条纪录内100纳秒以100纳秒以内
0.0016s插入1000条纪录
0.047s
0.047s
0.453s插入1000条纪录(无索引)
0.6sIs
11.39s查询一条纪录内KX)纳秒以100纳秒以内
0.0033s查询一条纪录(不使用索引)
0.016s
0.375s
2.859s查询1000条纪录
0.016s
0.391s
2.828s查询KX)0条纪录(不使用索引)
0.015s
0.375s
2.906s查询全部纪录分组统计Groupby
0.688s
15.473s查询1000条(结果排序)
0.031s
0.39s
2.453s查询全部纪录(结果排序)
0.766s
16.203s
33.594s更新一条纪录内100纳秒以100纳秒以内
0.0043s更新一条纪录(不使用索
0.016s
0.359s
2.719s更新10000条数据
0.062s
0.047s更新10000条数据(无索引)
0.016s
0.375s
2.719s删除一条数据100纳秒以内100纳秒以内
0.0041s删除一条条数据(无索一____引)
0.125s
5.047s删除10000条数据
0.078s
0.078s删除10000条数据(无索引)79-125ms
5.031s0内存数据库,成熟度一成熟的商业软件.•单一用户定密M开发.开放性“通用的商业软件,采用开放探准和通用捂口.♦专用软件,封闭系统・・扩展性,支持IPC、TCP/IP、DOMAIN等多种连接方式,应用可以很方便的扩展.-一般只支持IPC方式,应用和内存必须严格绑定在同一台壬机上,难以扩展其他应用.A安全性2系统或主机导常情况」处理的数据和历史数据不会丢失可以进行依复,运用检查点机制迸行数据备份和恢复.提供完备的日志级别保证数据的完整性和安全性.处理的数据以及历史数据会丢失.需要重新数据导入.“不间断股务数据可以分布在不同的主机系统上使用,可以自动切换.“数据无法自动切换.影响系统的稳定性.•进程故障,通过回濠和日志文件可以自动恢复数据.“不能够恢复数据,当前处理的数据会完全丢掉.为处理此故限需要手工完成,效率低.「兼容性/支持支持开放业界标准,如SQL、JDBC和ODBC开发商签方便.”不支持SQL语句不支持ODBC.代码复杂不利于软件开发和系统的稳定运行・♦、稳定性2由薮据库系统提供内存的管理,降低了应用开发的复杂度,墙加了系统的稳定性.需要通过应用程序来处理复柴的内存管理过程,容易产的多的内存碎片,导致系统的不稳定.’开发复杂度「(开发接口)“提供标港应用开发接口,大大缩短开发周期.庾来在破盘数据库下做的应用程序可以方便移植.“不提供标准开发接口,开发效率低.”字段名类型IDPKIntegerFlvarchar255F2varchar255F3varchar255F4varchar255F5varchar255F6varchar255F7varchar255F8varchar255F9ini用例名10w(条)100w(条)【单位秒(s)】初始插入时间
5.
4350.47初始插入内存(KB)1237612834插入1条纪录00插入5000条纪录
0.
40.39查询1条纪录(有索引)00查询1条纪录(无索引)
0.
716.95查询5000条纪录(有索引)
0.
0150.1查询1*5000条纪录(有索引)
0.23查询5000条纪录(无索引)
0.
737.2杳询全部纪录
0.
868.35多表查询1条纪录00多表查询5000条纪录
0.
0160.016更新1条纪录(有索引)00更新1条纪录(无索引)
0.
454.62更新5000条纪录(有索引)
0.
160.18更新1*5000条纪录(有索引)
0.15更新5000条纪录(无索引)
0.
625.1删除1条纪录(有索引)00删除1条纪录(无索引)
0.
686.6删除5000条纪录(有索引)
0.
10.12删除1*5000条纪录(有索引)
0.13删除5000条纪录(无索引)
0.
776.95嵌套查询(分组统计Group
0.
777.55by)启动时间
0.
110.2测试结论。