随笔分类 -  数据库技术

摘要:数据库Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完整地描述了数据库的结构。还有一种是物理上的Schema,指的是数据库中的一个名字空间,它包含一组表、视图和存储过程等命名对象。物理Schema可以通过标准SQL语句来创建、更新和修改。例如以下SQL语句创建了 阅读全文
posted @ 2019-04-12 11:12 zzfx 阅读(4868) 评论(0) 推荐(0) 编辑
摘要:简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。它的设计目标是嵌入式的,目前Android和iOS的设备内置的都是SQLite数据库。SQLite虽然娇小,但也支持事务和多数的SQL92标准。 主要特点 Zero-Configuration 无需安装和管理配置。 Ser 阅读全文
posted @ 2019-04-11 19:38 zzfx 阅读(777) 评论(0) 推荐(0) 编辑
摘要:original SQL text <sqlite3_prepare_v2> >sqlite3_stmt--<sqlite3_reset>-->clear sqlite3_stmt --<sqlite3_bind_*(stmt,1,*)>--> configed sqlite3_stmt --<sq 阅读全文
posted @ 2019-04-10 18:44 zzfx 阅读(4638) 评论(0) 推荐(0) 编辑
摘要:最近项目中涉及到sqlite并发读写的问题,参考一些文档并结合自己的实践,对sqlite3并发问题总结了几点: sqlite3的锁及事务类型 sqlite3总共有三种事务类型:BEGIN [DEFERRED /IMMEDIATE / EXCLUSIVE] TRANSCATION,五种锁,按锁的级别依 阅读全文
posted @ 2019-04-10 18:09 zzfx 阅读(1731) 评论(0) 推荐(0) 编辑
摘要:提到锁就不得不说到死锁的问题,而SQLite也可能出现死锁。下面举个例子:连接1:BEGIN (UNLOCKED)连接1:SELECT ... (SHARED)连接1:INSERT ... (RESERVED)连接2:BEGIN (UNLOCKED)连接2:SELECT ... (SHARED)连接 阅读全文
posted @ 2019-04-10 17:39 zzfx 阅读(2572) 评论(0) 推荐(1) 编辑
摘要:本篇主要从SQLite事务执行的原理中寻找如何更高效地使用它。 本篇预备知识 我们先来了解下SQLite执行事务的基本流程,状态变化过程,再分析怎么使用才更优。SQLite定义的锁的状态有如下几种: UNLOCK:最初始状态,没有任何锁在数据库上; SHARED:共享状态,允许读取数据,但是不能写入 阅读全文
posted @ 2019-04-10 17:11 zzfx 阅读(731) 评论(0) 推荐(1) 编辑
摘要:体系结构 在内部,SQLite由以下几个组件组成:内核、SQL编译器、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite虚拟机中执行的程序集。SQLite支持大小高达2 TB的数据 阅读全文
posted @ 2019-04-10 16:58 zzfx 阅读(1755) 评论(0) 推荐(0) 编辑
摘要:SQLite 与线程 SQLite 是线程安全的。 线程模型 SQLite 支持如下三种线程模型 单线程模型 这种模型下,所有互斥锁都被禁用,同一时间只能由一个线程访问。 多线程模型 这种模型下,一个连接在同一时间内只有一个线程使用就是安全的。 串行模型 开启所有锁,可以随意访问。 设置线程模型 S 阅读全文
posted @ 2019-04-10 11:52 zzfx 阅读(9092) 评论(0) 推荐(0) 编辑
摘要:3. 单文件提交 我们首先概要说明SQLite在单个数据库文件上为了执行事务的原子提交而采取的步骤.在后面的部分将讨论如何设计文件格式以保护其在断电故障中损坏,以及原子提交在多个数据库上的执行. 3.1. Initial State 数据库连接首次打开的时候, 计算机的状态如下图所示.图中最右边标记 阅读全文
posted @ 2019-04-09 19:32 zzfx 阅读(451) 评论(0) 推荐(1) 编辑
摘要:一、什么是WAL? WAL的全称是Write Ahead Logging,它是很多数据库中用于实现原子事务的一种机制,SQLite在3.7.0版本引入了该特性。 二、WAL如何工作? 在引入WAL机制之前,SQLite使用rollback journal机制实现原子事务。 rollback jour 阅读全文
posted @ 2019-04-09 18:25 zzfx 阅读(2493) 评论(0) 推荐(1) 编辑
摘要:锁机制 SQLite基于锁来实现并发控制。SQLite的锁是粗粒度的,并不拥有PostgreSQL那样细粒度的行锁,这也使得SQLite较为轻量级。当一个连接要写数据库时,所有其它的连接都被锁住,直到写连接结束它的事务。 SQLite的数据库连接有5种状态: SQL使用锁逐步提升机制,上面的表格从上 阅读全文
posted @ 2019-04-09 16:13 zzfx 阅读(1193) 评论(0) 推荐(2) 编辑
摘要:只会写代码的是码农;学好数据库,基本能混口饭吃;在此基础上再学好操作系统和计算机网络,就能当一个不错的程序员。如果能再把离散数学、数字电路、体系结构、数据结构/算法、编译原理学通透,再加上丰富的实践经验与领域特定知识,就能算是一个优秀的工程师了。 计算机其实就是存储/IO/CPU三大件; 而计算说穿 阅读全文
posted @ 2018-11-06 12:02 zzfx 阅读(2742) 评论(0) 推荐(2) 编辑
摘要:背景:这几天在看《高性能Mysql》,在看到创建高性能的索引,书上说mysql的存储引擎InnoDB采用的索引类型是B+Tree,那么,大家有没有产生这样一个疑问,对于数据索引,为什么要使用B+Tree这种数据结构,和其它树相比,它能体现的优点在哪里? 看完这篇文章你就会了解到这些数据结构的原理以及 阅读全文
posted @ 2018-04-23 17:55 zzfx 阅读(654) 评论(0) 推荐(0) 编辑
摘要:所有应用软件之中,数据库可能是最复杂的。 MySQL的手册有3000多页,PostgreSQL的手册有2000多页,Oracle的手册更是比它们相加还要厚。 但是,自己写一个最简单的数据库,做起来并不难。Reddit上面有一个帖子,只用了几百个字,就把原理讲清楚了。下面是我根据这个帖子整理的内容。 阅读全文
posted @ 2018-04-23 15:47 zzfx 阅读(151) 评论(0) 推荐(0) 编辑