




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内存数据库(sqllite)使用介绍数据库的进展数据库技术的进展,已经成为先进信息技术的重要组成局部,是现代计算机信息系统和计算机应用系统的根底和核心。数据库技术最初产生于2060年月中期,依据数据模型的进展,可以划分为三个阶段:第一代的网状、层次数据库系统;其次代的关系数据库系统;第三代的以面对对象模型为主要特征的数据库系统。1969IBMIMS和70CODASYLDBTG次数据库的数据模型是有根的定向有序树,网状模型对应的是有向图。这两种数据库奠1.〔外模式、模式、内模式。保证数据库系统具有数据与程序的物理独立性和肯定的规律独立性;2.用存取路径来表示数据之间的联系;3.有独立的数据定义语言;4.导航式的数据操纵语言〔。2.以关系数学为根底;3.数据的物理存储和存取路径对用户不透亮;4.关系数据库语言是非过程化的。第三代数据库产生于80年月,随着科学技术的不断进步,各个行业领域对数据库技术提出了更多的需求,关系型数据库已经不能完全满足需求,于是产生了第三代数据库。主要有以下特征:1.支持数据治理、对象治理和学问治理;2.保持和继承了其次代数据库系统的技术;3.对其它系统开放,支持数据库语言标准,支持标准网络协议,有良好的可移植性、可连接性、可扩展性和互操作性等。第三代数据库支持多种数据模型〔比方关系模型和面对对象的模型,并和诸多技术相结合〔比方分布处理技术、并行计算技术、人工智能技术、多媒体技术、模糊技术,广泛应用于多个领域〔S、打算统计等,由此也衍生出多种的数据库技术。clustercluster中的多个节点去执行,提高了数据库的吞吐和容错性。多媒体数据库供给了一系列用来存储图像、音频和视频对象类型,更好地对多媒体数据进展存储、治理、查询。模糊数据库是存储、组织、治理和操纵模糊数据库的数据库,可以用于模糊学问处理。内存数据库的起因,分类一、雏形期60801969IBM公司研制了世界上最早的数据库治理系统基于层次模型的数据库治理系统IMS,并作为商品化软件投入市场。在设计IMS时,IBM考虑到基于内存的数据治理方法,相应推出了IMS/VSFastPath。FastPath是一个支持内存驻留数据的商业化数据库,但它同时也可以很好数据库、关系数据库等其他各种数据库技术也都渐渐成型。二、技术理论成熟期1984年,DJDeWitt等人发表了《主存数据库系统的实现技术》一文。第一次提出了MainMemoryDatabase〔主存数据库AVL1984年,DJDeWitt等人提出访用非易逝内存或预提交和成组提交技术作为主存数据库的提交处理方案,使用指针实现主存数据库的存取访问。1985年,IBMIBM370OBE主存数据库1986年,RBHagman提出了使用检查点技术实现主存数据库的恢复机制。威斯康星大学提出了按区双向锁定模式解决主存数据库中的并发掌握问题MM-DBMS主存数据库。贝DALI主存数据库模型。1987年,ACMSIGMOD会议中提出了以堆文件〔HEAPFILE〕作为主存数据库的数据存储构造。SouthernMethodistMARS主存数据库模型。1988TPK主存数据库。1990SystemM主存数据库。三、产品进展期和市场成长期的的数据库系统,主存数据库市场成熟半导体技术快速进展,半导体内存大规模生产,动态随机存取存储器〔DRAM〕的容量越来的技术可行性逐步成熟1994OSE公司推出了第一个商业化的,开头实际应用的主存数据库产品Polyhedra1998SoftwareAGTaminoDatabase。1999UBITXDBAltibaseAltibase2000QuiLogicSQL-IMDB2001McObjecteXtremeDBEmpressEmpressDB四、几种主存技术应用的比较第一代:用户定制的主存数据库。通过应用程序来治理内存和数据;不支持SQL语句,不供给本地存储,没有数据库恢复技术;性能好但很难维护和在别的应用中不能使用;应用在实时领域比方工厂自动化生产。其次代:简洁功能的内存数据库。能够快速处理简洁的查询;支持局部的SQL语句和简洁,尤其是交换机,移动通信等。第三代:通用的主存数据库。针对传统的商业关系型数据库领域,能够供给更高的性能、通SQL在计费、电子商务、在线安全领域,几乎包括磁盘数据库的全部应用领域。五、目前几种常见的通用内存数据库eXtremeDB:eXtremeDBMcObject公司的一款特别为实时与嵌入式系统数据治理50K130K的开销,速度到达微秒级。eXtremeDB完全驻留在主内存中,不使用文件系统〔包括内存盘。eXtremeDB承受了的磁盘融合技术,将内存拓32BIT下20G。een是e从n公司收购的一个内存优化的关系数据库,它为应用程序供给了实时企业和行业〔例如电信、资本市场和国防〕所需的即时响应性OracleTimesTen可作为高速缓存或嵌入式数据库被部署在应用程序层中,它利用标准的SQL接口对完全位于物理内存中的数据存储区进展操作。SolidDB:SolidInformationTechnology成立于1992年,全球总部位于加州Cupertino,Solid数据治理平台将基于内存和磁盘的全事务处理数据库引擎、载体级高可用性及强大的数据复制功能严密地融为一体。Altibase:ALTIBASE1999年就始终致力于内存数据库软件和其应用的开发,供给高性能和高可用性的软件解决方案。特别适合通信、网上银行、证券交易、实时应用和嵌入式系80%Altibase在国内成功案例也比较多,尤其是在电信行业,已经得到了广泛认可。Sqllite的介绍,以及几种内存数据库的比较BerkeleyDBSqlite比照〔from“://www-128.ibm/“://www-128.ibm〕嵌入式数据库无需安装,体积小巧,速度又很快,在很多场合可以替代目前流行的MySQL,SQLServer等大中型数据库。本文介绍两种嵌入式数据库产品:BerkeleyDBSQLite,并着Java之间的接口。Oracle,SQLServer,MySQL如触发器,存储过程,数据备份恢复,全文检索功能等。但实际上,很多的应用,仅仅利用到了这些数据库产品的根本特性而已。而且在一些小型应用上,或者某些特别场合的应用,特别明显了。API去实现对数据的存,而后者是引擎响应式。嵌入式数据库的一个很重要的特点是它们的体积格外小,编译后的产品也不过几十K。这不但对桌面程序的数下面介绍的是两个开放源代码的嵌入式数据库,BerkeleyDBSQLiteJava连接这两种嵌入式数据库。一.BerkeleyDB简介BerkeleyDB是一款强健的,高速的工业级嵌入式数据库产品,你可以在它的官方主页〔见参考链接一〕上觉察很多知名的公司都承受了这款嵌入式数据库。BerkeleyDB的一个很重要的特点是就是高速存储。在高流量,高并发的状况下,BerkeleyDB要比非嵌入式的数据库表现得更加精彩。所以在一些技术实现上,BerkeleyDB被作为大型关系数据库的中间数型数据库所供给的更为高级的特性。BerkeleyDB虽然是开源的产品,但对某些条件下的商业性应用,却不是免费的,而且价格颇为昂贵。这些商业条件排解了开源的状况,不发放分布版本的状况,等等。比方,假设你的程序是开放源代码的或者仅仅应用到单一的网站上,在这种状况下,BerkeleyDB是免费的。JavaBerkeleyDB的接口BerkeleyDB4.1.25Java接口。下载的压缩包中包含CJava语言的源代码和编译配置文件。在Windows平台,可以用MSVisualC++6.0MSVC.Net编译。用VC6build_win32VCBuildSetActiveConfigurationdb_javawin32releaseVCTools菜单Options选项中指定JNI.H等JavaJDK的include路径下找到这些头文件,例如参加的路径可能会是这样的:C:\jdk1.4\include和C:\jdk1.4\include\win32ToolsOptionsJavac.exeJar.exe的执VC开发环境也能调用JavaVCJava接口类的编译和打包。在编译后,在release路径下的文件中找到db.jar,libdb41.dll,libdb_java41.dllBerkeleyDBJava接口程序包。JavaBerkeleyDB的接口BerkeleyDBSQL语句对数据库操作,对它的操作要调用专用的API实现。这些API供给了查询、插入、删除等功能。比方com.sleepycat.db.Db类代表数据库对象。Db类的put方法完成的是插入功能,get方法完com.sleepycat.db.DbcBerkeleyDB记录的功能。BerkeleyDB每一个记录都有一个键值和对应的数据值,而键值和数据必需是类com.sleepycat.db.DbtDbtbyte数组或ObjectDbt的对象中去。比方,Dbtset_data(byte[])set_object(Object)方法。BerkeleyDBJavaAPIJavaset_data方setData方法。BerkeleyDBJavaAPI。BerkeleyDB对任何存入的数据都是直接原样存储到数据文件中去,无论其是二进制数据还ASCIIUnicode等编码的文本。通常可以利用这一特性和Java串行化的概念便利的进展数据的存取。例如声明一个类publicclassAccountInfoimplementsSerializable{//帐户信息publicStringloginName;publicStringpassword;publicbooleanauotLogin;}在这个AccountInfo类中仅仅包含了数据项的定义。我们完全可以将这个类看作数据库的表中字段定义。可以用BerkeleyDBAccountInfo对象的串行化二进制数据,以此来保存这Dbtset_object(AccountInfo)方法,而后把DbtDbt类的方法来完成对数据的保存。下面这段简洁代码演示如何将数据存入到数据库中,然后再用游标对象扫瞄全部数据。//留意,下面的程序的无视了对特别处理,写入数据初始化等等一些代码,请在适当修改后再编//译运行它DbdbFile=null;//Db对象dbFile=newDb(null,0);//BTreec:/tempmydata.dbemployee//假设数据库不存在,则自动生成一个的数据库。dbFile.open(null,“c:\\temp\\mydata.db“,“employee“,Db.DB_BTREE,Db.DB_CREATE,0);Dbtkey=newDbt;Dbtdata=newDbt;//向库文件中插入一条数据,假设已经存在,打印出错信息if(dbFile.put(null,key,data,Db.DB_APPEND)==Db.DB_KEYEXIST){System.out.println(“Keyalreadyexists.“);}//关闭数据文件dbFile.close(0);//重翻开数据文件dbFile=newDb(null,0);dbFile.open(null,“c:\\temp\\mydata.db“,“employee“,Db.DB_UNKNOWN,0,0644);//声明一个数据库游标Dbc对象iteratorDbc iterator=dbFile.cursor(null,0);//遍历整个表Dbtkey=newDbt;while(iterator.get(key,data,Db.DB_NEXT)==0){System.out.println(“reading“);}//关闭游标和数据文件iterator.close;dbFile.close(0);BerkeleyDB的程序时勿必在系统环境变量PATHlibdb41.dll和libdb_java41.dll所在的路径。BerkeleyDB的存储模式BerkeleyDB供给了四种存储数据的模式:Btree,Hash,QueueRecno。在翻开数据库的时openDb.DB_BTREEBtree模式翻开数据库。Btree模式是以排序的二叉树的方式存储,Hash是以线性哈希表的方式存储。Queue用规律Recno方式也以规律记录号做为键值,但可以保100808180100条记录规律记录号会变成99。固定的规律记录号则无论数据库如何操作都不会有变化。Queue模式下,规律记录号只能是固定方式。Recno模式则可通过配置来选择是承受那种类型的记录号作为键值。Btree模式也可以通过设置,将可变的规律记录号做为键值。这几种存储模式各有优缺点,要依据具体的需求来选择。当键值不想用规律记录号时BtreeHash是必需的选择。Btree方式比较适合连续的挨次读取,比方,当键值是时间值,假设常常有从某一时间点开头连续读取后继的记录的操作,Btree是一种很好的选择。对随机的跳动式读取,Hash模式则更为恰当。Queue和Recno都以记录号为键值,但前者适合先进先出的读取方式。Recno则通常是存取变长文本记录的抱负存储模式。BerkeleyDBEnvironment的概念BerkeleyDBEnvironment为一组数据库同时供给参数设置。更为重要的是,假设要应用更高Environment功能,比方在想要对保存的数据进展加密存储时。更多特点yB,数据加密,同步加锁掌握,错误日志等功能。下面的图片是BerkeleyDB功能示意图。回页首二.SQLite简介PHPSQLitePHP5中已经集成了这个轻松的内嵌式数据库产品。SQLiteBerkeleyDB相比,在操作语句上更类似关系型数据库的产品。SQL92SQLite都能支持。SQLite的版权允许无任何限制的应用,包括商业性的产品。在参考链接二上供给的SQLiteSQLiteCVS工具下载最版本的SQLite源代码。假设在*nuxmakeWindows平台,常用的有两种WindowsLinuxMingWCygwinmake来MSVCMSVC6工程文件的样例。应用到这个样例的时候,要留意的是由于SQLite源代码在不断更,假设直接应用样例所供给的VC6工程文件编译会消灭一些问题,读者要依据具体的状况略微调整一下编译的设置。Java接口SQLite源代码是C,而且官方网站上只供给了CTcl语言的接口。为了应用Java接口,要承受第三方的接口驱程,可在参考链接三中找到这个Java接口程序。这个接口供给了两种SQLiteJNISQLite的CSQLiteAPIJava标准标准JDBCJDBC有了解就可以了。WindowsMSVC6SQLiteJava接口〔JNIJDBC两个接口〕的过程。假设你对C语言编译的设置很生疏,可以跳这这段介绍。SQLiteLib供给的MSVC6工作区文件,其中有一个编译SQLite到静态库的设置。编译成功后得到SQLite.lib文件。其次步要建立一个的VCDLL工程,然后和上面介绍的BerkeleyDB在编译JavaVCToolsOptionsJNI.HJNI编译所要sqlite.hSQLite静态库的时候自动生成的,可以在SQLite.lib文件所在的工作区名目下面找到它,例如参加的路径为C:\sqlite\msvc6ProjectsettingLinkSQLite.lib库文件,并再次在Tools菜单中Options指定SQLite.lib的查找路径。留意有些状况下可能要设置予编译选项HAVE_SQLITE_COMPILESQLiteVM的一些功能。编译成功后可得到Sqlite_jni.dll文件。JavaJNIJDBCJRE的JDBCJava代码的过程这里就不做表达了。JavaSqlite_jni.dllSQLiteJavaJavaJDBCJNIJavaSqlite_jni.dll文件,SQLite数据库的操作。JNISQLite功能JNISQLiteDatabaseexec方法是执行SQL语句的关键:Databasedb=newDatabase;try{//翻开数据库db.open(“c:\\temp\\mydata.slt“,0666);errupt;db.busy_timeout(1000);db.busy_handler(null);db.exec(“createtableaccount(namevarchar(10),galeboolean)“,result);db.exec(“insertintoaccountvalues(”steve”,”m”)“,result);db.exec(“select*fromaccount“,result);//关闭数据库db.close;}catch(Exceptione){e.printStackTrace;}JDBCSQLite用“SQLite.JDBCDriver“JDBCJDBCURLjdbc:sqlite:/path。pathSQLite数据库文件的路径,例如:jdbc:sqlite://dirA/dirB/dbfilejdbc:sqlite://DRIVE:/dirA/dirB/dbfilejdbc:sqlite://COMPUTERNAME/shareA/dirB/dbfileJDBCSQLite的例程://JDBC驱动程序Classclz=Class.forName(“SQLite.JDBCDriver“);//连接数据库Connectionconn=DriverManager.getConnection(“jdbc:sqlite:/c:/temp/e2.db“);Statementstmt=conn.createStatement;//person表,包含名子和年龄字段stmt.execute(“createtableperson(namevarchar(100),ageint)“);//插入数据stmt.execute(“insertintopersonvalues(”steve”,25)“);//SQL语句读出数据result=stmt.executeQuery(“select*fromperson“);while(result.next){System.out.println(result.getString(1));System.out.println(result.getInt(2));}运行程序时要在Java.exejava.library.pathSqlite_jni.dll所在的路径。例如,假设Sqlite_jni.dllc:\sqliteNativecom.e2one.MyClass的命令行将会是这样:java-Djava.library.path=c:\sqliteNativecom.e2one.MyClass。SQLite的特点SQLite是很多据类型的数据库。虽然在生成表构造的时候,要声明每个域的数据类型,但SQLite有一个例外,就是当主键为整型值时,假设要插入一个非整型值时会产生特别。另外,虽然在插入或读出数据的时候是不区分类型的,但在比较的时候,不同数据类型是有区分的。比方:CREATETABLEMyTable(aINTEGER,bTEXT);INSERTINTOMyTableVALUES(0,0);当执行下面的查询:SELECTcount(*)FROMMyTableWHEREa==”00”;会返回一条记录,由于字段a000是相等的。而执行下面的查询则不会返回记录:SELECTcount(*)FROMMyTableWHEREb==”00”;由于字段b是字符类型,字符“00“与“0“是不相等的。SQLiteTransactionTransaction即保证了数据的完整性,也会提高运行速度,由于多条语句一起提交给数据库的速度会比一条一条的提交方式更快。对二进制数据,SQLiteASCII编码,然后再Base64编码机制是最常见的把二进制数据转换成ASCIISQLiteC语encode.cBase64JavaApacheXMLRPCBase64编码的例子。上面介绍了两个比较常见的嵌入式数据库,BerkeleyDB速度极快,牢靠性高,但学习起来有肯定难度。SQLiteJDBC连接,但它功能却Berkeley略有逊色,比方加密功能、二进制数据的处理等。Sqllite接口(Interface)SQLiteCAPI组成,也就是说不管是程序、脚本语言还是库文件,最终都是通过SQLite交互的(ODBC/JDBC最终也会转化为相应CAPI的调用)。、编译器(Compiler)〔Tokenizer〕和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业科业务培训课件
- 慢性肾脏病4期的护理
- 事业单位安全培训总结课件
- 胆管癌的术后护理
- 《老人与海》课件教学
- 招标采购从业人员考试(招标采购专业实务初级)在线复习题库及答案(2025年全国)
- 《穷人》公开课课件
- 生产企业个人工作总结
- 《眼睛的抗议书》课件
- 2025合作项目合同样本:工程建设项目合作协议范本
- 汉语阅读教程第一册第二课
- LED照明灯具基础培训
- 上海市静安区2022-2023学年高一下学期期末数学试题(解析版)
- TPM管理知识培训
- 2023年国家公务员考试申论真题及答案解析(地市级)
- 关于无梁楼盖和梁板式楼盖经济性的比较
- 第十四杂环化合物
- RB/T 306-2017汽车维修服务认证技术要求
- 《数学软件》课程教学大纲
- 《细胞工程学》考试复习题库(带答案)
- 粤教花城版小学音乐歌曲《哈哩噜》课件
评论
0/150
提交评论