




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. SQLite的特性1. SQLite支持事务,满足(ACID)特性:即使在系统crash掉或者掉电的情况下,一样可以恢复。2. 零配置,不需要安装或者初始化管理即可使用。 3。可移植性:跨平台:也很容易移植到其它平台下边 4. 紧凑性:整个数据库存储在跨平台的磁盘文件里头 4.简单性:SQLite的API是最简单和最容易使用的API之一,它的API被很好的归档记录,它的设计便于帮助你用多种方式定制 6:灵活性:关系数据库前端强大的能力和灵活性,B-树后台的简单性和紧凑性。 使用SQLIte,就省去了对大型数据库的配制问题,没有网络和连接问题的困扰,没有平台限制,没有许可费,没有版税费。7:自由许可:SQLite的所有代码都在公开的范围之内,没有许可的问题,核心源代码的任何部分没有版权声明,代码的每个贡献者被要求签署宣誓书,特别声明拒绝对所贡献代码的任何版权收益。8:可靠性:SQLite源代码不仅公开免费,它的质量也很高,C代码整洁、模块化,并带有恰当的注释。9:便利性:SQLite还有许多独特的能带来很大便利的特性。这些特性包括动态类型、冲突解决和连接多个数据库到单个会话的能力。 10:. 支持TB和GB大小的字符串和大对象 11:. 常规操作比目前流行的C/S结构的数据库引擎要快 :12. 源码注释完美,测试覆盖率达100% 13: 使用ANSI-C来开发,使用了TCL绑定 14: 源码以单文件的形式发布,便于用户将其集成到自己的项目当中 15:. 随同发布的有一个命令行可执行程序,用于管理SQLite数据库。2. 适合应用SQLite的场合1、网站: 作为数据库引擎SQLite适用于中小规模流量的网站 2、嵌入式设备和应用软件 3:应用程序文件格式 :4:替代某些特别的文件格式 :5:内部的或临时的数据库 :6:命令行数据集分析工具 7:在Demo或测试版的时候作为企业级数据库的替代品 :8:数据库教学 :9:试验SQL语言的扩展3. SQLite的原子提交原理原子提交”是SQLite这种支持事务的数据库的一个重要特性。原子提交意味着某个事务中数据库的变化会完整完成或者根本不完成。SQLite的原子提交逻辑会使得一个事务中的变化就象同时发生的一样。事务的原子是SQLite的重要特性,即使事务由于操作系统出错或掉电发生中断也能保持其原子性。1、硬件设定 2、单个文件提交包括:实始状态、申请一个共享锁、从数据库读取信息、申请一个Reserved Lock、生成一个回滚日志、修改用户进程中的数据页、刷新回滚日志文件到存储设备、获得一个独享锁、将变更数据写到数据库文件、刷新变更到存储、刷新回滚日志文件、释放锁、回滚 3、回滚:产生事件源出错 、Hot Rollback Journals、取得数据库的一个独享锁、 回滚没有完成的变更、删除hot日志文件、如果一切正常,没有什么未完成的写操作 4、多文件提交:每个数据库文件单独拥有日志文件、主日志文件、更新回滚日志文件头、修改数据库文件、删除主日志文件、清除回滚日志5、原子操作的一些实现细节:总是记录整个扇区、写日志文件时垃圾的处理、提交前缓存溢出、6、优化:在事务间保存缓存、独享访问模式、不必将空闲页写进日志、单页更新及扇区原子写、Filesystems With Safe Append Semantics、7、原子提交行为测试8:可能发生的问题:缺乏文件锁实现、不完整的磁盘刷新、文件部分地删除、写入到文件中的垃圾、删除掉或更名了“hot”日志文件、4. SQLite的体系结构1SQLite体系结构SQLite 有一种优雅、 标准化的设计。它可以分成8个主要子系统5. 论述SQLite数据类型中“类型亲缘性”的概念为了最大化SQLite和其它数据库引擎之间的数据类型兼容性,SQLite提出了类型亲缘性的概念。我们理解类型亲缘性 ,在表字段被声明之后,SQLite都会根据该字段声明时的类型为其选择一种亲缘类型,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式,除非亲缘类型不匹配或无法转换当前数据到该亲缘类型,这样SQLite才会考虑其它更适合该值的类型存储该值。五种亲缘类型:TEXT : NUMERIC、INTEGER、REAL、NONE6. SQLite数据库文件格式SQLite有3类数据库。除内存数据库外,SQLite把每个数据库(main或temp)都存储到一个单独的文件中。SQLite数据库文件由固定大小的“页(page)”组成,页大小可以在数据库刚刚创建时设置,一旦创建了数据库对象之后,这个值就不能再改变了。SQLite在程序中对文件页数进行了限制,文件页数的最大值默认为1073741823,在sqliteLimit.h中定义,可以在运行时改变。页的类型可以是:Btree页、空闲(free)页或溢出(overflow)页。SQLite还有两种页。一种称为“锁页(lockingpage)”。只有1页,位于数据库文件偏移为1G开始的地方,如果文件不足1G,就没有此页,另一种称为“指针位图页(数据库中第一个页(page1)永远是Btree页。Page1的前100个字节是一个对数据库文件进行描述的“文件头”。它包括数据库的版本、格式的版本、页大小、编码等所有创建数据库时设置的永久性参数,在SQLite文件中,所有的整数都采用大端格式,即高位字节在前。7. 论述SQLite的加锁和并发控制在SQLite中,锁和并发控制机制都是由pager_module模块负责处理的,如ACID,在含有数据修改的事物中,该模块将确保或者所有的数据修改全部提交,或者全部回滚。与此同时,该模块还提供了一些磁盘文件的内存Cache功能。事实上,pager_module模块并不关心数据库存储的细节,如B-Tree、编码方式、索引等,它只是将其视为由统一大小(通常为1024字节)的数据块构成的单一文件,其中每个块被称为一个页(page)。在该模块中页的起始编号为1,即第一个页的索引值是1,其后的页编号以此类推。二、文件锁:1). UNLOCKED:2). SHARED 3). RESERVED 4). PENDING 5). EXCLUSIVE:三、回滚日志 四、数据写入 在SQLite3中,通过使用PENDING锁则有效的避免了写饥饿情形的发生。当某一进程持有PENDING锁时,已经存在的读操作可以继续进行,直到其正常结束,但是新的读操作将不会再被SQLite接受,SQLite3在实现上确实针对锁和并发控制做出了一些精巧的变化,特别是对于事物这一SQL语言级别的特征。在缺省情况下,SQLite3会将所有的SQL操作置于antocommit模式下,这样所有针对数据库的修改操作都会在SQL命令执行结束后被自动提交8. 介绍SQLite的预写日志(WAL)原理与用途 WAL机制的原理是:修改并不直接写入到数据库文件中,而是写入到另外一个称为WAL的文件中;如果事务失败,WAL中的记录会被忽略,撤销修改;如果事务成功,它将在随后的某个时间被写回到数据库文件中,提交修改。WAL日志是数据库中一种高效的日志算法。从数据库原理而言,它实现的是redo日志模式。即修改数据库时,不直接修改数据库内容,而是将修改完的数据写入日志中,并同步到磁盘上,这样对其他读进程就没有影响。如果数据库崩溃,重启后扫描日志文件,然后更新的数据库中。为了提高效率,WAL日志模式提供checkpoint操作,来定时进行数据更新操作。 文件格式的兼容性、读和写可以完全地并发执行,不会互相阻塞、磁盘I/O行为更容易被预测。9. 简述Android中数据存储的几种方式它的存储方式也不外乎这几种,按方式总体来分,也是文件,数据库和网络。但从开发者的角度来讲它可以分为以下五种方式: 1、 Shared Preferences:使用键值对存储私有的简单数据。2、 Internal Storage:在设备内部存储器中存储私有数据3、 External Storage:在外部存储器上存储公共数据4、 SQLite Database :利用数据库存储结构化数据5、 Netwok Connection:通过网络服务器存储数据10. 论述SQLite的页缓冲管理SQLite缓存替换算法是LRU(Least Recently Used,最近最少使用算法)。实现比较简单,主要是由两部分组成:hash表。hash表主要是加快对缓存中数据页的查找速度。hash表后面是一串链表,保存满足该hash函数的所有的页。SQLite是通过页号来进行hash操作的,hash完找到链表的头结点,然后依次查找。LRU链表。LRU链表是通过SQLite操作hash表中的元素的来实现的。SQLite对hash表中页进行一次操作,就会将该页放到LRU链表的头部,因为该页是最近最常用到的。如果缓存需要替换,则需要从LRU链表尾部取出,然后回写到数据库文件中。所以,在内存中对页的操作至少需要四个指针,两个实现hash表的后续链表,两个实现LRU链表。11. 论述SQLite的日志管理数据库理论中,日志分三种:undo,redo,undoredo。undo日志:在修改DB文件前,将欲修改的DB内容写入日志redo日志:在修改DB文件前,将想做的修改动作写入日志undoredo日志:在修改DB文件前,将DB原内容跟想做的操作都写入日志SQLite中,原始的日志模式就是undo日志模式。这种模式会增加很多的IO操作。想修改DB,必须先把原DB写入日志,这就是IO,修改完DB,还需要对日志进行IO。所以undo模式的IO操作比较多。SQLite中,另外的一种模式就是WAL机制,WAL(write ahead log)就是对redo日志机制的一种实现。简单来说就是把想对数据库进行操作的动作先都写到日志里面,然后对DB进行操作,操作完后,只把日志刷新的磁盘中,而不需要把DB在内存中的部分刷新到磁盘里面,这样,相对与undo日志机制,redo机制就使得IO操作在系统的安排下进行(比如缓冲区替换等等),而不需要立即进行IO操作。12. 描述SQLite中B+树的用途及结构SQLite采用的是B+树来存储表中的索引和数据。B树的键及其值既存储在内部节点上,也存储在叶节点上,所有的叶节点具有相同的深度。 B+树作了些微改变,键和数据会存储到叶节点上,并且按照键值排好序。而内部节点只存储键值。相当于有两条查找路径。 SQLite从根叶开始创建B+树,一般从页1开始。它以独立的页来存储树节点,每页一个节点,这些页要分内部页还是叶子页。对于每个节点,任何项(数据)及其键值组合成一个payload, 每页都会预设一个payload值,当实际的payload超过此值时,超出的字节就会填充到溢出页,多余的payload会依次存储到溢出页形成的链表里。内部页和叶子页都可以有溢出页。B+树模块管理着所有的页。13. 写出三种通过SQLite语言扩展使用SQLite的具体语言,以及在这些语言下使用SQLite数据库的主要步骤和关键语句。Perl, Python, Ruby, Java, Tcl, and PHPPerl连接 为了验证安装了SQLite驱动器,在Perl里使用DBI函数available_drivers():use DBI; print Drivers: . join(, , DBI-available_drivers(), n; 你用标准DBI:connect函数连接一个数据库: use DBI; my $dbh = DBI-connect( dbi:SQLite:dbname=foods.db, , , RaiseError = 1 ); $dbh-disconnect; 第二和第三个参数对应于驱动器名和数据库名。第三和第四个对应用户名和密码,这些对SQLite不合适。Python如提到过的,在Python 2.5和更新版本里的内建模块被命名为sqlite3。如果使用单独的源pysqlite包,它是在pysqlite2里。DB API模块设置在dbapi2里。当你同时正想着PySQLite版本号和SQLite版本号时,这个有时是混乱的。你用模块的connect()函数连接数据库,传递进相关的名字或者你想打开的数据库文件的完整文件路径对于Python 2.5+中的内建pysqlite,一个连接如下:import sqlite3 db = sqlite3.connect(foods.db) With the separately sourced package for pysqlite, your connect changes to the following: from pysqlite2 import dbapi2 as sqlite3 db = sqlite3.connect(foods.db) 一般的规则应用:通过传递进名字:memory:作为数据库名,你能用内存数据库;新的数据库为新文件创建;等等。你能在包括的模块里看到唯一真正的变种,pysqlite的各个源模块是在输入语义。从现在开始,我们将认为你愉快地转换到这种技术,该技术最好的适合了你使用pysqlite的偏爱方式。TCLSQLite扩展位于sqlite3包,它必须用包请求指令装载。为了连接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年销售岗位面试攻略及经典预测题解析
- 2025年初中化学特岗教师招聘考试高频考点梳理
- 2025年计算机等级考试四级网络工程师模拟题及答案解析
- 电力基础知识培训资料课件
- 2025年财务管理师考试模拟题及解析
- 2025年人工智能面试模拟题详解及答案
- 2025年市场推广专员招聘笔试模拟题及参考答案集萃
- 2025年国际商务谈判策略与沟通技巧题库
- 2025年煤气工程岗位面试技巧大揭秘模拟题集与答案
- 2025年银行柜员岗位招聘考试模拟卷及答案解析
- 2024年泰州市靖江市公安局招聘警务辅助人员真题
- 国际快递基本知识培训课件
- 塔吊拆除安全操作方案模板
- 巡检员质量培训
- 不锈钢棚施工方案
- 第2章 动车组检修工艺基础动车组维护与检修
- 筋针疗法牛君银培训课件
- 溺水伤亡事故应急预案演练方案
- 公路硬化报告范文
- 智慧羊肚菌种植示范基地解决方案
- 纳迪亚之宝全流程攻略 100%完结完整通关指南
评论
0/150
提交评论