下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

SQLite基础知识

作者:课课家教育     来源: http://www.kokojia.com点击数:719发布时间: 2017-08-23 09:00:33

标签: 数据库SQLite数据库基础

  自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源,增加了管理的复杂性。随着软件应用程序逐渐模块模块化,一种新型数据库会比大型复杂的传统数据库管理系统更适应。嵌入式数据库直接在应用程序进程中运行,提供了零配置(zero-configuration)运行模式,并且资源占用非常少。

  一、SQLite介绍

  SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、phpjava等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。

  它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

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

  二、工作原理

  不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。[1]

  三、架构(architecture)

  SQLite采用了模块的设计,它由三个子系统,包括8个独立的模块构成。

SQLite基础知识_数据库_SQLite_数据库基础_课课家教育

  1.接口(Interface)

  接口由SQLiteCAPI组成,也就是说不管是程序、脚本语言还是库文件,最终都是通过它与SQLite交互的(我们通常用得较多的ODBC/JDBC最后也会转化为相应CAPI的调用)。

  2.编译器(Compiler)

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

  3.虚拟机(VirtualMachine)

  架构中最核心的部分是虚拟机,或者叫做虚拟数据库引擎(VirtualDatabaseEngine,VDBE)。它和Java虚拟机相似,解释执行字节代码。VDBE的字节代码由128个操作码(opcodes)构成,它们主要集中在数据库操作。它的每一条指令都用来完成特定的数据库操作(比如打开一个表的游标)或者为这些操作栈空间的准备(比如压入参数)。总之,所有的这些指令都是为了满足SQL命令的要求(关于VM,后面会做详细介绍)。

  4.后端(Back-End)

  后端由B-树(B-tree),页缓存(pagecache,pager)和操作系统接口(即系统调用)构成。B-tree和pagecache共同对数据进行管理。B-tree的主要功能就是索引,它维护着各个页面之间的复杂的关系,便于快速找到所需数据。而pager的主要作用就是通过OS接口在B-tree和Disk之间传递页面。

  四、SQLite的特点

  1.零配置(ZeroConfiguration)

  2.可移植(Portability):

  它是运行在Windows,Linux,BSD,MacOSX和一些商用Unix系统,比如Sun的Solaris,IBM的AIX,同样,它也可以工作在许多嵌入式操作系统下,比如QNX,VxWorks,PalmOS,Symbin和WindowsCE。

  3.Compactness:

  SQLite是被设计成轻量级,自包含的。oneheaderfile,onelibrary,andyou’rerelational,noexternaldatabaseserverrequired

  4.简单(Simplicity)

  5.灵活(Flexibility)

  6.可靠(Reliability):

  SQLite的核心大约有3万行标准C代码,这些代码都是模块化的,很容易阅读。

  五、SQLite功能特性

  1.ACID事务

  2.零配置–无需安装和管理配置

  3.储存在单一磁盘文件中的一个完整的数据库

  4.数据库文件可以在不同字节顺序的机器间自由的共享

  5.支持数据库大小至2TB

  6.足够小,大致13万行C代码,4.43M

  7.比一些流行的数据库在大部分普通数据库操作要快

  8.简单,轻松的API

  9.包含TCL绑定,同时通过Wrapper支持其他语言的绑定

  10.良好注释的源代码,并且有着90%以上的测试覆盖率

  11.独立:没有额外依赖

  12.源码完全的开源,你可以用于任何用途,包括出售它

  13.支持多种开发语言,C,C++,PHP,Perl,Java,C#,Python,Ruby等

  六、SQLite常用函数

  SQLite有许多内置函数用于处理字符串或数字数据。下面列出了一些有用的SQLite内置函数,且所有函数都是大小写不敏感,这意味着您可以使用这些函数的小写形式或大写形式或混合形式。欲了解更多详情,请查看SQLite的官方文档:

  序号函数&描述

  1.SQLiteCOUNT函数SQLiteCOUNT聚集函数是用来计算一个数据库表中的行数。

  2.SQLiteMAX函数SQLiteMAX聚合函数允许我们选择某列的最大值。

  3.SQLiteMIN函数SQLiteMIN聚合函数允许我们选择某列的最小值。

  4.SQLiteAVG函数SQLiteAVG聚合函数计算某列的平均值。

  5.SQLiteSUM函数SQLiteSUM聚合函数允许为一个数值列计算总和。

  6.SQLiteRANDOM函数SQLiteRANDOM函数返回一个介于-9223372036854775808和+9223372036854775807之间的伪随机整数。

  7.SQLiteABS函数SQLiteABS函数返回数值参数的绝对值。

  8.SQLiteUPPER函数SQLiteUPPER函数把字符串转换为大写字母。

  9.SQLiteLOWER函数SQLiteLOWER函数把字符串转换为小写字母。

  10.SQLiteLENGTH函数SQLiteLENGTH函数返回字符串的长度。

  11.SQLitesqlite_version函数SQLitesqlite_version函数返回SQLite库的版本。

  七、注意事项

  在确定是否在应用程序中使用SQLite之前,应该考虑以下几种情况:

  1.有没有可用于SQLite的网络服务器。从应用程序运行位于其他计算机上的SQLite的惟一方法是从网络共享运行。这样会导致一些问题,像UNIX®和Windows®网络共享都存在文件锁定问题。还有由于与访问网络共享相关的延迟而带来的性能下降问题。

  2.SQLite只提供数据库级的锁定。虽然有一些增加并发的技巧,但是,如果应用程序需要的是表级别或行级别的锁定,那么DBMS能够更好地满足您的需求。

  3.正如前面提到的,SQLite可以支持每天大约100,00次点击率的Web站点——并且,在某些情况下,可以处理10倍于此的通信量。对于具有高通信量或需要支持庞大浏览人数的Web站点来说,应该考虑使用DBMS。

  4.SQLite没有用户帐户概念,而是根据文件系统确定所有数据库的权限。这会使强制执行存储配额发生困难,强制执行用户许可变得不可能。

  5.SQLite支持多数(但不是全部)的SQL92标准。不受支持的一些功能包括完全触发器支持和可写视图。

  如果您感到其中的任何限制会影响您的应用程序,那么您应该考虑使用完善的DBMS。如果您可以解除这些限制问题,并且对快速灵活的嵌入式开源数据库引擎很感兴趣,则应重点考虑使用SQLite。

  一些能够真正表现SQLite优越性能的领域是Web站点,可以使用SQLite管理应用程序数据、快速应用程序原型制造和培训工具。

  由于资源占用少、性能良好和零管理成本,嵌入式数据库有了它的用武之地,它将为那些以前无法提供用作持久数据的后端的数据库的应用程序提供了高效的性能。如今没有必要使用文本文件来实现持久存储。SQLite之类的嵌入式数据库的易于使用性可以加快应用程序的开发,并使得小型应用程序能够完全支持复杂的SQL。这一点对于对于小型设备空间的应用程序来说尤其重要。

  嵌入式数据库对于加快应用程序开发也很重要,尤其是在用于数据库抽象层(例如PEAR::DB或ezSQL)时。最后,SQLite正在积极开发中,未来一定会有新的功能,会对开源社区更有用。

  小编结语:

  更多内容尽在课课家教育!

赞(29)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程