Android进阶#(5/12)独特高效的数据存储——SQLite数据库_SQLite3基本内容

来源:互联网 发布:空间大师软件 编辑:程序博客网 时间:2024/05/22 01:31
(5/12)独特高效的数据存储——SQLite数据库_SQLite3基本内容
  • SQLite是一个遵循ACID【注】的关系数据库管理系统。它包含在一个很小的C程序库中。
  • SQLite不是一个C/S结构的数据引擎,而是被集成在用户程序中。
  • SQLite实现了大多数SQL标准,使用动态的、弱类型的SQL语法。
  • SQLite可能是最广泛部署的数据库引擎,因为它正在被一些流行的浏览器、操作系统、嵌入式系统所使用。
  • 对于Android应用开发来说,数据库模块恰好是最难以维护的地方之一。
  • 深入了解SQLite数据库对于Android应用开发也是非常必要的。
【注】ACID,指数据库事务正确执行的四个基本要素的缩写。
包含:
  • 原子性(Atomicity)、
  • 一致性(Consistency)、
  • 隔离性(Isolation)、
  • 持久性(Durability)。

一个支持事务(Transaction)的数据库,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。


SQLite3基本介绍
不像常见的客户端/服务器结构数据库管理系统,SQLite引擎不是一个应用程序与之通信的独立进程。SQLite库链接到程序中,并成为应用的一部分。
它的主要优点:
  • 零配置
  • 储存在单一磁盘文件中的一个完整的数据库
  • 数据库文件可以在不同字节顺序的机器间自由共享
  • 支持数据库大小至2TB
  • 足够小,全部源代码大致3万行C代码,250KB
  • 比目前流行的大多数数据库对数据的操作要快
  • 开源
采用模块化设计,8个独立的模块构成,组成3个主要子系统:


这些模块被分割为两个部分,分别为前端解析系统和后端引擎。

SQLite前端解析系统

可分为3个模块
  • 词法分析器
  • 语法分析器
  • 代码生成器
截了几张图能说明其中关系:




实用工具(Utilities)
    内存分配和字符串比较函数位于util.c中。语法分析器使用的符号表用Hash表来维护,其实现位于hash.c中。源文件utf.c包含Unicode转换子程序。SQLite有自己的printf()实现(带一些扩展功能),在printf.c中,还有自己的随机数生成器,在random.c中。

测试代码(Test Code)
    如果你计算回归测试脚本,超过一半的SQLite代码将被测试。主要代码文件中有许多assert()语句。另外,源文件test1.c通过test5.c和md5.c实现只用于测试目的的一些扩展。os_test.c后端接口用来模拟断电,以验证页面高速缓存的崩溃恢复机制。

SQLite Version3.3.6源代码文件结构

 文件名称大小byte备注APImain.c35414SQLite Library的大部分接口 legacy.c3734sqlite3_exec的实现 table.c5464the sqlite3_get_table() and sqlite3_free_table()的实现,它们是sqlite3_exec的包装 preprare.c17983主要实现sqlite3_prepare()    分词器部分(Tokenizer)tokenize.c14495分词器的实现语法分析器部分(Parser)parser.c116917分析器的实现,由Lemon实现 parser.h6847分析器内部定义的关键字    代码生成器(Code Generator)update.c23878处理UPDATTE语句 delete.c21978处理DELETE语句 insert.c62026处理INSERT语句 trigger.c29065处理TRIGGER语句 attach.c15941处理ATTACHT 和DEATTACH语句 select.c112084处理SELECT语句 where.c75826处理WHERE语句 vacuum.c11005处理VACUUM语句 pragma.c34289处理PRAGMA命令 expr.c73963处理SQL语句中的表达式 auth.c7496主要实现sqlite3_set_authorizer() analyze.c13149实现ANALYZE命令 alter.c18414实现ALTER TABLE功能 build.c104052处理以下语法:CREATE TABLE, DROP TABLE, CREATE INDEX,DROP INDEX,creating ID lists,BEGIN TRANSACTION,COMMIT,ROLLBACK func.c34335实现SQL语句的函数语句 date.c24031与日期和时间转换有关的函数    虚拟机(Virtual Machine)vdbeapi.c23300虚拟机提供上层模块调用的API实现部分 vdbe.c143552虚拟机的主要实现部分 vdbe.h5309定义了VDBE的接口,VdbeOp结构体(代表一条指令) vdbeaux.c58741Vdbe.h的接口的实现 vdbeInt.h17595Vdbe.c的私有头文件,定义了VDBE常用的数据结构:Cursor——虚拟机中使用的游标, Mem——vdbe在内部把所有的SQL值当作一个Mem数据结构来处理,Vdbe——虚拟机数据结构 vdbemem.c26375操作”Mem”数据结构的函数 vdbefifo.c2927     B-Tree部分btree.h 5260头文件,定义了B-tree提供的操作接口 btree.c  215570B-Tree部分的主要实现,并定义了以下数据结构:Btree——Btree handler,BtCursor——使用的游标, BtLock——锁, BtShared——包含了一个打开的数据库的所有信息,MemPage——文件在内存存放在该数据结构中,aCellInfo    OS Interface部分os.h18355定义了为上层模块提供的操作函数,并定义了以下数据结构:   OsFile——描述一个文件   IoMethod——OsFile所支持的操作函数(对所有架构都适用的OS Interface) os.c2866对IoMethod中的函数的包装 os_win.c42975Windows平台下的OS Interface os_unix.c60831Unix平台下的OS Interface os_os2.c28451OS2平台下的OS Interface        其它部分utf.c20891与UTF编码有关的函数 util.c43575一些实用函数,比如:   sqlite3Malloc(),sqlite3FreeX() sqlite3.h63873SQLite的头文件,定义了提供给应用使用的API和数据结构。 sqliteInt.h78886定义了SQLite内部使用的接口和数据结构 printf.c29556主要实现与printf有关的函数 random.c3078随机数生成 hash.c11896SQLite使用的hash表 hash.h4033Hash 表头文件

标签: SQLite, 数据库, 嵌入式

阅读全文
1 0
原创粉丝点击