
数据库
tiny_Sean
这个作者很懒,什么都没留下…
展开
-
b+树索引
面试问题数据库索引的存储结构一般是B+树,为什么不适用红黑树等普通的二叉树?由于 B+ 树分支比二叉树更多,所以相同数量的内容,B+ 树的深度更浅,深度代表什么?代表磁盘 io 次数啊!数据库设计的时候 B+ 树有多少个分支都是按照磁盘一个簇上最多能放多少节点设计的啊!原理B+树的插入操作1)若为空树,创建一个叶子结点,然后将记录插入其中,此时这个叶子结点也是根结点,插入操作结束。2...转载 2020-03-26 20:15:36 · 176 阅读 · 0 评论 -
日志恢复
背景知识在开始阐述Aries是什么之前,需要先交代几个常识性的概念,作为引出Aries的铺垫。数据库体系结构图1大致描述了一个(分布式)数据库应该包含的组件,其中箭头方向大致描述了一个请求被处理的顺序。一个请求(以DML为例),会先经过Query Process层进行解析、优化处理,最终生成物理执行计划(就是用具体的算法替换逻辑计划里的各个算子),交由执行引擎Excutor Engine进...转载 2020-03-26 15:20:04 · 855 阅读 · 0 评论 -
严格二段锁协议实现
原理DBMS包含一个锁管理器,用于决定事务是否可以锁定。 它了解系统内部的最新情况。共享锁(S-LOCK):允许多个事务同时读取同一对象的锁。 如果一个事务持有共享锁,则另一个事务可以获取该共享锁。独占锁定(X-LOCK):允许事务修改对象。 此锁与任何其他锁不兼容。 一次只能有一个事务持有独占锁。使用锁执行:1.事务从锁管理器请求锁(或升级)。2.锁管理器根据其他事务当前持有的锁...转载 2020-03-26 13:27:17 · 4341 阅读 · 1 评论 -
事务并发控制
在学习几年编程之后,你会发现所有的问题都没有简单、快捷的解决方案,很多问题都需要权衡和妥协,而本文介绍的就是数据库在并发性能和可串行化之间做的权衡和妥协 - 并发控制机制。如果数据库中的所有事务都是串行执行的,那么它非常容易成为整个应用的性能瓶颈,虽然说没法水平扩展的节点在最后都会成为瓶颈,但是串行执行事务的数据库会加速这一过程;而并发(Concurrency)使一切事情的发生都有了可能,它能...转载 2020-03-26 10:03:18 · 1241 阅读 · 0 评论 -
事务,并发,日志综述
事务是数据库系统中的重要概念,了解这一概念是以正确的方式开发和数据库交互的应用程序的前提。但是很多开发者对于事务的认识相对片面和肤浅,仅仅把它等同于ACID,不了解数据库系统引入事务的真正动机,ACID对于事务意味着什么以及最重要的:数据库系统是如何保证事务的ACID特性的?以下所有内容都是针对单机事务而言,不涉及分布式事务相关的东西!关于事务原理的讲解不针对具体的某个数据库实现,所以某些地...转载 2020-03-26 09:53:16 · 252 阅读 · 0 评论 -
磁盘管理器
作用从磁盘上读写页面和日志。代码头文件class DiskManager {public: DiskManager(const std::string &db_file); ~DiskManager(); void WritePage(page_id_t page_id, const char *page_data); void ReadPage(page_i...原创 2020-03-25 20:48:38 · 382 阅读 · 0 评论 -
数据库页面缓冲池
缓冲池原理对于数据库管这种对性能要求极高的系统而言,缓存自然是不可少的。数据库中的缓存称为缓冲池,缓冲池存在的唯一目的就是提高数据库系统性能。缓冲池本质上是分配给数据库管理器管理的一块***内存空间***,用于读写数据页。(包括表行和索引数据页。内存中表行数据页称为缓存表)由于从内存访问数据比从磁盘访问数据快得多(访问磁盘是典型的I/O操作,一次I/O大概耗时0.0125S),通过将部分常用或...原创 2020-03-25 20:29:23 · 1050 阅读 · 0 评论 -
LRU页面置换
原理LRULRU是一种页面置换算法,在对于内存中但是又不用的数据块,叫做LRU,操作系统会根据那些数据属于LRU而将其移出内存而腾出空间来加载另外的数据LRU算法:最近最少使用,简单来说就是将数据块中,每次使用过的数据放在数据块的最前端,然后将存在的时间最长的,也就是数据块的末端的数据剔除掉这就是LRU算法如果进程被调度,该进程需要使用的外存页(数据)不存在于数据块中,这个现象就叫做缺页。...原创 2020-03-25 19:48:13 · 812 阅读 · 0 评论 -
extendible Hash
原理静态散列要求桶的数目始终固定,那么在确定桶数目和选择散列函数时,如果桶数目过小,随着数据量增加,性能会降低;如果留一定余量,又会带来空间的浪费;或者定期重组散列索引结构,但这是一项开销大且耗时的工作。为了应对这些问题,为此提出了几种动态散列(dynamichashing)技术,可扩展动态散列(extendable hashing)便是其一。一、可扩展动态散列A)用一个数组来存储桶指针...原创 2020-03-25 19:34:34 · 3491 阅读 · 3 评论 -
sqlite3
一、版本从 www.sqlite.org 网站可下载到最新的 sqlite 代码和编译版本。写此文章时,最新代码是 3.3.17 版本。二、基本编译把 sqlite3.c 和 sqlite3.h 添加到工程,再新建一个 main.cpp文件。在里面写:extern "C"{#include "./sqlite3.h"};int main( int , char** ){...转载 2020-03-25 00:01:04 · 584 阅读 · 0 评论