sqlite初识
最近在部署PHP网站项目的时候,发现项目并没有使用传统的三大关系型数据库,而是采用了sqlite数据库,以前的时候,也见过sqlite,但是并没有深入了解其功能和用法,好奇心驱使,决定好好研究一下sqlite,因为发现它跟其他数据库有很大的不同。
在项目里,sqlite数据库是一个单独存在的一个数据库文件(*.db;*.s3db),就像MySQL,都是需要单独的运行环境,而且数据库也是不会放到程序里面(sqlserver也可以将数据库文件放到程序中),真的好神奇
sqlite到底是什么?
百度百科:SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。
它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql这款开源的世界著名数据库管理系统来讲,它的处理速度比他更快。
SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。
本机存储,低并发,低数据量,零配置,零管理
(从上面的资料来看,sqlite太nb了,简直是开发神器。)
具体sqlite有哪些特点?我上网查了些资料
1.管理简单
最让我惊奇的是它的可脱机性,这也是我最开始好奇它的原因。这也使得sqlite的管理十分简单。
那原理是什么呢?
SQLite容易管理——因为它是一个单一文件(或在某些时候是一个文件+事务日志)。文件格式在很多主要的版本上都非常稳定,所以假设有一个从3.0.0版本(在2004年)开始的SQLite数据库文件,那么我也可以使用最新的SQLite 3.10.0读取它。如果我想将数据库文件放到一个U盘中,那么我只要复制文件,放任何我想使用它的地方就可以。如果我想每天晚上备份,那么我只要同步数据库文件到S3。如果我想分享一些和同事一起做的数据分析,那么完全可以发送一份数据库文件的副本给他们,然后他们就可以使用了。
数据库以一种单个文件的形式存在,且具备稳定的格式,是SQLite的特色。
2.不断提高又坚如磐石的稳定性
SQLite是由一些真正了不起的软件工程师积极开发的。高品质的新功能正以一种惊人的速度被添加进来。就在最近,SQLite通过json1扩展增加了对JSON数据的支持。 SQLite还发布了全文检索扩展的改进版本,其中包括使用BM25算法的结果排名。
SQLite现在的运行速度是3.8.0版本的两倍,3.3.9版本的三倍
尽管出现了这么多的变化和改进,但SQLite很少引入bug。 SQLite的测试套件被广泛认为是行业中最好的测试套件之一,并且关于SQLite如何测试的页面经常出现在HackerNews上,因为开发人员前赴后继地发现了这篇令人印象深刻的文档。
3.可扩展和可控制
由于SQLite是通过应用程序嵌入进去的,所以它运行在相同的地址空间里,并且可以代你执行应用程序代码。无论是Python标准库SQLite驱动程序——pysqlite,还是可选驱动器aspw,都可以提供定义了自定义SQL函数、聚合函数和归类的API。
4.快如闪电
SQLite非常快。由于它运行在同一台机器上,所以在执行查询或读取结果时是没有网络负担的。又因为它运行在相同的地址空间,所以没有线路协议、序列化,也不需要通过unix套接字进行通信。当资源稀缺和效率是至关重要的时候,SQLite还可以运行在移动设备上。 SQLite还支持大量的编译标识,允许你删除你不打算使用的功能。
SQLite的速度弥补了它最大的不足之处之一,那就是数据库文件锁定写入。令人难以置信的快速写数据,只当有大量的并发写提供服务时,数据库锁定才会成为一个问题。
5、WAL模式(读写同步)
SQLite的3.7.0版本中补充了一种利用预写日志的新日志记录方法。虽然其本身真不算是令人振奋的消息,但这对web应用程序开发人员(或任何处理并发的人员)意味着读的服务不会再阻塞写的服务,反之亦然。换言之就是,读和写可以同时地发生。如果没有WAL模式,那么要想写入数据库,写的服务则需要独占访问数据库,并且不能发生读的服务,直到写的服务结束。
从上面对sqlite的优点的叙述来说,sqlite简直太好用了。
但是呢,有优点必定伴随着缺点:
◇并发
SQLite的锁机制是粗粒度的,它允许多个读,但是一次只允许一个写。
写锁会在写期间排他地锁定数据库,其他人在此期间不能访问数据库。
SQLite已经采取措施以最小化排它锁所占用的时间。
通常来讲,SQLite中的锁只保持几毫秒。
但是按照一般经验,如果您的应用程序有很高的写并发(许多连接竞争向同一数据库写),并且是时间关键型,您可能需要其他数据库。
◇SQL标准支持不全
在它的官方网站上,具体列举了不支持哪些SQL92标准。我个人感觉比较不爽的是不支持外键约束。
◇网络文件系统(以下简称NFS)
有时候需要访问其它机器上的SQLite数据库文件,就会把数据库文件放置到网络共享目录上。这时候你就要小心了。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏)。原因据说是由于某些NFS的文件锁实现上有Bug。
适应场景
1:嵌入式设备 手机,机顶盒,电视,游戏,照相机,手表,厨房电器,汽车,机床,飞机,遥感器,无人机,医疗器械,机器人 2:应用文件格式 桌面应用,如版本控制系统,财物分析工具,媒体编辑,CAD 3:网站 中等流量网站 4:数据分析 5:缓存应用数据 把数据缓存在本地,避免网络传输 6:文件归档 7:替换专用磁盘文件 8:临时数据库 9:在DEMO或测试时代替企业级数据库 10:教育和培训 |
最后在介绍一款sqlite的可视化软件:DB Browser for SQLite
通过上面这个软件,我们可以实现轻松的sqlite数据库管理。而且是免费的哦!
sqlite初识的更多相关文章
- 轻量级开源嵌入式关系数据库sqlite基本使用及接口初识
preface,先闲来扯下蛋: 嵌入式数据库,NoSQL的是BerkeleyDB和InnoDB,leveDb.TC(个人较不熟悉),关系型嵌入式是SQLite; 服务器性质的NoSQL服务器,如Red ...
- 37、mysql初识
之前我们写代码需要存取信息时用的是文件可是用文件存取数据非常局限,今天我们将走进一个新的世界mysql 一.数据库由来 之前所学,数据要永久保存,比如用户注册的用户信息,都是保存于文件中,而文件只能存 ...
- Mysql(一):初识数据库
一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...
- MySQL之初识数据库
一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...
- 【MySQL】初识数据库及简单操作
一.数据库概述 1.1 什么是数据(Data) 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机. ...
- 1、mysql初识
之前我们写代码需要存取信息时用的是文件可是用文件存取数据非常局限,今天我们将走进一个新的世界mysql 本片导航: 数据库由来 数据库概述 mysql介绍 下载安装 mysql软件基本管理 初识sql ...
- python 全栈开发,Day60(MySQL的前戏,数据库概述,MySQL安装和基本管理,初识MySQL语句)
一.MySQL的前戏 在学习Mysql之前,我们先来想一下一开始做的登录注册案例,当时我们把用户的信息保存到一个文件中: #用户名 |密码 root|123321 alex|123123 上面文件内容 ...
- {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句
MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...
- mysql学习【第1篇】:初识MySQL
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! mysql学习[第1篇]:初识MySQL 只会写代码的是码农:学好数据库,基本能混口饭吃:在此基 ...
随机推荐
- MyBatis 学习记录2 Mapper对象是如何生成的
主题 以前我一直有一个问题不懂.并且觉得很神奇.就是Mybatis我们开发的时候只需要定义接口,并没有写实现类,为什么我们运行的时候就可以直接使用? 现在我想分享下这部分大致是怎么实现的. 在启动的时 ...
- Form表单标签的Enctype属性的作用及应用示例介绍
Enctype :指定将数据回发到服务器时浏览器使用的编码类型.用于表单里有图片上传. 编码类型有以下三种: application/x-www-form-urlencoded: 在发送前编码所有字符 ...
- java 修改文件
public void fileAlter(String fileName,String content) throws IOException{ BufferedRe ...
- 一张图片优化5k带来的带宽成本及其前端页面的优化方法
上周,我参加了公司的一门课程<网站性能优化>,讲师提出了一个问题:一张图片优化后减少5K,1年内可以大概省下多少宽带成本呢?非常好奇,仔细听完讲师分析,计算出来的数据让小伙伴们都惊呆了,仅 ...
- SSH(安全协议外壳)介绍及Linux SSH免密登录
SSH(安全外壳协议) SSH 为 Secure Shell 的缩写,是一种网络安全协议,专为远程登录会话和其他网络服务提供安全性的协议.通过使用 SSH,可以把传输的数据进行加密,有效防止远程管理过 ...
- 自定义信息丰富的Android Log
[问题背景] 最近在项目上需要用LOG来查看和定位一些信息,但是系统原生的LOG实在太乱,信息也不太多,比如调用行数,所在方法,所在类名,线程名称都没有. [初步想法] 本着开源的精神,首先去GitH ...
- Miller-Rabin算法
Miller-Rabin算法用于检测一个数n是否是素数.其时间复杂度上界为O(klog2(n)),其中k为检测的轮数.增大k可以提高Miller-Rabin算法的准确度. 要检测一个数是否为素数,简单 ...
- ubuntu 源码安装 lnmp 环境
准备篇 下载软件包 1.下载nginx http://nginx.org/download/nginx-1.2.0.tar.gz 2.下载pcre (支持nginx伪静态) ftp://ftp.cs ...
- 257. Binary Tree Paths返回所有深度优先的遍历
[抄题]: Given a binary tree, return all root-to-leaf paths. For example, given the following binary tr ...
- HowTo: Xen 4.1.3 Windows 8 HVM domU with Intel HD4000 VGA Passthrough on Debian Wheezy
http://linux-bsd-sharing.blogspot.com/2012/10/howto-xen-413-windows-8-hvm-domu-with.html Update 05/0 ...