看了几个sqlite的介绍,收录一下。
原址如下: http://www.apkbus.com/android-18119-1-1.html
sqlite开源,内嵌关系型数据库,发布于2000年。
1)内嵌式数据库sqlite,举个列子,比如Perl脚本,一个C/C++程序,PHP编写的Apache进程都使用sqlite。如图1
简单说下:1.Perl脚本导入DBI::sqlite模板,通过它来访问C API,而PHP采用的方式和C相似访问C API,它们都要访问C API。2.说明下虽然它们每个进程中都有独立的数据库服务器,但它们可以操作相同的数据库文件。可以说明一点sqlite 利用操作系统功能来完成数据的同步和加锁。
那么看来sqlite优势是不错的,值得注意的是它是二个完全开放源代码并且不收取许可证费用,另外一个是Firebird,二个当中仅有是专门内嵌应用设计的是sqlite。使用sqlite软件和产品有,Apple的Mac OS X系统中,用作其CoreData应用程序架构一部分。Safari的Web浏览器,Mail.app的电子邮件程序,RSS的管理,Apple的Aperture照片软件,大家对于sqlite知道的不多原因主要是很少做广告,sqlite用在了多钟消费产品中,只是我们没注意。
2)sqlite体系结构
sqlite有3个子系统中的8个独立的模块组成,如图
模块将查询过程划分为几个不连续的任务,好比流水线上工作一样。在体系结构栈的顶部编译查询语句,在中部执行它,在底部处理操作系统的存储和接口。
之后有时间介绍具体使用sqlite.
另外一篇,
数据库服务器 sqlite 介绍
原址如下:http://www.open-open.com/lib/view/1322528992171
sqlite是遵守ACID的关联式数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。
不像常见的客户-服务器范例,sqlite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。
特征
库实现了多数的sql-92标准,包括事务,就是代表原子性、一致性、隔离性和持久性的(ACID),触发器和多数的复杂查询。不进行类型检查。你可以把字符串插入到整数列中。例如,某些用户发现这是使数据库更加有用的创新,特别是与无类型的脚本语言一起使用的时候。其他用户认为这是主要的缺点。
多个进程或线程可以访问同一个数据而没有问题。可以并行的满足多个读访问。只有在其他访问当前不被服务的时候才能满足写访问;否则写访问失败并带有一个错误代码(也可以在可配置的超时过期之后自动的重试)。
提供了叫做sqlite的一个独立程序用来查询和管理sqlite数据库文件。 它也充当写使用sqlite库的应用的一个例子。
语言绑定
可以从C/C++程序中使用这个库,还可以获得对Tcl和一些其他脚本语言的绑定。
在CPAN的DBD::sqlite上有一个Perl的DBI/DBD模块,它不是到sqlite的接口,而是包括整个sqlite数据库引擎在其中并不需要任何额外的软件。
还有一个Python模块叫做Pysqlite。
PHP从PHP5.0开始包含了sqlite,但是自5.1版之后开始成为一个延伸函式库。sqlite能与PHP4一起工作但不包含在其中。
Rails2.0.3将缺省的数据库配置改为了sqlite 3
sqlite管理客户端
sqlite亦可以作为桌面数据库使用,以下为第三方sqlite的GUI软件。例如,
- sqliteMan,使用QT开发的一个sqlite客户端,支持多语言、跨平台。sqliteMan
- sqlite Manager,以 火狐浏览器的扩展形式提供的sqlite客户端。
- sqlite Database Browser,a graphical client to access sqlite databases
- sqlPro sql Client,another graphical client to work with sqlite databases
再一篇:
SQLite介绍、学习笔记、性能测试
原址如下: http://www.yongfa365.com/Item/SQLite.html
哪些人,哪些公司或软件在用sqlite:
Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFox
可见sqlite的稳定性及性能是不会有什么问题的,详细列表请参见:http://www.sqlite.org/famous.html。
网上关于sqlite的介绍一抓一大把,总结起来,他有如下特点:
sqlite优点及适应场合:
轻量级
绿色组件
单一文件
跨平台
查询效率极高
使用事务插入速度极快
支持limit分页
适合查询速度要求较高,内存占用较少的场合,尤其是嵌入式操作系统,如各种手机操作系统,低并发web(99.9%网站是低并发),PHP环境里原生支持sqlite,asp.net/.net winform里可以很方便的使用System.Data.sqlite
缺点与不适应场合:
不适合并发性高的场合 如大量insert,update访问,sql标准支持不全
sqlite vs Access
sqlite官方网站没有与Access对比的说明,我觉得应该是:sqlite是开源的,单文件,不仅可以运行在Windows上,也可以运行在各种Linux系统上,而他的很多场合跟Access是不同的,他的优势足以站在一个比Access更高的位置,所以没有可比性,但我们普通人拿Access跟sqlite比,是因为他们交集的地方,关系到我们取舍。
交集处有:windows系统里web/winform,
在我的测试中
一次插入5行及以上,每行有20来个字符,sqlite使用事务速度远快于access
一次插入多行,每行有8000以上字符,sqlite使用事务速度 快于 access 一倍左右
sqlite查询速度极快,甚至快过sql Server 2008 r2 10倍(因为MSsql索引列不能超过900个字符,所以varchar(max)不能建索引)
单条数据插入速度比Access略慢,事务插入大量数据,在每行数据量不大时,远快于Access
Access经常出现数据库坏的情况,sqlite听说没有这个问题。
sqlite极速Select测试
同样的数据,同样的sql语句:
SELECT * FROM dbo.Articles WHERE txtContent LIKE '%柳永法%'
在sqlite及MSsql上执行效率让人震撼,sqlite竟然快MSsql 10倍,
并且sqlite没有进程只看到程序进程内存没有任何升高,而MSsql的进程则从1G多升到了3G多
数据库 | 条数 | 查询用时 |
sqlite | 118848 | 60s |
MSsql | 118848 | 540s |
sqlite | 7428 | 6s |
MSsql | 7428 | 60s |
关于sqlite多线程及ASP.net并发测试
- //Winform1000个线程同时操作,仅cpu占用很高外,数据正常插入,没有使用Lock
- ThreadPool.SetMinThreads(1000,1000);
- ThreadPool.SetMaxThreads(1000,1000);
- for(inti=0;i<1000;i++)
- {
- ThreadPool.QueueUserWorkItem((obj)=>
- {
- sqliteParameter[]parms={
- newsqliteParameter("@txtTitle","标题"+obj),
- newsqliteParameter("@txtContent","内容可以大于8000"+obj+newstring('=',8000+1000)),
- newsqliteParameter("@Adder","添加人"+obj),
- newsqliteParameter("@AddTime",DateTime.Now),
- newsqliteParameter("@DeptId",1),
- };
- sqliteHelper.ExecuteNonQuery(sqliteConnectionString,CommandType.Text,@"
- insertintoArticles(txtTitle,txtContent,Adder,AddTime,DeptId)values(@txtTitle,@txtContent,@Adder,@AddTime,@DeptId)
- ",parms);
- },i);
- }
//Winform 1000个线程同时操作,仅cpu占用很高外,数据正常插入,没有使用Lock ThreadPool.SetMinThreads(1000,1000); ThreadPool.SetMaxThreads(1000,1000); for (int i = 0; i < 1000; i++) { ThreadPool.QueueUserWorkItem((obj) => { sqliteParameter[] parms ={ new sqliteParameter("@txtTitle","标题"+obj),new sqliteParameter("@txtContent","内容可以大于8000"+obj+new string('=',new sqliteParameter("@Adder","添加人"+obj),new sqliteParameter("@AddTime",new sqliteParameter("@DeptId",}; sqliteHelper.ExecuteNonQuery(sqliteConnectionString,@" insert into Articles(txtTitle,DeptId) values (@txtTitle,@DeptId) ",parms); },i); }
ASP.net使用Microsoft Web Application Stress Tool进行1000个线程的压力测试1分钟,使用Elmah.dll记录错误,测试后没发现程序报错,也只是很占cpu而已
通过本人测试,sqlite也应该算是比较适合高并发,及多线程,但官方说不适合,不知道是不是我测试方法不对
sqlite资源地址:
sqlite的官方主页:
http://www.sqlite.org/
sqlite中文站:
http://www.sqlite.com.cn/
System.Data.sqlite:
http://sqlite.phxsoftware.com/
sql学习笔记之 嵌入式数据库(sqlite,firebird)
http://www.cnblogs.com/ljzforever/archive/2010/03/09/1681453.html
sqlite GUI图形管理工具:
sqlite Expert(可选数据库编码,支持原生配置各种参数,软件更新速度极快,一天一个或多个版本,经试用,发现还有很多不完善的地方):
http://www.sqliteexpert.com/download.html
Navicat for sqlite(导入,导出功能强大,功能实用,操作直观,有些小缺陷,更新速度还行):
http://www.navicat.com/en/download/download.html
sqlite Administrator(古老,但还是有很多人觉得不错,编码支持不强,可能乱码):
http://sqliteadmin.orbmu2k.de/
FireFox管理sqlite的插件 sqlite Manager(没多使用。看起来不错):
https://addons.mozilla.org/en-US/firefox/addon/5817/
sqlite参考资料:
开源有感系列 之开源数据库有感[新内容添加版本]:
http://www.cnblogs.com/unruledboy/archive/2005/02/04/98604.html
到底sqlite有多强?在我的2台机器上的压力测试:
http://www.cnblogs.com/unruledboy/archive/2005/03/26/sqliteperformance.html
Access和Firebird及sqlite的性能比较
@L_502_20@
http://www.cnblogs.com/Kevin-moon/archive/2008/11/14/1333285.html
浅谈sqlite——实现与应用:
http://www.cnblogs.com/hustcat/archive/2010/01/27/1657821.html
sqlite数据库是中小站点CMS的最佳选择:
http://www.dbanotes.net/database/sqlite_cms.html
sqlite的局限性:
http://dev.firnow.com/course/7_databases/sql/sqlServer/200838/103309.html
sqlite常见问题:
http://dev.firnow.com/course/7_databases/sql/sqlServer/200838/103310.html
MysqL大战sqlite(Postgresql强势乱入):
http://obmem.com/?p=493
★sqlite技术上的优点和特性
sqlite是一个轻量级、跨平台的关系型数据库。既然号称关系型数据库,支持sql92标准中常用的玩意儿(比如视图、事务、触发器等)就是理所当然的了,咱今天就不细说了。今天主要聊聊一些有点特色的玩意儿。
◇轻量级
先说它的第一个特色:轻量级。想必sqlite的作者很看重这个特性,连它的logo都是用的“羽毛”,来显摆它的轻飘飘。
sqlite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用sqlite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,3.6.27版本也就几百K
◇绿色软件
sqlite的另外一个特点是绿色:它的核心引擎本身不依赖第三方的软件,使用它也不需要“安装环境”(如:Oledb等)。所以在部署的时候能够省去不少麻烦。
◇单一文件
所谓的“单一文件”,就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。
◇跨平台/可移植性
如果光支持主流操作系统(Windows,Linux),那就没啥好吹嘘的了。除了主流操作系统,sqlite还支持了很多小型嵌入式系统,比如Android、Windows Mobile、Symbin、Palm、VxWorks等,也就是说iPhone,Android等手机上都可以用。
◇内存数据库(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嘛。
◇.net
对于喜欢.net的同学,可以通过System.Data.sqlite来访问。
◇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用于商业公司的软件项目还是非常靠谱的。