SQLite教程(一):SQLite数据库介绍


一、简介:

    SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB、MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事务、数据表和索引等。事实上,尽管SQLite拥有诸多关系型数据库的基本特征,然而由于应用场景的不同,它们之间并没有更多的可比性。下面我们将列举一下SQLite的主要特征:

    1). 管理简单,甚至可以认为无需管理。
    2). 操作方便,SQLite生成的数据库文件可以在各个平台无缝移植。
    3). 可以非常方便的以多种形式嵌入到其他应用程序中,如静态库、动态库等。
    4). 易于维护。

    综上所述,SQLite的主要优势在于灵巧、快速和可靠性高。SQLite的设计者们为了达到这一目标,在功能上作出了很多关键性的取舍,与此同时,也失去了一些对RDBMS关键性功能的支持,如高并发、细粒度访问控制(如行级锁)、丰富的内置函数、存储过程和复杂的SQL语句等。正是因为这些功能的牺牲才换来了简单,而简单又换来了高效性和高可靠性。
   
二、SQLite的主要优点:

    1. 一致性的文件格式:

    在SQLite的官方文档中是这样解释的,我们不要将SQLite与Oracle或PostgreSQL去比较,而是应该将它看做fopen和fwrite。与我们自定义格式的数据文件相比,SQLite不仅提供了很好的移植性,如大端小端、32/64位等平台相关问题,而且还提供了数据访问的高效性,如基于某些信息建立索引,从而提高访问或排序该类数据的性能,SQLite提供的事务功能,也是在操作普通文件时无法有效保证的。
   
    2. 在嵌入式或移动设备上的应用:

    由于SQLite在运行时占用的资源较少,而且无需任何管理开销,因此对于PDA、智能手机等移动设备来说,SQLite的优势毋庸置疑。
   
    3. 内部数据库:

    在有些应用场景中,我们需要为插入到数据库服务器中的数据进行数据过滤或数据清理,以保证最终插入到数据库服务器中的数据有效性。有的时候,数据是否有效,不能通过单一一条记录来进行判断,而是需要和之前一小段时间的历史数据进行特殊的计算,再通过计算的结果判断当前的数据是否合法。在这种应用中,我们可以用SQLite缓冲这部分历史数据。还有一种简单的场景也适用于SQLite,即统计数据的预计算。比如我们正在运行数据实时采集的服务程序,我们可能需要将每10秒的数据汇总后,形成每小时的统计数据,该统计数据可以极大的减少用户查询时的数据量,从而大幅提高前端程序的查询效率。在这种应用中,我们可以将1小时内的采集数据均缓存在SQLite中,在达到整点时,计算缓存数据后清空该数据。
   
    4. 数据分析:

    可以充分利用SQLite提供SQL特征,完成简单的数据统计分析的功能。这一点是CSV文件无法比拟的。
   
    5. 产品Demo和测试:

    在需要给客户进行Demo时,可以使用SQLite作为我们的后台数据库,和其他关系型数据库相比,使用SQLite减少了大量的系统部署时间。对于产品的功能性测试而言,SQLite也可以起到相同的作用。
       
三、和RDBMS相比SQLite的一些劣势:

    1. C/S应用:

    如果你有多个客户端需要同时访问数据库中的数据,特别是他们之间的数据操作是需要通过网络传输来完成的。在这种情况下,不应该选择SQLite。由于SQLite的数据管理机制更多的依赖于OS的文件系统,因此在这种操作下其效率较低。
   
    2. 数据量较大:

    受限于操作系统的文件系统,在处理大数据量时,其效率较低。对于超大数据量的存储,甚至不能提供支持。
   
    3. 高并发:

    由于SQLite仅仅提供了粒度很粗的数据锁,如读写锁,因此在每次加锁操作中都会有大量的数据被锁住,即使仅有极小部分的数据会被访问。换句话说,我们可以认为SQLite只是提供了表级锁,没有提供行级锁。在这种同步机制下,并发性能很难高效。
   
四、个性化特征:

    1. 零配置:

    SQLite本身并不需要任何初始化配置文件,也没有安装和卸载的过程。当然也不存在服务器实例的启动和停止。在使用的过程中,也无需创建用户和划分权限。在系统出现灾难时,如电源问题、主机问题等,对于SQLite而言,不需要做任何操作。
   
    2. 没有独立的服务器:

    和其他关系型数据库不同的是,SQLite没有单独的服务器进程,以供客户端程序访问并提供相关的服务。SQLite作为一种嵌入式数据库,其运行环境与主程序位于同一进程空间,因此它们之间的通信完全是进程内通信,而相比于进程间通信,其效率更高。然而需要特别指出的是,该种结构在实际运行时确实存在保护性较差的问题,比如此时,应用程序出现问题导致进程崩溃,由于SQLite与其所依赖的进程位于同一进程空间,那么此时SQLite也将随之退出。但是对于独立的服务器进程,则不会有此问题,它们将在密闭性更好的环境下完成它们的工作。
   
    3. 单一磁盘文件:

    SQLite的数据库被存放在文件系统的单一磁盘文件内,只要有权限便可随意访问和拷贝,这样带来的主要好处是便于携带和共享。其他的数据库引擎,基本都会将数据库存放在一个磁盘目录下,然后由该目录下的一组文件构成该数据库的数据文件。尽管我们可以直接访问这些文件,但是我们的程序却无法操作它们,只有数据库实例进程才可以做到。这样的好处是带来了更高的安全性和更好的性能,但是也付出了安装和维护复杂的代价。
   
    4. 平台无关性:

    这一点在前面已经解释过了。和SQLite相比,很多数据库引擎在备份数据时不能通过该方式直接备份,只能通过数据库系统提供的各种dump和restore工具,将数据库中的数据先导出到本地文件中,之后在load到目标数据库中。这种方式存在显而易见的效率问题,首先需要导出到另外一个文件,如果数据量较大,导出的过程将会比较耗时。然而这只是该操作的一小部分,因为数据导入往往需要更多的时间。数据在导入时需要很多的验证过程,在存储时,也并非简简单单的顺序存储,而是需要按照一定的数据结构、算法和策略存放在不同的文件位置。因此和直接拷贝数据库文件相比,其性能是非常拙劣的。
   
    5. 弱类型:

    和大多数支持静态类型的数据库不同的是,SQLite中的数据类型被视为数值的一个属性。因此对于一个数据表列而言,即便在声明该表时给出了该列的类型,我们在插入数据时仍然可以插入任意类型,比如Integer的列被存入字符串'hello'。针对该特征唯一的例外是整型的主键列,对于此种情况,我们只能在该列中存储整型数据。
   
    6. SQL语句编译成虚拟机代码:

    很多数据库产品会将SQL语句解析成复杂的,相互嵌套的数据结构,之后再交予执行器遍历该数据结构完成指定的操作。相比于此,SQLite会将SQL语句先编译成字节码,之后再交由其自带的虚拟机去执行。该方式提供了更好的性能和更出色的调试能力。



相关阅读:
Java实现MD5加密及解密的代码实例分享
jQuery对于显示和隐藏等常用状态的判断方法
PHP中iconv函数知识汇总
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
jQuery结合HTML5制作的爱心树表白动画
JavaScript实现MIPS乘法模拟的方法
修改mysql默认字符集的两种方法详细解析
JS中Location使用详解
PHP的反射类ReflectionClass、ReflectionMethod使用实例
举例讲解Java中的Stream流概念
酷! 不同风格页面布局幻灯片特效js实现
jQuery实现内容定时切换效果完整实例
Win10预览版10122 官方已知三个重要bug汇总
Html5实现二维码扫描并解析
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 山西特产的作文 关于清理评比达标表彰活动工作的汇报 病眼无眠 初中初二作文700字:公主和王子的交响曲 逝去的岁月,唯留满目苍凉 高一学生入团申请书范本参考 成功在于坚守作文500字 麦田里的守望者好词好句 书,伴我成长作文500字 静下来,天空也很安静 胡同口的石墩子 [图文]一道奇怪的题目 (090612周记)不退缩的精神(3)作文600字 高一思想政治上册教学计划 汽车维修实习周记 时光扯走了一切,包括你 回忆我的老师作文650字 《写给我的美玲》 小学四年级作文350字:如果是我,我不会那样 细节见文明演讲稿 第二课 我与我们 1、一滴水与大海2课时 水流有痕(三) 500字迎新年的诗歌:奋蹄新年 我最喜欢的书《男孩PK女孩》500字 “作文片段仿写”教学设计 【七律.甲子忆毛泽东抗美援朝】 你的黑发我的眼 我的“五一” 2015个人债务授权委托书范文 让你简历投递失败的6因素 学校2013年第十六个推普周活动计划 秋天真美400字 夜静人息的时候,我在想你 写秋雨的四年级优秀作文精选 2016年销售个人工作计划 50条叛逆非主流唯美伤感的句子 感动重庆——我与改革共成长(一) 2016很伤感的句子 也试着把自己置身事外 浅谈制造业作业排序问题 市联系领导在第二批教育活动工作会议上的讲话 2016酒店厨师辞职报告 别哭,消沉的青春 小学四年级作文300字:最近比较忙比较忙比较忙! 逃跑风波作文600字 小学六年级作文650字:作业,作业.................... 小学五年级作文350字:世上只有妈妈“坏” 一片红叶情 合作拍摄电影合同书 你什么样的青春就有什么样的未来

Copyright © 2016 phpStudy |