资源预览内容
第1页 / 共69页
第2页 / 共69页
第3页 / 共69页
第4页 / 共69页
第5页 / 共69页
第6页 / 共69页
第7页 / 共69页
第8页 / 共69页
第9页 / 共69页
第10页 / 共69页
亲,该文档总共69页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
嵌入式数据库介绍 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 媲美内存的读取速度相对较慢的写入速度 在写入之前必须擦除 在数据库的设计中 必须考虑这一点 NANDVersusNOR NANDVersusNOR Source ToshibaadEETimesMarch8 2004 TypicalNANDLayout K9F1208U0M ChallengesOfNANDFlash FactoryBadBlocksBitReadErrorsProgramandEraseErrorsEraseCycleLimitations 嵌入式数据库的挑战 传统的RDBMS建立在以磁盘 磁鼓等DASD为存储介质的基础上的 而嵌入式系统常见的FlashMemory等存储介质和DASD在特性上有较大的不同 传统RDBMS的很多假设不再成立 传统的RDBMS的优化策略建立在对系统资源的最小占用 提高系统的吞吐量 而嵌入式RDBMS面对着可能是非常不同的优化目标 嵌入式RDBMS系统面临着苛刻的软 硬件运行环境 要求数据库结构上加以考虑 嵌入式数据库运行环境和存储介质多种多样 用单一的体系结构做到 通吃 几乎是不可能 嵌入式数据库的基本要求 体积适当由于嵌入式系统自身的特点 对数据的存储和程序的运行都有较强的空间限制 所以嵌入式数据库首先应该保障的就是适当的体积 进一步来说就是占用尽量少的ROM RAM及CPU的资源 可移植性嵌入式系统的平台种类繁多 因此嵌入式数据库应有一定的可移植性 以适用于不同的软硬件平台 特别是要考虑到不同存储介质的特性 比如NAND的读特性编程接口简单不必要提供完整的SQL和数据库连接方式 代码开源开源的代码在产品的开发过程中不仅可以减少开发成本 更重要的是为后期的维护完善和稳定运行都提供了最为彻底的解决方法 两个嵌入式数据库的介绍 开源的SQLiteV6 V7上实现的小型数据库 简称KDB SQLite介绍 dongqiang 纲要 SQLite介绍SQLite的发展SQLite的优势SQLite的内部结构SQLite数据库的使用SQLite的命令行接口SQLite命令行使用SQLite数据库的编程接口C C 接口简单应用自定义简单函数自定义聚合函数自定义排序函数PERL接口SQLite数据库在ASTRAL中的应用SQLite在多级关联中的应用SQLite在IPIS中的应用SQLite在web中的应用 Google手机平台使用SQLite SQLite SQLite介绍 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传递给解析器进行解析 由代码生成器生成虚拟机代码 由虚拟机执行生成的程序6 SQLite库在磁盘上以B树形式组织 每个表和索引都有自己单独的B树 所有的B树都保存的同一个文件里面 7 OS层的操作 SQL92兼容 ALTERTABLEANALYZEATTACHDATABASEBEGINTRANSACTIONcommentCOMMITTRANSACTIONCREATEINDEXCREATETABLECREATETRIGGERCREATEVIEWCREATEVIRTUALTABLEDELETEDETACHDATABASEDROPINDEXDROPTABLE DROPTRIGGERDROPVIEWENDTRANSACTIONEXPLAINexpressionINSERTONCONFLICTclausePRAGMAREINDEXREPLACEROLLBACKTRANSACTIONSELECTUPDATEVACUUM SQLite数据库的使用 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创建数据库表五种数据类型TEXT NUMERIC INTEGER REAL NONE数据类型的转换向保存的目标类型转换 如将text保存到integer 则试着将文件转为数字 int或float 如果转换失败 则做为文件保存 数据库表创建shell sqlite3test dbsqlite createtableemployee idintegerprimarykey nametext gendertext ageinteger SQLite命令行功能使用 数据导入sqlite importdata txtemployeesqlite提示 data txtline1 expected4coloumnsofdatabutfound1 从经验应该能看出是字符分隔符有问题 先来看看系统用什么样的提示符 show之后可以看到separator 也就是说系统默认的分隔符为 面不是 下面修改分隔字符 sqlite separator sqlite importdata txtemployeesqlite select fromemployeewhereid 2 sqlite select fromemployeewherename 9999999999999 上面这句用来说明text integer 这个和比较字符的内码得到的结果是相同的 数据比较NULLselectid 2 name dong gender male fromemployee 0 1 10 1 01 1 11 0 11 1 1 SQLite命令行功能使用 下面举例说明SQLITE命令行的常规使用 SQLite数据导出将数据表导出为数据创建脚本sqlite dumpemployee上面的命令可以得到数据表相关的SQL语句 为了将输出保存的文件中 执行下面的命令 sqlite outputcreate sqlsqlite dumpemployeesqlite outputstdout 将输出恢复到标准输出 将特定数据导出成数据文件sqlite outputdata tmp htmlsqlite select fromemployee sqlite modehtmlemployeesqlite select fromemployee sqlite outputstdout上面的几条命令将employee中的数据以html的格式保存到data tmp html中 shell sqlitetest db dump sed es dq dongqiang sqlite3test2 db上面的命令行操作将test db中的dq全部替换为dongqiang然后导入test2 db中创建索引createindexemployee IDonemployee id 创建触发器createTriggerinsert triggerAFTERINSERTONemployeeBEGIN 动作 比如记数 修改时间等END SQLite的编程接口简介 SQLite3C C 常见接口intsqlite3 open 数据库的打开 包括文件和内存数据库两种 memory intsqlite3 close 数据库的关闭
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号