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来访问数据库.

关于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等都有这种缓存机制,如将特定表绑定一定的缓存,从而在一定程度上改善数据吞吐性能.

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

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

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.

H2数据库引擎研究导言

- - 开源软件 - ITeye博客
  有好长一段时间没有写博客了,最近这段时间觉得自己的Java基础不是很扎实,所以又重新捡起《Think in Java》这本来看了. Java高级特性更是接触得少,如网络编程,多线程编程等,所以最近就想开始学习这些内容,已经看了一段时间,以前就有看一些好的开源软件源代码的想法,也陆陆续续看了一些,但都没坚持下来,这次要下定决心好好看一个软件的源代码,数据库的一些高级特性和优化方面也涉及的很少,最近也想好好学习学习,所以由于以上一些想法就产生了研究一个java编写的数据库的想法.

转:MySQL数据库存储引擎和分支现状

- xcv58 - 唐福林-博客雨
在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程中,基本处于停滞发展的情况,在可以预见的未来,MySQL是肯定会被Oracle搁置并且逐步雪藏消灭掉的. MySQL随着相应的各主创和内部开发人员的离去,缔造了各个不同的引擎和分支,让MySQL有希望继续发扬光大起来. 本文大致讲解一下MySQL目前除了主要的 MyISAM、InnoDB、Heap(Memory)、NDB 等引擎之外的其他引擎的发展和现状,以及MySQL主干以外的分支的状况,为了我们未来更好的使用MySQL或者其他分支建立一个了解基础.

MySQL数据库性能优化之存储引擎选择

- - Sky.Jian 朝阳的天空
MySQL 数据库性能优化之SQL优化,这是  MySQL数据库性能优化专题 系列的第五篇文章:. MySQL数据库性能优化之存储引擎选择. 离上一篇文章已经有很长时间没有更新这个MySQL数据库性能优化专题了,时间太紧加上人之惰性,今天这里将之前就规划好的关于存储引擎选择方面的内容更新出来,希望对大家有所帮助吧.

Android学习笔记(六)SQLite

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