随笔分类 -  SQLite

摘要:问题 我们在生产环境中使用SQLite时中发现建表报“table xxx already exists”错误,但DB文件中并没有该表。后面才发现这个是SQLite在实现过程中的一个bug,而这个bug与数据字典的一致性相关,下面这篇文章主要讨论SQLite的缓存机制,以及缓存一致性实现的策略,希望对 阅读全文
posted @ 2016-03-26 11:40 天士梦 阅读(3313) 评论(1) 推荐(1) 编辑
摘要:上篇文章简单讨论了虚拟机的原理,这篇文章我们详细讨论下指令,具体从几种典型的SQL语句来看看每种SQL对应的指令流,以及每个指令的含义。通过explain语句,可以看到语句对应的指令流;通过pragma vdbe_trace=on指令,我们甚至可以得到语句对应的指令执行流程,包括跳转等。测试表结构 阅读全文
posted @ 2016-01-21 09:22 天士梦 阅读(1107) 评论(0) 推荐(0) 编辑
摘要:前言 我们知道任何一种关系型数据库管理系统都支持SQL(Structured Query Language),相对于文件管理系统,用户不用关心数据在数据库内部如何存取,也不需要知道底层的存储结构,熟悉SQL,就能熟练使用数据库。SQL的引入,使得数据库系统需要将SQL转换为内部的数据结构,然后与底层 阅读全文
posted @ 2016-01-20 08:59 天士梦 阅读(2653) 评论(1) 推荐(4) 编辑
摘要:概述 SQLite提供了一系列接口供用户访问数据库,主要包括连接数据库,处理SQL,迭代查询结果等。本文会针对我们使用SQLite的主要场景,列出核心的API,详细介绍API的用法并给出代码用例。1.打开关闭数据库sqlite3_open_v2原型: 作用:打开一个数据库连接关键的参数:flagsS 阅读全文
posted @ 2016-01-12 08:29 天士梦 阅读(21886) 评论(0) 推荐(4) 编辑
摘要:1.概述 我们熟知的数据库引擎大部分采用静态数据类型,即列定义的类型定义了值的存储,并且值要严格满足列的定义,同一列所有值的存储方式都相同,比如定义了一个列类型为整型 int,不能在该列上输入'abc'。SQLite的数据类型则采用了动态类型,列定义不能决定值的存储,值的存储由值本身决定,因此在SQ 阅读全文
posted @ 2016-01-11 09:22 天士梦 阅读(1897) 评论(1) 推荐(0) 编辑
摘要:随着移动互联网的发展,手机使用越来越广泛,sqlite作为手机端存储的一种解决方案,使用也非常普遍。但是sqlite本身安全特性却比较弱,比如不支持用户权限,只要能获取到数据库文件就能进行访问;另外也没有加密功能,任何人获取到文件后,就可以查到明文数据。这使得大家对于sqlite又爱又不敢用,毕竟用 阅读全文
posted @ 2015-11-25 09:26 天士梦 阅读(8573) 评论(0) 推荐(4) 编辑
摘要:概述 通过上一篇文章的分析,我们知道了pager模块在整个sqlite中所处的位置。它是sqlite的核心模块,充当了多种重要角色。作为一个事务管理器,它通过并发控制和故障恢复实现事务的ACID特性,负责事务的原子提交和回滚;作为一个页管理器,它处理从文件中读写数据页,并执行文件空间管理工作;作为日 阅读全文
posted @ 2015-11-16 14:12 天士梦 阅读(3431) 评论(4) 推荐(0) 编辑
摘要:该系列的前面一些文章我重点讲了sqlite的核心功能,比如封锁机制,共享缓存,以及事务管理等。但对于sqlite的整体没有作一个全面的介绍,本文将从实现的层面,整体介绍sqlite的框架、各个核心模块以及功能。后续再针对核心模块作进一步的分析。我们说sqlite是一个关系型的嵌入式数据库。提到关系型 阅读全文
posted @ 2015-11-14 12:15 天士梦 阅读(2713) 评论(0) 推荐(0) 编辑
摘要:说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性。对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性。sqlite也不例外,虽然简单,依然有自己的并发控制和故障恢复机制。Sqlite学习笔记(五)&&SQLite封锁机制 已经讲了一些锁机 阅读全文
posted @ 2015-10-25 21:42 天士梦 阅读(3266) 评论(0) 推荐(3) 编辑
摘要:通常情况下,sqlite中每个连接都会一个独立的pager对象,pager对象中管理了该连接的缓存信息,通过pragma cache_size指令可以设置缓存大小,默认是2000个page,每个page是1024B。这样导致了对于同一个数据文件,多个连接各自维护了自己的一份缓存,在高并发情况下,可能 阅读全文
posted @ 2015-10-21 22:38 天士梦 阅读(3643) 评论(2) 推荐(1) 编辑
摘要:Load与CPU利用率 这两个指标是衡量CPU繁忙程度的关键指标。load表示当前系统正在运行和等待运行的进程队列长度。load越高,表示对cpu资源竞争越激烈,处理器越多,可以支持load越高。 CPU利用率表示一定时间内使用CPU的效率,使用CPU的时间与占用CPU的时间的比值。 处理器核数增加 阅读全文
posted @ 2015-09-22 10:57 天士梦 阅读(3475) 评论(6) 推荐(4) 编辑
摘要:在SQLite中,主要有两种表类型,带rowid的表和不带rowid的表。我们利用create table 建一张表,默认都会有一个隐含名字为rowid的主键,暂且称带rowid的表为普通表。如果建表时指定 WITHOUT ROWID属性,那么建的表就是不带rowid的表。那么这两种表有什么区别?这 阅读全文
posted @ 2015-09-10 08:15 天士梦 阅读(2690) 评论(0) 推荐(0) 编辑
摘要:概述 SQLite虽然是一个轻量的嵌入式数据库,但这并不影响它支持事务。所谓支持事务,即需要在并发环境下,保持事务的ACID特性。事务的原子性,隔离性都需要通过并发控制来保证。那么Sqlite的并发控制是怎样的,如何实现,在这里跟大家分享下我的理解。 SQLite是一个文件数据库,所有的数据都在一个 阅读全文
posted @ 2015-08-27 11:57 天士梦 阅读(6673) 评论(0) 推荐(1) 编辑
摘要:Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然。 WAL是什么 WAL(Write ahead logging)是一种日志模式,它是一种思想,普遍应用于关系型数据库。每个事务 阅读全文
posted @ 2015-08-24 20:00 天士梦 阅读(16808) 评论(2) 推荐(1) 编辑
摘要:WAL是SQLite3.7.0版本引入的一个重大改进。SQLite官网宣称在很多使用场景下,WAL模型的性能都要好于默认的DELETE模式。下面将针对几个主要场景对WAL性能做测试,测试的硬件与xxx保持一致。 纯写场景 1) 测试说明 测试简单更新事务在WAL模式下与DELETE日志模式性能对比, 阅读全文
posted @ 2015-08-24 13:56 天士梦 阅读(5647) 评论(5) 推荐(1) 编辑
摘要:测试目标 获取SQlite的常规性能指标 测试环境 CPU:8核,Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz 内存:16G 磁盘:SSD Linux 2.6.32 SQlite最新版本3.8.11 测试场景 1) 主键查询测试 2) 主键更新测试 3) 批量导入 阅读全文
posted @ 2015-08-17 22:39 天士梦 阅读(5685) 评论(3) 推荐(0) 编辑
摘要:Sqlite简介 sqlite是一个开源的嵌入式文件数据库,sqlite以动态链接库的方式供应用程序调用,所有的数据库对象都存储在同一个文件中。 sqlite动态库非常小,最新的3.8.11版本也只有500k左右。sqlite虽然小,但功能并不弱,它支持sql-92标准中大部分SQL规范, 支持表, 阅读全文
posted @ 2015-08-12 08:02 天士梦 阅读(5208) 评论(0) 推荐(0) 编辑