• 数据库-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应用详解

    SQLite数据库简介

    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)

  • 相关阅读:
    VB.net和c#利用IOleCommandTarget接口实现Html编辑器的Glyphs(原创)
    vb.net中用com通讯实现对HTMLDocument的事件捕捉(原创)
    自己写的用JS脚本定时执行Web地址并且得到它的源代码的页面程序
    Alice:曾经的CS反恐精英顶尖高手
    .net利用IOleCommandTarget接口实现Html编辑器表格边框的显示和隐藏(原创)
    ASP用语法及函数
    最近在研究质量统计与分析方面的项目开发
    propertyGrid实现选项(原创)
    .Net平台AOP技术研究
    c# propertyGrid属性控件跟Htmlelement元素绑定(原创精华)
  • 原文地址:https://www.cnblogs.com/gne-hwz/p/6773467.html
Copyright © 2020-2023  润新知