SQLite数据库存储引擎设计

标签: 其他NoSQL数据库 | 发表时间:2013-05-20 00:00 | 作者:
出处:http://pipes.yahoo.com/pipes/pipe.info?_id=3cc4794c339ceeddc915a3c3360ef524

  SQLite是一个嵌入式库并且实现了零配置、无服务端和事务功能的SQL数据库引擎。它在广泛领域内被使用,而且单线程读写性能与MySQL比肩,并且保证ACID性。

  SQLite的存储后端是采用Btree实现,多个连接可以并发操作,但是同一时间只允许一个写着存在。

  SQLite在硬盘上一个数据库一个文件,每个数据库文件头部保存有这个数据库的元信息,包括版本,大小,Btree根节点位置等等。

  SQLite将一个数据库以Page为单位进行管理和读写,每一个Page默认为512字节,通常可以看做一个硬盘sector大小。

  Page分为4种类型: 1. Btree类型的page用来保存Btree节点和数据信息 2. 有payload类型page用来保存Btree中数据溢出节点的数据 3. freelist类型page用来保存被释放的中间page以便利用 4. pointer map类型的page,可以看成是page的索引,用来保存每一个页面的上级页面,如保存Btree节点的父节点页面,保存freelist页面的上一个页面等等。

  每个Btree都代表一个表,根据主键来查找或者可以建立在其他列的索引Btree。

  SQLite通过一个Journal文件来保证事务即使在断电情况下保持原子性,每次开启一个事务时,首先向Journal文件写入需要修改page的原内容,并且flush到硬盘,再向Database文件写入新的内容,最后删掉Journal文件中的内容完成一次事务。

  SQLite在3.5版本之后引入了WAL模式,其实就是每次先把修改内容写入日志,当累计到一定数目后统一写入数据库文件,并且保持一个WAL日志的一个索引,映射每一个页是否dirty,读取时先看需要的页面是否在WAL日志中然后读取。WAL模式极大提供了并发的性能,并且能使得读者写者同时进行,但是会略微减小读取性能并且可能会导致小概率的数据丢失。

原文出处:http://www.wzxue.com/sqlite%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8E%E8%AE%BE%E8%AE%A1/

5月31日前,通过TechTarget中国专用注册码“TECH13EB”注册参加甲骨文全球大会,即可享受最低折扣!还有50元手机充值卡等您拿!活动详情请见: http://www.searchdatabase.com.cn/edm/oracle/20130515/index.html

相关 [sqlite 数据 库存] 推荐:

SQLite数据库存储引擎设计

- - searchdatabase
  SQLite是一个嵌入式库并且实现了零配置、无服务端和事务功能的SQL数据库引擎. 它在广泛领域内被使用,而且单线程读写性能与MySQL比肩,并且保证ACID性.   SQLite的存储后端是采用Btree实现,多个连接可以并发操作,但是同一时间只允许一个写着存在.   SQLite在硬盘上一个数据库一个文件,每个数据库文件头部保存有这个数据库的元信息,包括版本,大小,Btree根节点位置等等.

将Access转为SQLite数据库

- zhouding - 博客园-首页原创精华区
           SQLite是一个轻量型的数据库,各方面由于Access,对于小型网站来说,非常适合. 我今天决定将系统的数据库由Access转换为SQLite. 在网上搜索了一下,找到了DBManager这个工具,不得不说,这个软件确实好,很强大,在网上找注册码也找到半天,找不到一个.            只要将Access转换为SQLite,然后使用System.Data.SQLite.dll来访问数据库.

Android数据的四种存储方式SharePreference、SQLite、Content Provider和File (二) —— SQLite

- stony - 博客园-首页原创精华区
  SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是:.     INTEGER: 整数.   在SQLite中,并没有专门设计BOOLEAN和DATE类型,因为BOOLEAN型可以用INTEGER的0和1代替true和false,而DATE类型则可以拥有特定格式的TEXT、REAL和INTEGER的值来代替显示,为了能方便的操作DATE类型,SQLite提供了一组函数,详见:http://www.sqlite.org/lang_datefunc.html.

Sqlite数据库分页查询(ListView分页显示数据)

- - CSDN博客推荐文章
今天项目中遇到个问题,之前数据量不算多的时候,ListView显示正常,但是当数据量很大得分时候,进入画面,显示数据比较慢,. 而且不能放在UI线程中去拿数据,用子线程去拿把,画面出来了,但是数据要等很久才会出来,因此,这样给人的体验很不好,算不上好的设计. 因此,查了一下,关于数据库分页ListView分页.

关于SQLite数据库的那些事儿

- - ITeye博客
在Android平台上,集成了一个嵌入式关系型数据库——SQLite. SQLite第一个Alpha版本诞生于2000年5月. 它是遵守ACID的关联式数据库管理系统,包含在一个相对小的C库中,同时是D.RichardHipp建立的公有领域项目. SQLite官方网站: http://www.sqlite.org/;SQLite中文社区:http://www.sqlite.com.cn/.

内存数据库FastDB和SQLite性能测评

- - CSDN博客数据库推荐文章
在很多项目中,经常会碰到这样的需求,需要对大量数据进行快速存储、查询、删除等操作,特别是在一些针对诸如运营商、银行等大型企业的应用中,这些需求尤为常见. 比如智能网中的大量在线并发用户的数据管理、软交换平台中的在线信息交互、宽带/3G等数据网中在线用户行为记录等等. 针对这些情形,我们通常需要选择高性能的数据库产品,而且通常需要使用内存数据库,顾名思义,内存数据库指的是所有的数据访问控制都在内存中进行,这是与磁盘数据库相对而言的,磁盘数据库虽然也有一定的缓存机制,但都不能避免从外设到内存的交换,而这种交换过程对性能的损耗是致命的,目前主流数据库如SYBASE、ORACLE等都有这种缓存机制,如将特定表绑定一定的缓存,从而在一定程度上改善数据吞吐性能.

Android SQLite数据库版本升级原理解析

- - CSDN博客推荐文章
Android使用SQLite数据库保存数据,那数据库版本升级是怎么回事呢,这里说一下. 安装v1.0,假设v1.0版本只有一个account表,这时走继承SQLiteOpenHelper的onCreate,不走onUpgrade. 1、v1.0(直接安装v1.0). 1、v1.0   -->  v2.0              不走onCreate,走onUpgrade.

Android学习笔记(六)SQLite

- - 博客园_首页
SQLite是一个极轻量型的数据库. 它在提供了和大型数据库相当的功能,还具有轻便、跨平台等优点,SQLite使用非常方便,并不需要我们像常规数据库(SQLServer,Mysql等)那样进行安装,在Android的JDK中,其实是已经包含了SQLite这个数据库的核心. 当然我们必须要强调一点,SQLite并不是只针对Android的,其实它还可以用在别的很多地方.

SQLite的原子提交原理

- way - chensheng.net
本文源自:http://www.sqlite.org/atomiccommit.html,2007/11/28的版本. 本人正在做一个项目,在项目中定义了自己的文件格式,为了做到停电或程序崩溃不损坏这些文件原有的数据,故针对操作的原子性做一些思考,后来看到sqlite的这篇文章,与自己的实现方式作了一些对比.

sqlite插入速度优化方案

- - CSDN博客移动开发推荐文章
先贴上SQLiteOpenHelper的代码,我们创建测试的表是user,它有四个字段id,name,age,height,remark,测试用的小米2,默认条数为100行. // 必须要有这一个构造方法. // 当数据库第一次创建的时候被调用,. // 当调用getReadableDatabase ()或getWritableDatabase 的时候.