设为首页 收藏本站
查看: 1266|回复: 0

[经验分享] SQLite指南(1) -- SQLite的特性

[复制链接]

尚未签到

发表于 2016-11-28 11:38:50 | 显示全部楼层 |阅读模式
使用SQLite也有一段时日了,一直想整理出一份比较完整的SQLite指南,可惜时间总是不够。就从这里开始吧,能写多少就写多少。

总特性:
1. SQLite支持事务,满足(ACID)特性:atomic, consistent, isolated, durable。即使在系统crash掉或者掉电的情况下,一样可以恢复。
2. 0配置,不需要安装或者初始化管理即可使用。(不就是嵌入式应用吗?:))
3. 整个数据库存储在跨平台的磁盘文件里头,何谓跨平台,就是说这个文件放到任意平台上,都可以用相同版本的SQLite打开(这个确实强大,目前,即算商用的大型DBMS,其数据文件也没几个是跨平台的,越大越难调头啊...)
4. 支持TB和GB大小的字符串和大对象(BLOB) (写还可以,读呢,只能分片读出来吧....)
5. 常规操作比目前流行的C/S结构的数据库引擎要快(姑且信之)
6. API使用比较简单
7. 源码注释完美,测试覆盖率达100% (后者很难说, 有些bug只有在移动设备上出现过,怎么保证100%? )
8. 使用ANSI-C来开发,使用了TCL绑定。当然也有其它语言的绑定,这些是可选的(详情见:http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers)。
9. 源码以单文件的形式发布,便于用户将其集成到自己的项目当中(这个要赞)
10. 所有源码是以public domain这种license形式发布的,非常宽松,你可以随意修改源码,用于任何目的。
11. 跨平台:Unix(Linux和Mac OS X), OS/2, Windows (Win32 and WinCE),也很容易移植到其它平台下边。 (这要归功于C语言啊)
12. 随同发布的有一个命令行可执行程序,用于管理SQLite数据库。(shell.c吧)

建议作如下用途:
1. 用作应用程序的文件格式,比如存储xml或者一些特定格式的文件,这样可以避免使用专有的解析器。这种文件至少可以跨平台读取并且具备事务的特性。(用作配置文件,确实不错,存地址簿,小型数据库等,都可以胜任)
2. 用作嵌入设备的数据库. 手机、PDA、MP3等嵌入设备或移动设备。代码量少,能有效的利用内存、磁盘空间和带宽,高可靠性,也不需要DBA来维护。
3. 网站数据库,因为不需要配置什么东西,对于小中型网站来说,用它用网站数据库也无不可(虽然效率有点低)
4. 替代企业级RDBMS.当你想用demo一个系统,又不想装一个庞大的RDBMS,那么SQLite可以满足你的要求,很快就能帮你完成任务。

不能胜任的地方:
1. C/S结构的应用
   如果你的应用程序要通过网络访问后端的数据库,应该考虑使用支持C/S结构的数据库,而不是SQLite. SQLite当中的文件锁并不能保持多客户端同时访问数据库的同一部分导致对文件的损坏。

2. 大型网站
  缺省页大小是1KB,一个SQLite数据库的大小限制是2TB,即使它能处理更大的数据库,SQLite仍然是只为一个数据库创建一个磁盘文件,很多文件系统本身的限制,使其大小要小于2TB。所以,它不能支持大型网站的数据库存储。

3. 高并发
  SQLite使用读/写来锁定整个数据库文件。如果有一个进程正在读取数据库的任何一部分,就会阻止其它进程去写数据库的任何其它部分。类似,如果有一进程正在写操作,其它所有进程就不能读其它任何部分。在多数情况下,这并不是问题。每个应用都会很快完成数据库操作,锁定的时间也不会太长。但是有些应用需要更高的并发能力,这时必须选择其它数据库来达到高并发。

SQLite未实现的SQL特性
SQLite虽然SQL语法比较宽松,但仍有些SQL92中的语法它还不支持。以后也许会慢慢加入相关支持,以加入的可能性从高到低,如下:
1. right outer join和full outer join,目前只支持左外连接(left outer join)
2. 完整的alter table支持,目前只支持rename table和add column,其它的子语句,如drop column, alter column, add constraint 等,并不支持。
3. 完整的触发器支持, for each row触发器是支持,但是for each statement不支持。
4. 写视图操作。SQLite中的视图是只读的。CUD操作是不允许的。但是,可以让你写一个trigger,发出view上的CUD操作。
5. grant和revoke, SQLite只是读写普通的磁盘文件,访问权限受控于操作系统。因此grant 和 revoke常见于C/S结构的数据库。对于嵌入式数据库引擎SQLite而言,没必要存在。

to be cont.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306689-1-1.html 上篇帖子: sqlite 使用笔记 下篇帖子: sqlite简单示例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表