SQlite 学习资料

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

 http://www.cppblog.com/weiym/archive/2012/10/16/193357.html
    http://www.cnblogs.com/stephen-liu74/archive/2012/03/09/2328757.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. 

 

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

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

SQLite学习手册(数据表和视图)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/13/2321668.html
一、创建数据表
二、表的修改
三、表的删除
四、创建视图
五、删除视图

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

SQLite学习手册(索引和数据分析/清理)
http://www.cnblogs.com/stephen-liu74/archive/2012/01/14/2322335.html
一、创建索引
二、删除索引
三、重建索引
四、数据分析
五、数据清理

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

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

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

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
一、常用备份
二、在线备份APIs简介
三、高级应用技巧

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

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

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

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

SQLite学习手册(实例代码<二>)
http://www.cnblogs.com/stephen-liu74/archive/2012/02/07/2341480.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多

数据库条数查询用时
SQLite11884860s
MSSQL118848540s
   
SQLite74286s
MSSQL742860s

 

关于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用于商业公司的软件项目还是非常靠谱的。

转载于:https://www.cnblogs.com/oneway1990/p/8059671.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常好用的SQLiteSpy 1.8.16 免费正式版(内附有一做好的DB,大家可以马上看下效果)。网上看到的,整理了下,共享给大家! 希望有用! SQLiteSpy是一个快速和紧凑的图形用户界面的SQLite数据库管理软件。它可以读取sqlite3文件并执行SQL。图形用户界面使得它很容易分析和操纵sqlite3的数据库。 注意:SQLiteSpy是免费供个人和教育用途,SQLiteSpy主要特点: 1、数据库一览:树状显示所有的架构,包括表,列,索引和触发器在数据库中包含的项目。按F5更新架构树,双击一个表或视图来显示它的数据,使用常用的命令的上下文菜单。 2、网格单元格编辑:表格单元格中编辑,显示一个表通过树状架构,选择一个单元格,然后按F2键调用编辑器。然后修改并确认您的更改写回到表里。 3、数据类型显示:本机的SQL数据类型显示不同的背景颜色来帮助检测类型错误。类型错误可能会导致性能下降或错误的SELECT结果集,防止NULL值与空字符串混淆。 4、完全的Unicode: SQLiteSpy具有完全支持SQLite的Unicode的能力。数据显示和输入是完全实现为Unicode,包括SQL命令。 5、多个SQL编辑:现代标签是用来编辑和显示的查询语句和结果比较容易多个SQL查询。 SQL查询执行输入或加载到SQL他们编辑。然后按F9键运行该查询,或Ctrl + F9来运行当前行或选择只。 6、时间测量: SQL执行的时间会自动测量和显示,以帮助优化查询。 7、正则表达式:在SQL关键字regexp是支持,并增加了完整的Perl的正则表达式语法5.10 SQLiteSpy。的实施,实现了利用DIRegEx库。 8、数学SQL函数:下面的SQL函数可用数学除了SQLite的默认:ACOS(), ASIN(), ATAN(), ATAN(), ATAN2(), CEIL(), CEILING(), COS(), COT(), DEGREES(), EXP(), FLOOR(), LN(), LOG(), LOG(), LOG2(), LOG10(), MOD(), PI(), POW(), RADIANS(), SIGN(), SIN(), SQRT(), TAN(), TRUNCATE(). 9、数据压缩:压缩的SQL函数()适用的zlib的紧缩到任何文本或BLOB值。 10、紧凑型结果储存:使用内部数据存储机制,以达到最佳的兼容SQLite的原生数据类型。因此,SQLiteSpy使用远低于其它的SQLite管理内存和更有效地处理大量的表。 11、内建的SQLite引擎: SQLiteSpy已建成一个单一的应用程序文件与SQLite数据库引擎可执行文件。不需要部署任何DLL文件,这使得SQLiteSpy更易于部署。 12、加密支持: SQLiteSpy可以阅读和修改加密的数据库文件由DISQLite3产生。 DISQLite3实现了自己的母语AES加密。这为不符合商业SQLite的加密扩展(SSE)的或任何其他第三方的实施提供兼容。 13、易安装和卸载:要运行SQLiteSpy,只需解压SQLiteSpy.exe文件到任何目录和执行文件。不需要安装。刚开始时,该程序创建一个文件SQLiteSpy.db3(1 sqlite3的数据库)来存储的和设置。它不写任何其他文件或注册表。卸载一样只是简单的删除两个文件:应用程序的可执行文件和数据库文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值