数据库-SQLite简介
SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库(轻型数据库)。
由于资源占用少、性能良好和零管理成本,嵌入式数据库有了它的用武之地,像Android、iPhone都有内置的SQLite数据库供开发人员使用,它的易用性可以加快应用程序的开发,并使得复杂的数据存储变得轻松了许多。SQLite第一个Alpha版本诞生于2000年5月
SQLite的特点(SQLite’s Features and Philosophy)
零配置(Zero Configuration)
可移植(Portability):
Compactness:
SQLite是被设计成轻量级,自包含的。
简单(Simplicity)
灵活(Flexibility)
可靠(Reliability):
SQLite的核心大约有3万行标准C代码,这些代码都是模块化的,很容易阅读。
架构(architecture)
SQLite采用了模块的设计,它由三个子系统,包括8个独立的模块构成。


上图是各模块的出现次序
Tokenizer(词法分析器),Parser(语法分析器),Code Generator(代码生成器),Virtual Machine(虚拟机),B-Tree(B-树),Pager(页面缓存),OS Interface(os接口)
前三个模块是用于SQL语句或代码解析,后四个模块主要用于执行。
为了解析SQL,一定有词法+语法分析+语义分析;为了能执行SQL语句,一定需要先生成执行计划,并通过优化器选择最优的执行计划;为了实现事务的ACID特性,一定有事务管理模块,并发控制模块和故障恢复模块等。
各个模块功能
Tokenizer:将SQL语句进行分词
Parser:将词法分析器的输出作为它的输入,结合语义(利用元数据判断,比如表是否存在),生成一个语法树,并最终转换化为执行计划树,这个过程中包含了通过优化器选择最佳路径。所以说整个词法分析+语法分析+语义分析+代价优化都在Parser这个模块中实现。
Code generator:将执行计划树生成虚拟机指令集,这个是sqlite比较独特的地方,主要为虚拟机做准备。
Virtual machine:通过执行代码生成器产生的指令集,来执行SQL语句满足用户的需求。通过操作数据库文件中的记录,来查询或修改数据。
B-Tree:将用户的记录通过B树结构来管理,每个用户表通过一个B+树管理,每个索引通过一个B树管理。VM通过tree模块实现从Btree中查询、插入、删除、更新记录,或者创建/删除一个Btree等。所有这些操作接口都由tree模块封装。VM执行指令时,直接调用接口即可
Pager:在tree模块看来,所有的B树的节点都是在内存中的,tree模块不直接与数据库文件打交道。Pager模块负责直接与数据库文件交互,它管理缓存,并负责内外存交互。同时它还负责并发控制和故障恢复。所以pager模块是sqlite中核心模块之一,事务的ACID特性全部靠pager模块实现
OS Interface:针对不同的操作系统,提供统一的操作文件接口。Pager模块并不关心底层的硬件和操作系统,在它看来,只需要调用统一的接口就能达到读写文件的目的。当然不仅限于此,除了文件IO,mutex,sleep,随机数生成的统一接口也是该模块封装的。
ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability).
SQLite优缺点
缺点:
并发访问的锁机制:SQLite在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错。
SQL标准支持不全:如:不支持外键约束
网络文件系统(NFS):有时候需要访问其它机器上的SQLite数据库文件,就会把数据库文件放置到网络共享目录上。这时候你就要小心了。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏)。原因据说是由于某些NFS的文件锁实现上有Bug。
不支持多并发应用:多个线程可以同时读,但是同时只能有一个线程写----参考SQLite多线程读写实践及常见问题总结【半月谈投稿】 ...
参考资料:
SQLite学习笔记(八)&&sqlite实现架构
SQLite的架构(The Architecture Of SQLite)
SQLite(轻量级最佳数据库) 原理分析和开发应用
Android中SQLite应用详解
android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
数据库-SQLite简介的更多相关文章
- SQLite简介
1.SQLite简介 SQLite第一个Alpha版本诞生于2000年5月. 至今已经有9个年头了. 而在今年的5月SQLite也迎来了一个新的里程: SQLite 3. SQLite官方网站: ht ...
- iOS基础 - 数据库-SQLite
一.iOS应用数据存取的常用方式 XML属性列表 —— PList NSKeyedArchiver 归档 Preference(偏好设置) SQLite3 Core Data(以面向对象的方式操作数据 ...
- 数据库-SQLite
技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong 数据库-SQLite 技术博客http:// ...
- 一、MySQL数据库之简介和安装
一.基础部分 1.数据库是简介 之前所学,数据要永久保存,比如用户注册的用户信息,都是保存于文件中,而文件只能存在于某一台机器上. 如果我们不考虑从文件中读取数据的效率问题,并且假设我们的程序 ...
- [深入浅出iOS库]之数据库 sqlite
一,sqlite 简介 前面写了一篇博文讲如何在 C# 中使用 ADO 访问各种数据库,在移动开发和嵌入式领域也有一个轻量级的开源关系型数据库-sqlite.它的特点是零配置(无需服务器),单磁盘文件 ...
- Android学习---如何创建数据库,SQLite(onCreate,onUpgrade方法)和SQLiteStudio的使用
一.android中使用什么数据库? SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程式庫中.它是D.RichardHipp建立的公有领域项目.SQLite 是一个软件库,实现 ...
- python 学习笔记6(数据库 sqlite)
26. SQLite 轻量级的关系型数据库 SQLite是python自带的数据库,可以搭配python存储数据,开发网站等. 标准库中的 sqlite3 提供该数据库的接口. 1. 基本语法如下 c ...
- 数据库SQLite在Qt5+VS2012使用规则总结---中文乱码
VS2012默认格式为 "GB2312-80",而有时我们用到字符串需要显示中文时,就会出现乱码.下面仅就Qt5和VS2012中使用数据库SQLite时,做一个简单的备忘录 #in ...
- Python信息采集器使用轻量级关系型数据库SQLite
1,引言Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.SQLite作为后端数据库,可以搭配Python建网站,或者为python网络爬虫存储数据.SQLite还在其它 ...
随机推荐
- 四则运算 Java (于泽浩,袁浩越)
GitHub 地址 一. 项目要求 题目 实现一个自动生成小学四则运算题目的命令行程序. 需求(全部完成) 使用 -n 参数控制生成题目的个数 Myapp.exe -n 10 使用 -r 参数控制题目 ...
- Date日期操作
获取年月日时分秒: package com.util; import java.text.DateFormat; import java.util.Calendar; import java.util ...
- LoadRunner 技巧之 IP欺骗 (推荐)
IP欺骗也是也loadrunner自带的一个非常有用的功能. 需要使用ip欺骗的原因:1.当某个IP的访问过于频繁,或者访问量过大是,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量, ...
- pgAdmin4 汉化
- c# async Task await Result 死锁
最近项目数据量较大,使用 async Task异步增加执行效率 遇到问题,当前有2个计算非常耗时,现在需要你优化一下,这2个计算并行执行,2个计算执行完成后将2个结果sum返回给用户 当前我是这样实现 ...
- git生成Key操作保存到GITHUB中
https://blog.csdn.net/sinat_23880167/article/details/78502528 1. 在git中通过命令: $ ssh-keygen Generating ...
- SSM集成Easyui框架及多模块开发的认识
首先我们需要建立好一个emaven项目,并且在pom.xml中导入响应的jar包, <?xml version="1.0" encoding="UTF-8" ...
- FFMpeg音频重采样和视频格式转
一.视频像素和尺寸转换函数 1.sws_getContext : 像素格式上下文 --------------->多副图像(多路视频)进行转换同时显示 2.struct SwsContext ...
- (2019)OCP 12c 062考试题库出现大量新题-4
4.Which four are true about creating and running a remote database scheduler jobs? A) A credential i ...
- CTFcrackTools-V3 – 一款旨在帮助 CTFer 在 CTF 中发挥作用的一个框架
CTFcrackTools-V3 CTFcrackTools重置版 作者:米斯特安全-林晨.摇摆.奶权 米斯特安全团队首页:http://www.hi-ourlife.com/ 部分插件来源:希望团队 ...