`
i_am_birdman
  • 浏览: 281801 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

SQLite入门与分析(一)---简介

 
阅读更多

写在前面:出于项目的需要,最近打算对SQLite的内核进行一个完整的剖析,在此希望和对SQLite有兴趣的一起交流。我知道,这是一个漫长的过程,就像曾经去读Linux内核一样,这个过程也将是辛苦的,但我相信结果一定是美好的... ...接下来是第一章。

 

1、SQLite介绍

自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源,增加了管理的复杂性。随着软件应用程序逐渐模块模块化,一种新型数据库会比大型复杂的传统数据库管理系统更适应。嵌入式数据库直接在应用程序进程中运行,提供了零配置(zero-configuration)运行模式,并且资源占用非常少。
SQLite是一个开源的嵌入式关系数据库,它在2000年由D. Richard Hipp发布,它的减少应用程序管理数据的开销,SQLite可移植性好,很容易使用,很小,高效而且可靠。
SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管理。因为客户端和服务器在同一进程空间运行。SQLite 的数据库权限只依赖于文件系统,没有用户帐户的概念。SQLite 有数据库级锁定,没有网络服务器。它需要的内存,其它开销很小,适合用于嵌入式设备。你需要做的仅仅是把它正确的编译到你的程序。

 

2、架构(architecture) 

SQLite采用了模块的设计,它由三个子系统,包括8个独立的模块构成。
 
2.1、接口(Interface)
接口由SQLite C API组成,也就是说不管是程序、脚本语言还是库文件,最终都是通过它与SQLite交互的(我们通常用得较多的ODBC/JDBC最后也会转化为相应C API的调用)。

2.2、编译器(Compiler)
在编译器中,分词器(Tokenizer)和分析器(Parser)对SQL进行语法检查,然后把它转化为底层能更方便处理的分层的数据结构---语法树,然后把语法树传给代码生成器(code generator)进行处理。而代码生成器根据它生成一种针对SQLite的汇编代码,最后由虚拟机(Virtual Machine)执行。

2.3、虚拟机(Virtual Machine)
架构中最核心的部分是虚拟机,或者叫做虚拟数据库引擎(Virtual Database Engine,VDBE)。它和Java虚拟机相似,解释执行字节代码。VDBE的字节代码由128个操作码(opcodes)构成,它们主要集中在数据库操作。它的每一条指令都用来完成特定的数据库操作(比如打开一个表的游标)或者为这些操作栈空间的准备(比如压入参数)。总之,所有的这些指令都是为了满足SQL命令的要求(关于VM,后面会做详细介绍)。
 
2.4、后端(Back-End)
后端由B-树(B-tree),页缓存(page cache,pager)和操作系统接口(即系统调用)构成。B-tree和page cache共同对数据进行管理。B-tree的主要功能就是索引,它维护着各个页面之间的复杂的关系,便于快速找到所需数据。而pager的主要作用就是通过OS接口在B-tree和Disk之间传递页面。

3、SQLite的特点(SQLite’s Features and Philosophy)
3.1、零配置(Zero Configuration)
3.2、可移植(Portability):
它是运行在Windows,Linux,BSD,Mac OS X和一些商用Unix系统,比如Sun的Solaris,IBM的AIX,同样,它也可以工作在许多嵌入式操作系统下,比如QNX,VxWorks,Palm OS, Symbin和Windows CE。
3.3、Compactness:
SQLite是被设计成轻量级,自包含的。one header file, one library, and you’re relational, no external database server required
3.4、简单(Simplicity)
3.5、灵活(Flexibility)
3.6、可靠(Reliability):
SQLite的核心大约有3万行标准C代码,这些代码都是模块化的,很容易阅读。

主要参考:The Definitive Guide to SQLite

分享到:
评论

相关推荐

    SQLite入门与分析

    在SQLite入门与分析(七)---浅谈SQLite的虚拟机.doc中,主要讲解了SQLite如何通过虚拟机执行SQL语句。SQLite的虚拟机,也称为VDBE(Virtual Database Engine),是SQLite的核心组件。它负责解析SQL语句,将其转化为一...

    SQLite入门与分析.doc

    SQLite 是一个开源的嵌入式关系数据库管理系统,由 D. Richard Hipp 在 2000 年发布。它被设计成轻量级、高可移植性的解决方案,适用于那些需要简单数据库功能的应用程序,尤其是嵌入式环境。SQLite 的特点是零配置...

    嵌入式数据库SQLite入门与分析(1-9).

    ### 嵌入式数据库SQLite入门与分析 #### 一、SQLite简介 SQLite是一种轻量级的嵌入式关系型数据库管理系统,最初于2000年由D.Richard Hipp开发并发布。作为一种嵌入式数据库,SQLite与其他传统数据库管理系统(如...

    SQLite入门与分析.pdf

    SQLite不依赖于外部的数据库服务器进程,而是直接嵌入到使用它的应用程序中,并与应用程序共享同一个进程空间。这种设计使得SQLite非常适用于需要轻量级数据库解决方案的场景,尤其是在嵌入式系统和移动设备上。 ...

    SQLite入门分析

    SQLite入门与分析(四)---Page Cache之事务处理.doc SQLite入门与分析(五)---Page Cache之并发控制.doc SQLite入门与分析(六)---再谈SQLite的锁.doc

    Sqlite3入门与分析.pdf

    ### Sqlite3入门与分析知识点概述 #### 一、SQLite简介 SQLite是一个开源的嵌入式关系型数据库管理系统,最初由D. Richard Hipp在2000年发布。相较于传统的数据库管理系统,SQLite具有以下特点: - **零配置**:...

    SQLite入门资料大全

    我自己寻找整理的SQLite资料,希望对大家有帮助。清单如下: Android 数据库技术 sqlite3-基础教程 sqlite3使用详解 sqlite命令行手册(中文) ...SQLite入门与分析 SQLite数据库文件格式全面分析

    SQLite数据库入门与分析技术白皮书

    1. **接口(Interface)**:SQLite C API是与SQLite交互的主要途径,无论是原生程序、脚本语言还是库文件,最终都会通过C API与SQLite进行通信。其他如ODBC/JDBC等接口也会转化为C API调用。 2. **编译器(Compiler)**...

    SQLite入门.doc

    ### SQLite入门知识点详解 #### 一、SQLite简介 SQLite是一种轻量级的嵌入式数据库管理系统,最初由D. Richard Hipp在2000年发布。作为一种开源解决方案,SQLite的目标是减少应用程序在管理数据时所需的开销。它以...

    sqlite源码及分析

    3. 学习SQLite shell:SQLite提供了一个命令行工具,可以用来直接与数据库交互,进行数据操作和简单的查询。 4. 源码阅读:逐步深入到源码中,理解关键模块的功能和实现方式,如SQL解析过程、B树操作、事务管理等。...

    Android开发入门与实战体验-ppt

    **Android开发入门与实战体验** Android开发是移动应用开发领域中的一个重要组成部分,它基于Java语言,为全球数亿智能手机和平板设备提供操作系统支持。这份"Android开发入门与实战体验-ppt"提供了丰富的学习资源...

    php+sqlite(入门案例)

    **PHP与SQLite入门案例** PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其在Web开发领域。SQLite,作为一个嵌入式的关系型数据库,因其轻量级、无服务器、自包含的特性,常被用作PHP开发中的数据...

    SQLITE入门至精通

    入门SQLite的第一步是下载SQLite的最新版本,例如3.3.4,可以从www.sqlite.org获取。解压缩后,你可以直接通过命令行工具SQLite3.exe创建数据库文件。例如,输入`SQLite3 d:\test.db`就会在D盘创建名为test.db的...

    SQLite学习手册-中文全本.pdf

    此外,SQLite没有独立的服务器进程,与客户端程序运行在同一个进程空间内,通过进程内通信实现高效的数据操作。尽管这种结构在运行时保护性较差,容易因为应用程序问题导致进程崩溃,但其简洁性和高效性依然使其在很...

Global site tag (gtag.js) - Google Analytics