求阙厅

春有百花秋有月,夏有凉风冬有雪。若无闲事挂心头,便是人间好时节。

MySQL 系列 Count使用技巧

探寻 InnoDB中 Count的实现机理...

先说结论: 按照效率排序的话,count(字段)< count(主键id) < count(1)≈count(*),所以建议,尽量使用count(*)。 count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count()函数的参数不是NULL,累计值就加1,否则不加。最后返回累计值。所以count(*)、count(主键id)和count(1)都表示返回满足条件的...

MySQL 系列 数据存储

剖析MySQL InnoDB 数据存储的结构

表是关于特定实体的数据集合,也是关系型数据库模型的核心。 表中所有数据都被逻辑地存放在一个空间中,称为表空间。表空间由段、区、页组成。InnoDB 存储引擎的逻辑存储结构如图: 表结构定义 在MySQL8.0版本以前,表结构是存在以.frm为后缀的文件里。而MySQL8.0版本,则已经允许把表结构定义放在系统数据表中了。 表空间 表数据既可以存在共享表空间里,也可以是单...

MySQL 系列 索引

MySQL 技术内幕:InnoDB存储引擎

索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。索引的常见模型包括哈希表、有序数组和搜索树; 索引常见模型 hash 哈希表是一种以键-值(key-value)存储数据的结构,只要输入待查找的值即key,就可以找到其对应的值即Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置。 不可避免地,...

MySQL 系列 缓冲区管理

MySQL 技术内幕:InnoDB存储引擎

BufferPool缓存的数据页类型有: 索引页、数据页、undo页、插入缓冲(insert buffer)、自适应哈希索引(adaptive hash index)、InnoDB存储的锁信息(lock info)、数据字典信息(data dictionary)等。 InnoDB中,数据管理的最小单位为页,默认是16KB,页中除了存储用户数据,还可以存储控制信息的数据。InnoDB IO子...

MySQL 系列 多版本并发控制

MySQL 技术内幕:InnoDB存储引擎

多版本并发控制(Multi-Version Concurrency Control, MVCC)指的是一种提高并发的技术。MVCC的实现方式有多种, 典型的有乐观(optimistic)并发控制和悲观(pessimistic)并发控制; 多版本并发控制是InnoDB存储引擎实现隔离级别的一种具体方式,用于实现 已读提交和可重复读 两种隔离级别。读未提交隔离级别总是读取最新的数据行,无需使用...

zookeeper 系列 概述

一个开源的分布式协同服务

Zookeeper 是一个开源的分布式协同服务系统,Zookeeper 的设计目标是将那些复杂且容易出错的分布式协同服务封装起来,抽象出一个高效可靠的原语集,并以一系列简单的接口提供给用户使用。 应用场景 Zookeeper 提供了 Master 选举、分布式锁、配置管理(数据发布与订阅)等诸多功能。 关于 ZooKeeper 这样的系统功能的讨论都围绕着一条主线:它可以在分布式...

分布式 系列 Paxos协议

Paxos算法是Lamport提出的一种基于消息传递的分布式一致性算法。 其中提出了一个问题: 在古希腊有一个叫做Paxos的小岛,岛上采用议会的形式来通过法令,议会中的议员通过信使进行消息的传递。值得注意的是,议员和信使都是兼职的,议员随时有可能会离开议会厅,并且信使可能会重复的传递消息,也可能一去不复返。因此,议会协议要保证在这种情况下法令仍然能够正确的产生,并且不会出现冲...

分布式 系列 Dynamo

Dynamo是Amazon实现的一款KV存储。为了支持Amazon大规模且持续增长的用户,具有高可用、高扩展性的特性。Dynamo有一个重要的设计目标:允许应用自己控制自己的系统特性(例如持久性和一致性)让应用自己决定如何在功能、性能和成本效率之间取得折中。 设计目标 Query Model: 通过唯一的key来对数据进行读写。数据以二进制的形式存储,并以唯一的key标识。没有操作...

分布式 系列 BigTable

作为 Google 的大数据三架马车之一,Bigtable 依托于 Google 的 GFS、Chubby 及 SSTable 而诞生,用于解决 Google 内部不同产品在对数据存储的容量和响应时延需求的差异化,力求在确保能够容纳大量数据的同时减少数据的查询耗时。Apache HBase 的设计很大程度上受到了 Bigtable 的影响,学习 Bigtable 的原理也有助于更好地理解 H...

分布式 系列 Dynamo

Dynamo是Amazon实现的一款KV存储。为了支持Amazon大规模且持续增长的用户,具有高可用、高扩展性的特性。Dynamo有一个重要的设计目标:允许应用自己控制自己的系统特性(例如持久性和一致性)让应用自己决定如何在功能、性能和成本效率之间取得折中。 设计目标 Query Model: 通过唯一的key来对数据进行读写。数据以二进制的形式存储,并以唯一的key标识。没有操作...