Monthly Archives: 2月 2021

Elasticsearch 运维 – Shard 原理

By | 2月 21, 2021

分片是 Elasticsearch 分布式存储的基石。在 Elasticsearch 中有 主分片(Primary Shard)副本分片(Replica Shard) 两种。

Primary Shard

Elasticsearch 通过主分片,将数据分布在所有的节点上。主分片可以将一份索引的数据,分散在多个 Data Node 上,实现存储的水平扩展。

主分片(Primary Shard)数在索引创建的时候指定,后续默认不能修改,如果需要修改,需重建索引。…

Elastcisearch 运维 – 角色划分与选主流程

By | 2月 21, 2021

Elasticsearch 的分布式架构

  • 不同的集群通过不同的名字来区分,默认名字“elasticsearch”
  • 通过配置文件修改,或者在命令行中 -E cluster.name=name 进行设定

节点

  • 节点是一个 Elasticsearch 的实例,本质上是一个 Java 进程。一台机器上可以运行多个,但生产环境一般只运行一个 Elasticsearch 实例
  • 每一个节点都有名字,通过配置文件配置,或者启动的时候 -E node.name=nodename

MySQL 普通索引和唯一索引

By | 2月 17, 2021

问题引入

假设在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似的 SQL:

select name from user where id_card = 'xxx';

所以,我们一定会考虑在 id_card 字段上建索引。

由于身份证号字段比较大,所以它不适合当做主键。那么 id_card 字段是要创建唯一索引还是普通索引呢?此处假设业务代码已经保证了不会写入重复的身份证号,这两个选择在逻辑上都是正确的。…

MySQL 索引

By | 2月 14, 2021

索引分类

索引类型分为 主键索引非主键索引

主键索引的叶子节点存储的是整行数据。在 InnoDB 里,主键索引也被称为 聚簇索引(clustered index)

非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为 二级索引(secondary index)

基于主键索引和普通索引的查询有什么区别?

  • 如果语句是 select * from T where id=500 这种主键查询方式,则只需要搜索 id 这个索引对应的

MySQL 日志模块

By | 2月 13, 2021

MySQL 里如果每一次的更新操作都写磁盘的话,那么这个过程中磁盘要找到对应的那条记录,然后再更新,整个过程中的 IO 成本、查找成本都很高,所以 MySQL 中采用了 WAL(Write-Ahead Logging)技术来解决这个问题。

关键点是:先写日志,再写磁盘

redo log

redo log 是 InnoDB 引擎特有的日志。

当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log 中,并更新内存,这个时候更新就算完成了。同时,InnoDB…

MySQL 事务

By | 5月 6, 2021

概念

ACID:Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。

隔离级别

SQL 标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)、串行化(serializable)

下面的表格从自己和他人的视角分别描述这四个隔离级别:

隔离级别 自己视角