您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 嵌入式数据库介绍--姜庆东
嵌入式数据库介绍Agenda嵌入式数据库综述SQLite介绍V6数据库介绍嵌入式存储需求便捷信息存储和查询功能是系统软件必备的基本服务,嵌入式系统也不例外关系数据库技术历经数十载的发展,相关概念深入人心,成为最重要的信息存储和检索手段。相对现有的通用计算机系统,嵌入式系统运行环境要求苛刻,同时不同的系统对于性能要求也存在很大的不同嵌入式数据库系统应用分类高性能嵌入式系统电信和网络设备航空航天工业自动化控制中等嵌入式系统车载电子,GPS机器人微嵌入式应用个人数字助理(PDA)智能手机微微嵌入式应用智能卡智能玩具高性能嵌入式系统高可靠性:通常通过备份,冗余等手段;要求系统的分布式特性:分布式存储,分布式事务;高性能:要求数据库系统的实时特性;多平台的适应性;多用内存数据库方式,采用非易失存储介质作为后备;存储数据类型复杂;中等嵌入式系统广泛的平台适应性:WCE,Linux,VxWorks等等;存储的数据类型复杂多变:多媒体数据,地理信息数据等等;存储介质类型多样:内存,NAND/NORFLASH,SD/MMC,微型磁盘等;通常会有响应时间的要求;要求接口简单,容易开发;微嵌入式环境对于资源使用有一定限制,存储空间,处理能力等均受限(虽然对于某些高档机型这种限制并不大);要求广泛的平台适应性:WCE,Linux等;要求具有丰富的数据类型(多媒体数据,地理信息数据);多样的存储设备:内存,NAND/NORFLASH,SD/MMC,微型磁盘等;对查询响应时间要求不高,满足人机交互的需求即可;要求和外部数据库的同步能力(DataSync)微微嵌入环境(智能卡)苛刻的运行环境:要求对资源的占用达到最小限度。存储数据类型简单,数据量小。多样的存储介质硬盘驱动器(HDD)随机存储器(RAM)快闪存储器(FlashMemory(NAND/NOR))其他(EEPROM等)硬盘驱动器(HDD)直接存储设备,相对于随机存储器,存储量大,但是开销也大。传统的数据库对如何使用HDD有较多的经验和技术。在某些嵌入式系统中需要考虑节电。随机存储器(RAM)对传统数据库技术提出了挑战。一些传统的数据库优化技术不在适用于它。RAM是易失性的存储器,需要非易失的存储器作为后备,传统的事务处理技术需要重新考察快闪存储器(FlashMemory)媲美内存的读取速度相对较慢的写入速度,在写入之前必须擦除.在数据库的设计中,必须考虑这一点。NANDVersusNORNANDNORLowercostperbitHigherdensitypartsRandombyteaccessLowerpowerconsumptionFasterreadrateFasterwriteanderaseratesNANDVersusNORSingle-LevelCellNANDMulti-LevelCellNANDMulti-LevelCellNORReadRate27MB/s25us+50nsx1056for2Kbytes20.5MB/s50us+50nsx1056for2Kbytes50MB/s25us+50nsx1056for2KbytesProgramRate8.3MB/s50nsx1056+200usfor2Kbytes1.7MB/s50nsx1056+1.2msfor2Kbytes0.145MB/s440usfor64bytesEraseTime1.5ms128Kbytes2ms128Kbytes1.2s128KbytesSource:ToshibaadEETimesMarch8,2004TypicalNANDLayouta1sthalfPageRegister(=256Bytes)I/O0~I/O716Bytes512BytesPageRegister128KPages(=4,096Blocks)16Bytes512BBytes8bit1Page=528Bytes1Block=528Bx32Pages=(16K+512)Bytes1Device=528Bx32Pagesx4,096Blocks=528Mbits1Block=32Pages(16K+512)Byte2ndhalfPageRegister(=256Bytes)K9F1208U0MChallengesOfNANDFlashFactoryBadBlocksBitReadErrorsProgramandEraseErrorsEraseCycleLimitations嵌入式数据库的挑战传统的RDBMS建立在以磁盘/磁鼓等DASD为存储介质的基础上的,而嵌入式系统常见的FlashMemory等存储介质和DASD在特性上有较大的不同,传统RDBMS的很多假设不再成立。传统的RDBMS的优化策略建立在对系统资源的最小占用,提高系统的吞吐量,而嵌入式RDBMS面对着可能是非常不同的优化目标。嵌入式RDBMS系统面临着苛刻的软/硬件运行环境,要求数据库结构上加以考虑。嵌入式数据库运行环境和存储介质多种多样,用单一的体系结构做到“通吃”几乎是不可能。嵌入式数据库的基本要求体积适当由于嵌入式系统自身的特点,对数据的存储和程序的运行都有较强的空间限制,所以嵌入式数据库首先应该保障的就是适当的体积。进一步来说就是占用尽量少的ROM、RAM及CPU的资源。可移植性嵌入式系统的平台种类繁多,因此嵌入式数据库应有一定的可移植性,以适用于不同的软硬件平台。特别是要考虑到不同存储介质的特性,比如NAND的读特性编程接口简单不必要提供完整的SQL和数据库连接方式。代码开源开源的代码在产品的开发过程中不仅可以减少开发成本,更重要的是为后期的维护完善和稳定运行都提供了最为彻底的解决方法。两个嵌入式数据库的介绍开源的SQLiteV6/V7上实现的小型数据库(简称KDB)SQLite介绍dongqiang@gmail.com纲要SQLite介绍SQLite的发展SQLite的优势SQLite的内部结构SQLite数据库的使用SQLite的命令行接口SQLite命令行使用SQLite数据库的编程接口C/C++接口简单应用自定义简单函数自定义聚合函数自定义排序函数PERL接口SQLite数据库在ASTRAL中的应用SQLite在多级关联中的应用SQLite在IPIS中的应用SQLite在web中的应用Google手机平台使用SQLiteSQLiteSQLite介绍SQLite的发展2000年由D.RichardHipp开始开发2001年发布2.0v2004年发布3.0v(采用了不同的数据文件格式以及编程接口)最新版本3.5.3目标易于管理、操作、维护、自定义以及提供易用的编程接口SQLite介绍SQLite的优势内存占用量小SQL92兼容比MySQL(2倍),PostgreSQL(20倍)快ACID兼容(原子性,一致性,独立性,可持久性),支持视图,子查询,触发器单个库文件中包含数据库引擎与接口,且其运行不依赖其它库可以将数据放进单个文件为C/C++,Perl,PHP等应用提供了接口免费,源码开发允许为SQL命令集动态添加自定义函数(简单函数及聚集函数),而无需重编SQLite库SQLite的内部结构在内部,SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite虚拟机中执行的程序集。1、接口将SQL语句传给SQL编译器2、SQL编译器选将SQL分解成为Token3、将Token传递给解析器进行解析4、由代码生成器生成虚拟机代码5、由虚拟机执行生成的程序6、SQLite库在磁盘上以B树形式组织(每个表和索引都有自己单独的B树,所有的B树都保存的同一个文件里面)7、OS层的操作SQL92兼容ALTERTABLEANALYZEATTACHDATABASEBEGINTRANSACTIONcommentCOMMITTRANSACTIONCREATEINDEXCREATETABLECREATETRIGGERCREATEVIEWCREATEVIRTUALTABLEDELETEDETACHDATABASEDROPINDEXDROPTABLEDROPTRIGGERDROPVIEWENDTRANSACTIONEXPLAINexpressionINSERTONCONFLICTclausePRAGMAREINDEXREPLACEROLLBACKTRANSACTIONSELECTUPDATEVACUUMSQLite数据库的使用SQLite命令行接口SQLite除库本身外,还包含命令行接口,可以在$SQLITE_HOME/bin下发现sqlite/sqlite3,命令行功能介绍运行方式:sqliteDBFile得到提示符sqlite运行.help(注意sqlite命令行提供的命令都以”.”开头,可以看到sqlite命令行接口提供下面的功能.SQLite命令行功能简介SQLite命令行功能简介DML/DDL语句的使用和以前一致,不做介绍.databases列出数据库文件名.tables?PATTERN?列出?PATTERN?匹配的表名.importFILETABLE将文件中的数据导入的文件中.dump?TABLE?生成形成数据库表的SQL脚本.outputFILENAME将输出导入到指定的文件中.outputstdout将输出打印到屏幕.modeMODE?TABLE?设置数据输出模式(csv,html,tcl….nullvalueSTRING用指定的串代替输出的NULL串.readFILENAME执行指定文件中的SQL语句.schema?TABLE?打印创建数据库表的SQL语句.separatorSTRING用指定的字符串代替字段分隔符.show打印所有SQLite环境变量的设置.quit退出命令行接口SQLite命令行功能使用下面举例说明SQLITE命令行的常规使用:SQLite数据导入创建数据文件这个文件可能来自其它的其它程序的输出之类,现只我们手功创建下面的数据文件data.txt(用逗号分隔):id,name,gender,age1,dq,male,242,jz,female,273.pp,male,264,cj,male,285,zc,male,25创建数据库表1.五种数据类型TEXT,NUMERIC,INTEGER,REAL,NONE2.数据类型的转换向保存的目标类型转换,如将text保存到integer,则试着将文件转为数字(int或float),如果转换失败,则做为文件保存.3.数据库表创建shellsqlite3test.dbsqlitecreatetableemployee(idintegerprimarykey,nametext,gendertext,ageinteger);SQLite命令行功能使用数据导入sqlite.importdata.txtemployeesqlite提示:data.txtline1:expected4coloumnsofdatabutfound1;从经验应该能看出是字符分隔符有问题,先来看看系统用什么样的提示符:.show之后可以看到separator:“|”,也就是说系统默认的分隔符为”|”面不是”,”,下面修改分隔字符:sqlite.separator“,”sqlite.importdata.txtemployeesqliteselect*fromemployeewhereid2;sqliteselect*
本文标题:嵌入式数据库介绍--姜庆东
链接地址:https://www.777doc.com/doc-5455405 .html