SQlite 学习资料

  颇有用的开源跨平台数据库,能够做为客户端的小型内存数据库使用,听说它有N多用户(Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFox),记录下。
  下文转自:
php

 http://www.cppblog.com/weiym/archive/2012/10/16/193357.html
    http://www.cnblogs.com/stephen-liu74/archive/2012/03/09/2328757.html
html


    在实际的应用中,SQLite做为目前最为流行的开源嵌入式关系型数据库,在系统的架构设计中正在扮演着愈来愈为重要的角色。和不少其它嵌入式NoSQL数据库不一样的是,SQLite支持不少关系型数据库的基本特征,这在数据移植、程序演示等应用中有着不可替代的优点。从官方文档中咱们能够获悉到,SQLite支持的数据量和运行效率都是很是骄人的,所以在海量数据的解决方案中,SQLite能够做为数据预计算的桥头堡,从而显著减小存储在关系型数据库服务器中的数据数量,最终提升系统的查询效率和运行期效率,同时也能够显著的下降数据备份的磁盘开销。这里提供了该系列博文的目录,以方便网友和我我的的学习与参阅。
      Finally, if you are interseting in my series blogs, please pay more attention on my following ones, such as Redis, MongoDB, Lua and PostgreSQL. Thank you for your reading and comments, that will give me more effective encouragement and stimulate me to move ahead with stable and continuous. web

 

SQLite学习手册(开篇)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/09/2317603.html
1、简介
2、SQLite的主要优势
3、和RDBMS相比SQLite的一些劣势
4、个性化特征

SQLite学习手册(C/C++接口简介)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/13/2321386.html
1、概述
2、核心对象和接口
3、参数绑定

SQLite学习手册(数据表和视图)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/13/2321668.html
1、建立数据表
2、表的修改
3、表的删除
4、建立视图
5、删除视图

SQLite学习手册(内置函数)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/13/2322027.html
1、聚合函数
2、核心函数
3、日期和时间函数

SQLite学习手册(索引和数据分析/清理)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/14/2322335.html
1、建立索引
2、删除索引
3、重建索引
4、数据分析
5、数据清理

SQLite学习手册(数据库和事物)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/14/2322575.html
1、Attach数据库
2、Detach数据库
3、事物

SQLite学习手册(表达式)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/16/2323907.html
1、经常使用表达式
2、条件表达式
3、转换表达式

SQLite学习手册(数据类型)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/18/2325258.html
1、存储种类和数据类型
2、类型亲缘性
3、比较表达式
4、操做符

SQLite学习手册(命令行工具)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/18/2325981.html

SQLite学习手册(在线备份)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/19/2326309.html
1、经常使用备份
2、在线备份APIs简介
3、高级应用技巧

SQLite学习手册(内存数据库)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/20/2328348.html
1、内存数据库
2、临时数据库

SQLite学习手册(临时文件)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/21/2328483.html
1、简介
2、具体说明
3、相关的编译时参数和指令
4、其它优化策略

SQLite学习手册(锁和并发控制)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328753.html
1、概述
2、文件锁
3、回滚日志
4、数据写入
5、SQL级别的事物控制

SQLite学习手册(实例代码<一>)
http://www.cnblogs.com/stephen-liu74/archive/2012/02/07/2340780.html
1、获取表的Schema信息
2、常规数据插入

SQLite学习手册(实例代码<二>)
http://www.cnblogs.com/stephen-liu74/archive/2012/02/07/2341480.html
3、高效的批量数据插入
4、数据查询


sql

哪些人,哪些公司或软件在用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.SQLitewindows

缺点与不适应场合:

不适合并发性高的场合 如大量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并发测试

  1. //Winform 1000个线程同时操做,仅cpu占用很高外,数据正常插入,没有使用Lock  
  2. ThreadPool.SetMinThreads(1000, 1000);  
  3. ThreadPool.SetMaxThreads(1000, 1000);  
  4. for (int i = 0; i < 1000; i++)  
  5. {  
  6.     ThreadPool.QueueUserWorkItem((obj) =>  
  7.     {  
  8.         SQLiteParameter[] parms ={  
  9.         new SQLiteParameter("@txtTitle", "标题"+obj),  
  10.         new SQLiteParameter("@txtContent", "内容能够大于8000"+obj+new string('=',8000+1000)),  
  11.         new SQLiteParameter("@Adder", "添加人"+obj),  
  12.         new SQLiteParameter("@AddTime", DateTime.Now),  
  13.         new SQLiteParameter("@DeptId", 1),  
  14.         };  
  15.           
  16.         SQLiteHelper.ExecuteNonQuery(SQLiteConnectionString, CommandType.Text, @"  
  17.         insert into Articles(txtTitle,txtContent,Adder,AddTime,DeptId) values (@txtTitle,@txtContent,@Adder,@AddTime,@DeptId)  
  18.         ", parms);  
  19.       
  20.     }, i);  
  21. }  

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的性能比较
http://www.cnblogs.com/kevin-moon/archive/2008/12/01/1344658.html
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用于商业公司的软件项目仍是很是靠谱的。

相关文章
相关标签/搜索