随笔分类 - 数据库
摘要:原文:A critique of ANSI SQL isolation levels 摘要:ANSI SQL-92[MS, ANSI]使用脏读、不可重复读以及幻读现象(phenomena)定义了隔离级别,本论文展示了这些现象,以及ANSI SQL定义并无法合适的描述众多流行的隔离级别,包括(ANSI
阅读全文
摘要:SQL的出现让我们得以用一种高级的声明式接口来与数据库交互,但在这之下,数据库的优化器做了大量的复杂工作来让SQL的执行尽量地快。 优化器处理什么问题 对于用户的一条SQL: 有大量等价的逻辑查询树 对于逻辑查询树上的每一个节点(或者说操作符),底层执行引擎可能有多种物理实现方式。如对于join,可
阅读全文
摘要:本篇文章是CMU 15445数据库系统的学习笔记,持续更新... [课程视频 Fall 2021] | [课程主页] LEC03. 数据库存储结构(上) 分层设计概述 设计任何大型系统时的一个常用手段是分层,数据库系统也可以被分成若干层,每一层处理自己的事情,向上提供简单的API隐藏细节。 举个例子
阅读全文
摘要:graph LR R[HashTable] --> St[静态哈希策略] R --> Dy[动态哈希策略] St --> 线性探测法 St --> t1[Robin Hood] St --> t2[Cuckoo Hashing] Dy --> Ch[Chained Hashing] Dy --> E
阅读全文
摘要:《MySQL是怎样运行的》一书十一、十二章的相关笔记。掺入了一些自己的理解。 连接基础 MySQL中的连接使用嵌套子循环实现,其中有两个角色: 驱动表:子循环中处于外层的表 被驱动表:子循环中处于内层的表 而一个连接可以看作是对于驱动表中的每一条满足条件的记录,都对被驱动表使用连接属性进行一次查询,
阅读全文
摘要:InnoDB以页来管理磁盘文件,根据页的功能不同,有多种多样不同的页,比如用来记录undolog信息的undo页,用于存放数据的数据页。现在我们主要来了解下数据页的结构。 实际上,InnoDB采用索引组织表的表结构,所以实际上无论是表,还是在表上建立的索引,都是以索引形式存在的。所以InnoDB实际
阅读全文
摘要:和MVCC相关的三个东西 隐藏字段:InnoDB表中的每个行前都有的三个隐藏字段,用于实现MVCC机制 undolog:用于记录数据的历史版本,每一个数据的历史版本在undolog中构成一个历史版本链 readview*:每个事务都有一个,用于确定它能读到链中的哪些历史版本 隐藏字段 通过这一小节,
阅读全文
摘要:架构 连接池:维护与客户端的连接的池子,达到线程重用 SQL层:包括解析器、优化器、缓存 存储引擎:MySQL的存储引擎掌管着表、索引等如何被实际存储,它们是插件式的 文件系统:保存MySQL服务器和存储引擎产生的文件 MyISAM和InnoDB InnoDB 支持ACID,行级锁,适合OLTP应用
阅读全文
摘要:RedisTemplate中的几个角色: RedisSerializer:由于与Redis服务器的通信一定是使用字节数组完成的,所以RedisSerializer是将Java对象编码解码的组件 RedisOperations:封装了一些Redis操作 XXXOperations:封装了指定类型或功能
阅读全文
摘要:初始表结构 CREATE TABLE t1( a INT UNIQUE ); CREATE TABLE t2( a INT UNIQUE ); INSERT INTO t1 SELECT 1; INSERT INTO t1 SELECT 2; INSERT INTO t1 SELECT 3; INS
阅读全文
摘要:慢查询基础:优化数据访问 查询性能低下的基本原因就是:访问的数据太多了。这并不是单单指你的SQL语句最终需要获取的行数太多了,一个坏的数据库设计可能在你需要访问10行数据时扫描上万行数据。所以你需要从两方面考虑: 确认应用程序是否正在检索大量超过需要的数据 确认MySQL服务器层是否在分析大量超过需
阅读全文
摘要:EXPLAIN可能返回多行,每一行揭示了在一个关联查询中,MySQL读取的一个表的细节。所以单表查询可以看成一个只有一个表的关联查询,EXPLAIN只返回一行。 本篇虽然参考了MySQL的官方文档,但官方文档中给的细节太少了,所以有很多我根据测试所意淫出来的理论,我不敢保证这些理论的正确性,我也找不
阅读全文
摘要:什么是ICP(Index Condition Pushdown) 考虑下面的查询: SELECT * FROM people WHERE zipcode='95054' AND lastname LIKE '%etrunia%' AND address LIKE '%Main Street%'; 假
阅读全文
摘要:数据结构 由于C语言内置的数据结构匮乏,Redis实现了一些自己的数据结构。 我们需要分清数据结构和Redis数据类型的区别: 数据结构就只是按照某种结构组织起来的数据,Redis会在很多地方复用它 Redis数据类型指的是面向Redis用户提供的类型,即:string、hash、zset、list
阅读全文
摘要:简单锁 使用multi、exec、watch的组合在高负载情况下经常会陷入重试之中,这限制了这种锁的可扩展性。下图给出了在不同负载情况下锁的平均等待时间,因为在高负载的情况下系统经常陷入到重试中,所以平均等待时间会变得非常大。 下面我们实现一种简单的互斥锁来降低系统中的重试次数,当获取锁失败时,操作
阅读全文
摘要:持久化选项 Redis是一个内存数据库,但为了避免数据丢失,也提供了两种将数据持久化到磁盘的方式:快照方式和AOF方式(只追加文件)。这两种方式各有各的好处,主要看应用场景,而且它俩并不是非此即彼的,它们可以共同使用。 快照持久化 快照持久化保存redis内存数据在某一时刻的副本,可以通过BGSAV
阅读全文
摘要:数据结构篇 Redis有五种基本的数据结构,可能是由于操作它们的指令太多,所以第一次见到Redis时就被它这几种数据类型搞蒙了,常常把它们搞混,不知道哪个是哪个,哪个提供什么功能。 这里,我们把Redis的数据结构分成三类来学习,希望能起到对Redis数据类型的理解和运用的帮助。 源头:字符串 字符
阅读全文
摘要:注意,本篇内容针对MySQL,并且使用InnoDB存储引擎,其他存储引擎对于唯一索引空值的行为不在讨论范围内。 没注意过这个问题 唯一索引可以允许多个空值,并且你查询空值时还能用上索引?? 下面分析下它咋存的 我查看了下这个索引页的数据 把infimum和supremum之间的数据格式化一下,就是索
阅读全文
摘要:事务是数据库中一个操作的最基本的单元,具有ACID特性。 原子性(A),事务是不可分割的,其中的操作要么都做了,要么都没做,不可能做一半。 一致性(C),事务在完成前数据库处于一致状态,完成后也要处于一致状态,事务不能打破数据库的一致性。 隔离性(I),事务看起来是被隔离的,即事务在提交之前,它对数
阅读全文
摘要:latch和lock 我们讨论数据库理论中的锁,实际上大部分时间是在讨论lock。lock的对象是事务,用来加锁的对象是数据库、表、页、行等。 除了这些之外,数据库还需要对其自身的线程和内存中的数据结构进行并发控制,比如访问、刷新缓存列表中的页等,用来保证这些操作的并发正确性的工具就是latch。l
阅读全文

浙公网安备 33010602011771号