`
ihuashao
  • 浏览: 4723098 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

开源点评:SQLite数据库扫盲

阅读更多

  今天注意到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数据库创建与管理.docx

    SQLite:SQLite数据库创建与管理

    SQLite:SQLite数据库备份与恢复.docx

    SQLite:SQLite数据库备份与恢复

    SQLite:SQLite数据库安全与权限管理.docx

    SQLite:SQLite数据库安全与权限管理

    C#分享辅助类:SQLite数据库操作(SQLiteDao)

    在C#编程中,SQLite是一种轻量级的、开源的关系型数据库,广泛应用于桌面应用、移动设备和嵌入式系统。本篇文章将深入探讨如何利用C#创建一个名为`SQLiteDao`的辅助类来实现对SQLite数据库的操作。我们将讨论相关的...

    Android程序技术:SQLite数据库.pptx

    Android程序技术:SQLite数据库.pptx

    SQLite教程(一):SQLite数据库介绍

     SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB、MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事务、数据表和索引等。...

    Android studio学生管理系统SQLite数据库

    Android studio软件开发:基于SQLite数据库编写的学生管理系统源码,学生信息的增删改查和list view列表显示数据库内容,内附含sharepreference数据库编写的基础注册页面。

    SQLite数据库 sqlitedll库文件 sqlite驱动JAR包 sqlite工具

    在Java下连接SQLite数据库 一、下载SQLite数据库的JDBC:http://www.zentus.com/sqlitejdbc/ 二、将下载到的包解压后得到jar包放到%JAVA_HOME%\lib下,并且将其添加到ClassPath系统环境变量中。一定要保证在类路径...

    C#SQLite数据库操作封装,支持泛型,非常好用

    SQLite 是一个轻量级的、开源的、自包含的关系型数据库管理系统,广泛应用于移动设备、嵌入式系统以及各种应用程序中。"sqlite封装程序.zip_sqilit 封装_sqlite" 提供了一种针对SQLite数据库进行操作的封装,使得...

    sqlite数据库编辑器.rar

    SQLite是一款开源、轻量级的嵌入式关系型数据库,它不需要单独的服务器进程,可以直接在应用程序中使用。SQLite数据库编辑器则是用于管理和操作SQLite数据库的工具,它可以帮助用户直观地查看、创建、修改和查询...

    SQLite数据库打开工具

    SQLite是一款轻量级的、开源的、自包含的SQL数据库引擎,它不需要单独的服务器进程,可以直接嵌入到各类应用程序中。SQLite具有高度移植性,支持多种操作系统和编程语言,如Windows、Linux、Mac OS、Java、C++、...

    sqlite 数据库

    SQLite是一款开源、轻量级的关系型数据库管理系统,它在许多嵌入式系统和移动设备上广泛应用,因其无需服务器进程、自包含、支持事务处理、占用资源少等特性而备受青睐。SQLite数据库文件就是一个独立的数据库,可以...

    Android :SQLite3数据库的简单应用,实现数据增删改查App

    Android :SQLite3数据库的简单应用,实现数据增删改查App

    Sqlite数据库编辑工具

    SQLite是一款轻量级的、开源的、自包含的数据库引擎,它无需单独的服务器进程,可以直接在客户端应用程序中使用。SQLite数据库编辑工具是专门用来管理和操作SQLite数据库的软件,尤其对于开发者来说,它能提供方便的...

    Delphi版SQLite数据库工具

    Delphi版SQLite数据库工具是一款专为开发者设计的实用软件,主要用于在Delphi编程环境中与SQLite数据库进行交互。SQLite是一款轻量级、自包含的数据库引擎,广泛应用于嵌入式系统和移动应用,因其高效性和无需服务器...

    sqlite数据库工具

    SQLite是一款轻量级的、开源的、自包含的SQL数据库引擎,它被广泛应用于各种操作系统和设备中,包括桌面系统、移动设备以及嵌入式系统。SQLite数据库工具为用户提供了一个方便的界面,用于管理和操作SQLite数据库,...

    实验8 SQLite数据库与ContentProvider.doc

    SQLite数据库与ContentProvider实验报告 随着移动设备的普及,移动应用程序的开发也变得越来越重要。在移动应用程序开发中,数据存储是非常重要的一部分,SQLite数据库是Android操作系统中常用的数据库管理系统。本...

    Android 绿豆通讯录【SQLite数据库】

    前情提要:Android 数据库(SQLite) 【简介、创建、使用(增删改查、事务、实战演练)、数据显示控件(ListView、Adapter、实战演练)】 https://blog.csdn.net/weixin_44949135/article/details/105955663  Android ...

    SQLite数据库 加密解密工具

    SQLCipher则是一个开源的SQLite加密库,它提供了一个透明的加密层,使得标准的SQLite API能够直接操作加密后的数据库。 使用这些工具时,你需要按照以下步骤操作: 1. **安装库**:在你的.NET项目中,通过NuGet包...

    SQLite数据库查看工具(SQLiteBrowser)

    SQLite数据库是一种轻量级、开源的嵌入式关系数据库,广泛应用于移动应用、小型桌面应用以及需要快速存储和检索数据的任何系统。SQLiteBrowser是一款免费且开源的图形用户界面工具,用于浏览、编辑和管理SQLite...

Global site tag (gtag.js) - Google Analytics