一、简介:

SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB、MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事务、数据表和索引等。事实上,尽管SQLite拥有诸多关系型数据库的基本特征,然而由于应用场景的不同,它们之间并没有更多的可比性。下面我们将列举一下SQLite的主要特征:

1). 管理简单,甚至可以认为无需管理。

2). 操作方便,SQLite生成的数据库文件可以在各个平台无缝移植。

3). 可以非常方便的以多种形式嵌入到其他应用程序中,如静态库、动态库等。

4). 易于维护。

综上所述,SQLite的主要优势在于灵巧、快速和可靠性高。SQLite的设计者们为了达到这一目标,在功能上作出了很多关键性的取舍,与此同时,也失去了一些对RDBMS关键性功能的支持,如高并发、细粒度访问控制(如行级锁)、丰富的内置函数、存储过程和复杂的SQL语句等。正是因为这些功能的牺牲才换来了简单,而简单又换来了高效性和高可靠性。

二、SQLite的主要优点:

1. 一致性的文件格式:

在SQLite的官方文档中是这样解释的,我们不要将SQLite与Oracle或PostgreSQL去比较,而是应该将它看做fopen和fwrite。与我们自定义格式的数据文件相比,SQLite不仅提供了很好的移植性,如大端小端、32/64位等平台相关问题,而且还提供了数据访问的高效性,如基于某些信息建立索引,从而提高访问或排序该类数据的性能,SQLite提供的事务功能,也是在操作普通文件时无法有效保证的。

2. 在嵌入式或移动设备上的应用:

由于SQLite在运行时占用的资源较少,而且无需任何管理开销,因此对于PDA、智能手机等移动设备来说,SQLite的优势毋庸置疑。

3. 内部数据库:

在有些应用场景中,我们需要为插入到数据库服务器中的数据进行数据过滤或数据清理,以保证最终插入到数据库服务器中的数据有效性。有的时候,数据是否有效,不能通过单一一条记录来进行判断,而是需要和之前一小段时间的历史数据进行特殊的计算,再通过计算的结果判断当前的数据是否合法。在这种应用中,我们可以用SQLite缓冲这部分历史数据。还有一种简单的场景也适用于SQLite,即统计数据的预计算。比如我们正在运行数据实时采集的服务程序,我们可能需要将每10秒的数据汇总后,形成每小时的统计数据,该统计数据可以极大的减少用户查询时的数据量,从而大幅提高前端程序的查询效率。在这种应用中,我们可以将1小时内的采集数据均缓存在SQLite中,在达到整点时,计算缓存数据后清空该数据。

4. 数据分析:

可以充分利用SQLite提供SQL特征,完成简单的数据统计分析的功能。这一点是CSV文件无法比拟的。

5. 产品Demo和测试:

在需要给客户进行Demo时,可以使用SQLite作为我们的后台数据库,和其他关系型数据库相比,使用SQLite减少了大量的系统部署时间。对于产品的功能性测试而言,SQLite也可以起到相同的作用。

三、和RDBMS相比SQLite的一些劣势:

1. C/S应用:

如果你有多个客户端需要同时访问数据库中的数据,特别是他们之间的数据操作是需要通过网络传输来完成的。在这种情况下,不应该选择SQLite。由于SQLite的数据管理机制更多的依赖于OS的文件系统,因此在这种操作下其效率较低。

2. 数据量较大:

受限于操作系统的文件系统,在处理大数据量时,其效率较低。对于超大数据量的存储,甚至不能提供支持。

3. 高并发:

由于SQLite仅仅提供了粒度很粗的数据锁,如读写锁,因此在每次加锁操作中都会有大量的数据被锁住,即使仅有极小部分的数据会被访问。换句话说,我们可以认为SQLite只是提供了表级锁,没有提供行级锁。在这种同步机制下,并发性能很难高效。

四、个性化特征:

1. 零配置:

SQLite本身并不需要任何初始化配置文件,也没有安装和卸载的过程。当然也不存在服务器实例的启动和停止。在使用的过程中,也无需创建用户和划分权限。在系统出现灾难时,如电源问题、主机问题等,对于SQLite而言,不需要做任何操作。

2. 没有独立的服务器:

和其他关系型数据库不同的是,SQLite没有单独的服务器进程,以供客户端程序访问并提供相关的服务。SQLite作为一种嵌入式数据库,其运行环境与主程序位于同一进程空间,因此它们之间的通信完全是进程内通信,而相比于进程间通信,其效率更高。然而需要特别指出的是,该种结构在实际运行时确实存在保护性较差的问题,比如此时,应用程序出现问题导致进程崩溃,由于SQLite与其所依赖的进程位于同一进程空间,那么此时SQLite也将随之退出。但是对于独立的服务器进程,则不会有此问题,它们将在密闭性更好的环境下完成它们的工作。

3. 单一磁盘文件:

SQLite的数据库被存放在文件系统的单一磁盘文件内,只要有权限便可随意访问和拷贝,这样带来的主要好处是便于携带和共享。其他的数据库引擎,基本都会将数据库存放在一个磁盘目录下,然后由该目录下的一组文件构成该数据库的数据文件。尽管我们可以直接访问这些文件,但是我们的程序却无法操作它们,只有数据库实例进程才可以做到。这样的好处是带来了更高的安全性和更好的性能,但是也付出了安装和维护复杂的代价。

4. 平台无关性:

这一点在前面已经解释过了。和SQLite相比,很多数据库引擎在备份数据时不能通过该方式直接备份,只能通过数据库系统提供的各种dump和restore工具,将数据库中的数据先导出到本地文件中,之后在load到目标数据库中。这种方式存在显而易见的效率问题,首先需要导出到另外一个文件,如果数据量较大,导出的过程将会比较耗时。然而这只是该操作的一小部分,因为数据导入往往需要更多的时间。数据在导入时需要很多的验证过程,在存储时,也并非简简单单的顺序存储,而是需要按照一定的数据结构、算法和策略存放在不同的文件位置。因此和直接拷贝数据库文件相比,其性能是非常拙劣的。

5. 弱类型:

和大多数支持静态类型的数据库不同的是,SQLite中的数据类型被视为数值的一个属性。因此对于一个数据表列而言,即便在声明该表时给出了该列的类型,我们在插入数据时仍然可以插入任意类型,比如Integer的列被存入字符串'hello'。针对该特征唯一的例外是整型的主键列,对于此种情况,我们只能在该列中存储整型数据。

6. SQL语句编译成虚拟机代码:

很多数据库产品会将SQL语句解析成复杂的,相互嵌套的数据结构,之后再交予执行器遍历该数据结构完成指定的操作。相比于此,SQLite会将SQL语句先编译成字节码,之后再交由其自带的虚拟机去执行。该方式提供了更好的性能和更出色的调试能力。

简述sqlite数据库的特点_SQLite教程(一):SQLite数据库介绍相关推荐

  1. 简述sqlite数据库的特点_SQLite数据库 简介、特点、优势、局限性及使用

    SQLite简介 SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足.无服务器.零配置的.事务性的SQL数据库引擎.它是一个零配置的数据库,这就体现出来SQLite与 ...

  2. 简述sqlite数据库的特点_sqlite数据库的优缺点

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. ios php mysql数据库_IOS_iOS中SQLite使用教程,SQLite,是一款轻型的数据库, - phpStudy...

    iOS中SQLite使用教程 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中 ...

  4. Python教程:访问数据库使用SQLite

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成. Python就 ...

  5. flask mysql环境配置_Flask教程4:数据库

    Flask中的数据库 Flask并不原生支持数据库,而是通过Python包以及Flask数据库插件. 数据库分为关系型数据库和非关系型数据库,这里我们使用关系型数据库.我们使用Flask-SQLAlc ...

  6. 【数据库原理及应用教程(第4版|微课版)陈志泊】【第三章习题】

    文章目录 一.选择题 二.填空题 三.设计题 四.简答题 Reference 一.选择题 1 2 3 4 5 6 7 8 9 10 B A C B C C B D A D 11 12 13 14 15 ...

  7. 易百教程Oracle,SQLite快速入门教程

    这个SQLite快速入门教程教你如何有效地开始学习并使用SQLite.通过本教程的实践操作学习之后,相信你应该可以了解并能够熟练地使用SQLite了. 如果您一直在使用其他关系数据库管理系统,例如:M ...

  8. Sharding-jdbc教程:Mysql数据库主从搭建

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 这是系列文章Sharding-jdbc文章的第一篇,本篇文章主要讲述如何搭建Mysql的主从.搭 ...

  9. QIIME 2教程. 29参考数据库DataResources(2021.2)

    数据资源 Data resources https://docs.qiime2.org/2021.2/data-resources/ q2-feature-classifie使用的分类学分类器 Tax ...

最新文章

  1. labview 随笔记录
  2. R语言ggplot2可视化在散点图中的每个点上绘制两个错误条:常见的是垂直错误条,它对应于Y值点上的错误(error bar),添加与X轴(水平)相关的错误条(error bar)
  3. P2924 [USACO08DEC]大栅栏Largest Fence
  4. 分享Kali Linux 2016.2第50周虚拟机
  5. 011_Spring Data JPA多对多关系
  6. 怎样查看.a和so文件中的接口
  7. python psycopg2_python2.7 psycopg2
  8. 今天正式开通51CTO技术博客
  9. cisco服务器维修,面向终端的AMP控制台的思科维护的排除列表更改
  10. 如何彻底清除UniAccess Agent
  11. 关于Layer UI表格列日期格式化及取消自动填充日期
  12. Ubuntu源码方式安装lua luarocks
  13. 麦田守望者--走出软件作坊:三五个人十来条枪 如何成为开发正规军(四十三)
  14. 基于人脸识别的课堂签到管理系统【学习三】
  15. 制作一个播放器(二)
  16. 30分钟java桌球小游戏_30分钟完成桌球小游戏项目
  17. 贵州兴义电大学计算机培训,黔西南州机电职业技术学校
  18. linux将一段时间内文件压缩,在 Linux 上压缩文件的 5 种方法
  19. 浅议BGP(一文看懂BGP)
  20. PostgreSQL构建通用标签系统

热门文章

  1. 流量单位换算的几种方式
  2. 找不到office.zh\officelr.cab
  3. java对账系统设计_聊聊对账系统的设计方案
  4. 启明星辰调整回购方案:回购价由不超过20元调整为不超过30元
  5. argparse基本用法
  6. python自动化之路-day2
  7. Rocksdb Flush
  8. linux下system函数详解
  9. Linux-乌班图常用命令
  10. 欢迎大家走进我的园子 目录整理篇