今天注意到SQLite
3.6.11(上个月发布的)增加了一个我期待已久的online backup
接口,激动之余就顺便和大伙儿聊一下SQLite数据库。本帖权当是SQLite扫盲,如果你对SQLite已经很熟悉,本文就不必再看了。另外,假如你想了解SQLite在软件项目中的具体应用,可以看“这里
”。<!-- program-think-->
★技术上的优点和特性
SQLite是一个轻量级、跨平台的关系型数据库。既然号称关系型数据库,支持SQL92标准中常用的玩意儿(比如视图、事务、触发器等)就是理所当然的了,咱今天就不细说了。今天主要聊聊一些有点特色的玩意儿。
◇轻量级
先说它的第一个特色:轻量级。想必SQLite的作者很看重这个特性,连它的Logo都是用的“羽毛”,来显摆它的轻飘飘。
SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态
库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。
◇绿色软件
SQLite的另外一个特点是绿色:它的核心引擎本身不依赖第三方的软件,使用它也不需要“安装”。所以在部署的时候能够省去不少麻烦。
◇单一文件
所谓的“单一文件”,就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。
◇跨平台/可移植性
如果光支持主流操作系统,那就没啥好吹嘘的了。除了主流操作系统,SQLite还支持了很多冷门的操作系统。我个人比较感兴趣的是它对很多嵌入式系统(比如Android、Windows Mobile、Symbin、Palm、VxWorks等)的支持。
◇内存数据库(in-memory database)
这年头,内存越来越便宜,很多普通PC都开始以GB为单位来衡量内存(服务器就更甭提了)。这时候,SQLite的内存数据库特性就越发显得好用。
SQLite的API不区分当前操作的数据库是在内存还是在文件(对于存储介质是透明的)。所以如果你觉得磁盘I/O有可能成为瓶颈的话,可以考虑切换
为内存方式。切换的时候,操作SQLite的代码基本不用大改,只要在开始时把文件Load到内存,结束时把内存的数据库Dump回文件就OK了。在这种
情况下,前面提到的“online backup API”就派上用场了,聪明的同学应该明白我为啥这么期待backup功能了吧?
★技术上的缺点和不足
前面光聊了特性和优点,为了避免枪手写软文的嫌疑,再来说说SQLite的一些缺点。列位看官将来如果想用它,这些缺点要权衡一下。
◇并发访问的锁机制
SQLite在并发(包括多进程和多线程)读写方面的性能一直不太理想。它使用文件锁的方式,整个数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错。这导致了严重的并发瓶颈。
◇SQL标准支持不全
在它的官方网站
上,具体列举了不支持哪些SQL92标准。我个人感觉比较不爽的是不支持外键约束。
◇网络文件系统(以下简称NFS)
有时候需要访问其它机器上的SQLite数据库文件,就会把数据库文件放置到网络共享目录上。这时候你就要小心了。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏)。原因据说是由于某些NFS的文件锁实现上有Bug。
★编程语言接口
SQLite支持很多种语言的编程接口。这对于我这种喜欢混用多种编程语言的人来说,是很爽的。下面我大概介绍一下。
◇C/C++
由于SQLite本身是C写的,它自带的API
也是C接口的。所以C/C++用起来最直接了。假如你不喜欢面向过程的C API风格,可以另外找个C++的包装库。想重新发明轮子的同学,也可以自己包装一个。
◇Java
如果要用Java访问SQLite,可以通过SQLite的JDBC驱动,或者通过专门的SQLite包装库。我个人建议走JDBC方式,万一将来要换数据库,代码就不用大改。
◇Python
pysqlite
是Python操作SQLite的首选。从Python 2.5开始,它已经被整合到Python的标准库中。看来Python社区还是蛮喜欢SQLite嘛。
◇dotNet
对于喜欢dotNet的同学,可以通过SQLite的ADO.NET
驱动来访问。
◇Ruby
Ruby可以通过SQLite-Ruby
操作SQLite数据库,不过我没用过。
◇Perl
在CPAN上有DBD::SQLite
,不过我也没用过。
★一些非技术的参考因素
前面讲的都是技术层面的话题,如果你考虑在公司的商业软件项目中使用SQLite。还需要根据“如何选择开源项目
”里面提到的几个参考因素,再评估一下。
◇授权协议(License)
SQLite使用的是Public Domain
协议,这是最爽一种,可以放心大胆地用。
◇用户的普及程度
最近这几年,使用SQLite的人越来越多(从“这里
”可以反应出来)。包括一些大公司也开始把它整合到产品中(比如Google的Gears、Apple的Safari、Adobe的AIR)。这说明它的健壮性、稳定性等方面不会有太大问题。
◇开发的活跃程度
如果到SQLite的Change Log
上大致了解一下,可以看出最近5年基本上每1-2个月都会有更新。说明开发的活跃度还是非常高的。
从上述几个非技术因素来看,SQLite用于商业公司的软件项目还是非常靠谱的。
版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想
和本文原始地址:
http://program-think.blogspot.com/2009/03/opensource-review-sqlite-database.html
分享到:
相关推荐
SQLite:SQLite数据库创建与管理
SQLite:SQLite数据库备份与恢复
SQLite:SQLite数据库安全与权限管理
在C#编程中,SQLite是一种轻量级的、开源的关系型数据库,广泛应用于桌面应用、移动设备和嵌入式系统。本篇文章将深入探讨如何利用C#创建一个名为`SQLiteDao`的辅助类来实现对SQLite数据库的操作。我们将讨论相关的...
Android程序技术:SQLite数据库.pptx
SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB、MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事务、数据表和索引等。...
Android studio软件开发:基于SQLite数据库编写的学生管理系统源码,学生信息的增删改查和list view列表显示数据库内容,内附含sharepreference数据库编写的基础注册页面。
在Java下连接SQLite数据库 一、下载SQLite数据库的JDBC:http://www.zentus.com/sqlitejdbc/ 二、将下载到的包解压后得到jar包放到%JAVA_HOME%\lib下,并且将其添加到ClassPath系统环境变量中。一定要保证在类路径...
SQLite 是一个轻量级的、开源的、自包含的关系型数据库管理系统,广泛应用于移动设备、嵌入式系统以及各种应用程序中。"sqlite封装程序.zip_sqilit 封装_sqlite" 提供了一种针对SQLite数据库进行操作的封装,使得...
SQLite是一款开源、轻量级的嵌入式关系型数据库,它不需要单独的服务器进程,可以直接在应用程序中使用。SQLite数据库编辑器则是用于管理和操作SQLite数据库的工具,它可以帮助用户直观地查看、创建、修改和查询...
SQLite是一款轻量级的、开源的、自包含的SQL数据库引擎,它不需要单独的服务器进程,可以直接嵌入到各类应用程序中。SQLite具有高度移植性,支持多种操作系统和编程语言,如Windows、Linux、Mac OS、Java、C++、...
SQLite是一款开源、轻量级的关系型数据库管理系统,它在许多嵌入式系统和移动设备上广泛应用,因其无需服务器进程、自包含、支持事务处理、占用资源少等特性而备受青睐。SQLite数据库文件就是一个独立的数据库,可以...
Android :SQLite3数据库的简单应用,实现数据增删改查App
SQLite是一款轻量级的、开源的、自包含的数据库引擎,它无需单独的服务器进程,可以直接在客户端应用程序中使用。SQLite数据库编辑工具是专门用来管理和操作SQLite数据库的软件,尤其对于开发者来说,它能提供方便的...
Delphi版SQLite数据库工具是一款专为开发者设计的实用软件,主要用于在Delphi编程环境中与SQLite数据库进行交互。SQLite是一款轻量级、自包含的数据库引擎,广泛应用于嵌入式系统和移动应用,因其高效性和无需服务器...
SQLite是一款轻量级的、开源的、自包含的SQL数据库引擎,它被广泛应用于各种操作系统和设备中,包括桌面系统、移动设备以及嵌入式系统。SQLite数据库工具为用户提供了一个方便的界面,用于管理和操作SQLite数据库,...
SQLite数据库与ContentProvider实验报告 随着移动设备的普及,移动应用程序的开发也变得越来越重要。在移动应用程序开发中,数据存储是非常重要的一部分,SQLite数据库是Android操作系统中常用的数据库管理系统。本...
前情提要:Android 数据库(SQLite) 【简介、创建、使用(增删改查、事务、实战演练)、数据显示控件(ListView、Adapter、实战演练)】 https://blog.csdn.net/weixin_44949135/article/details/105955663 Android ...
SQLCipher则是一个开源的SQLite加密库,它提供了一个透明的加密层,使得标准的SQLite API能够直接操作加密后的数据库。 使用这些工具时,你需要按照以下步骤操作: 1. **安装库**:在你的.NET项目中,通过NuGet包...
SQLite数据库是一种轻量级、开源的嵌入式关系数据库,广泛应用于移动应用、小型桌面应用以及需要快速存储和检索数据的任何系统。SQLiteBrowser是一款免费且开源的图形用户界面工具,用于浏览、编辑和管理SQLite...