前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 数据库开发(一)SQLite3概述

Android 数据库开发(一)SQLite3概述

作者头像
用户1269200
发布2018-02-01 14:08:21
9790
发布2018-02-01 14:08:21
举报
文章被收录于专栏:刘望舒刘望舒

前言

SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目,设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在Android、iOS等移动操作系统中的数据库实现也是使用的SQLite3。对于Android开发者来说数据库并不算很好维护,所以深入了解SQLite数据库也变得很有必要,本文就来先介绍下SQLite3。

1.SQLite3简单介绍

SQLite并不是一个独立的进程,而是作为程序的一部分,应用程序经由编程语言内的API直接调用SQLite,这能有效的减少数据库访问的延迟,因为在一个进程中调用函数要比跨进程通信更有效率。SQLite将整个数据库作为一个单独的、可跨平台的文件存储再主机中,它采用了再写入数据时将整个数据库文件加锁的简单的设计,尽管写操作只能串行进行,但SQLite的读操作可以多任务同时进行。 程序库实现了多数的SQL-92标准,包括事务以及实现原子性、一致性、隔离性和持久性,但它缺失了某些特性,例如它仅部分支持触发器: 支持 FOR EACH ROW 触发器,但不支持 FOR EACH STATEMENT 触发器。尽管它支持大多数复杂查询,但它的ALTER TABLE 功能有所限制:只能添加和重命名列,不能修改或者删除列。因此,当需要修改或者删除列名时只能重新创建表。

2. 为什么要用 SQLite

  • 不需要一个单独的服务器进程或操作的系统(无服务器的);
  • 不需要配置,这意味着不需要安装或管理;
  • 非常小,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB;
  • 自给自足的,这意味着不需要任何外部的依赖;
  • 支持 SQL92(SQL2)标准的大多数查询语言的功能。 SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API;
  • 支持数据库大小至2TB;
  • 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

3. SQLite的系统架构

  SQLite采用了模块的设计,它由三个子系统,包括8个独立的模块构成;模块将复杂的查询过程分解为细小的工作进行处理。

如上图所示,sqlite主要由7个构件子系统(也就是模块)组成,这些模块被分割为两个部分: 前端解析系统和后端引擎。

前端解析系统

前端预处理应用程序传递过来的SQL语句和SQLite命令,对获取的编码分析,优化,并转换 为后端能够执行的SQLite内部字节编码。前端可分为三个模块:

  • 标示分析(Tokenizer) 将输入的SQL语句分成标识符;
  • 语法分析(Parser) 解析器分析通过标识器产生的标识分析语句的结构,并且得到一颗语法树。解析器同时也包含了重构语法树的优化器,因此能够找到一颗产生一个高效的字节编码程序的语法树。
  • 代码生成器(Code Generator) 代码生成器遍历语法树,并且生成一个等价的字节编码程序。
后端引擎

后端是用来解释字节编码程序的引擎,该引擎做的才是真正的数据库处理工作。后端部分由四个模块组成:

  • 虚拟机(VM) VM模块是一个内部字节编码语言的解释器。它通过执行字节编码语句来实现SQL语句的工作。它是数据库中数据的最终的操作者。它把数据库看成表和索引的集合,而表和索引则是一系列的元组或者记录。
  • B/B+树 B/B+树模块把每一个元组集组织进一个一次排好序的树状数据结构中,表和索引被分别置于单独的B+和B树中。该模块帮助VM进行搜索,插入和删除树中的元组。它也帮助VM创建新的树和删除旧的树
  • 页面调度程序(pager) 页面调度程序模块在原始文件的上层实现了一个面向页面的数据库文件抽象。它管理B/B+树使用的内存内缓存(数据库页的),另外,他也管理文件的锁定,并用日志来实现事物的ACID属性。
  • 操作系统交界面(system interface) 操作系统界面模块提供了对应于不同本地操作系统的统一交界面。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘望舒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1.SQLite3简单介绍
  • 2. 为什么要用 SQLite
  • 3. SQLite的系统架构
    • 前端解析系统
      • 后端引擎
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档