SQLite数据库扫盲

SQLite数据库扫盲,第1张

概述今天注意到SQLite 3.6.11(上个月发布的)增加了一个我期待已久的online backup接口,激动之余就顺便和大伙儿聊一下SQLite数据库。本帖权当是SQLite扫盲,如果你对SQLite已经很熟悉,本文就不必再看了。   ★技术上的优点和特性   SQLite是一个轻量级、跨平台的关系型数据库。既然号称关系型数据库,支持SQL92标准中常用的玩意儿(比如视图、事务、触发器等)就是理

今天注意到SQLite 3.6.11(上个月发布的)增加了一个我期待已久的online backup接口,激动之余就顺便和大伙儿聊一下sqlite数据库。本帖权当是sqlite扫盲,如果你对sqlite已经很熟悉,本文就不必再看了。

  ★技术上的优点和特性
  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功能了吧?

  ★技术上的缺点和不足
  前面光聊了特性和优点,为了避免q手写软文的嫌疑,再来说说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 Trends可以反应出来)。包括一些大公司也开始把它整合到产品中(比如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数据库扫盲所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1182928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存