searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

星火计划四期-云计算 “数据库原理及代表类型”课程笔记

2022-11-18 08:32:50
170
0

【MySQL架构笔记】
MySQL分为“应用层、服务层、存储引擎层”

一、应用层
1、连接处理 
2、用户鉴权
3、安全管理

二、服务层
1. MySQL Management Server & utilities(系统管理)
2. SQL Interface(SQL 接口)
3. SQL Parser(SQL 解析器)
4. Optimizer (查询优化器)
5. Caches & buffers(缓存)

三、InnoDB存储引擎层
ACID事务兼容
基于B+树提供索引
分为:
1、内存池
2、后台线程
3、磁盘文件
3.1、内存池Buffer Pool(InnoDB缓存表和Index的主内存区域):
采用LRU算法
innodb_buffer_pool_size缓冲池大小,越大越好
innodb_old_blocks_pct老生代占整个LRU链长度比例,default=37
innodb_old_blocks_time老生代停留时间窗口,default=1000ms
(1)内存池-Redo Log Buffer
redo log先写入redo buffer cache,当redo buffer cache 可用小于50%时触发缓冲刷新写入到redo log文件中
innodb_flush_log_at_trx_commit(0=每秒写入redo log并刷盘;1=实时写入redo log并刷盘;2=实时写入redo log每秒刷一次盘)
(2)内存池-Double Write Buffer
双写缓冲区,提升可靠性,InnoDB特性之一
数据库IO最小单元16K。顺序写入缓冲池,离散写入表空间
Double Write Buffer=2MB Memory Double Write Buffer+2MB Disk ibdata
(3)内存池-Change Buffer
对Insert、Delete、Update操作做缓冲
innodb_change_buffer_max_size控制ChangeBuffer占BufferPool总内存比例,default=25,max=50
innodb_change_buffering控制Change Buffer对哪些DML起作用
show engine innodb status \G;
(4)内存池-AHI
自动表哈希索引建立
innodb_adaptive_hash_index启用AHI
innodb_adaptive_hash_index_parts哈希索引分区,default=8,max=512
show engine innodb status \G;
(5)内存池-Additional Memory Pool

3.2、日志
(1)redo log
重做日志,对表的操作进行记录,用于系统崩溃时的数据恢复。
InnoDB特有,顺序写,物理页日志,循环写
可以对“已提交的事务”前滚
(2)undo log
用于存放被修改的数据页修改前的镜像,即:存放未修改的数据,用于回滚(rollback)
可以对“未提交的事务”回滚
(3)binlog
二进制日志,记录所有DDL和DML语句(除了select和show)
用于复制和恢复(mysqlbinlog工具)
MySQL特有所有引擎都可以用,逻辑日志,追加写
MySQL主从复制
逻辑:Redo log write prepare->Write Binlog->Commit
sync_binlog(=1时最安全,最多丢失一个事务的更新)
格式:
1、STATEMENT:基于SQL语句复制,SBR;
2、ROW:基于行的复制(推荐),RBR;
3、MIXED:混合模式复制,MBR
(4)relay log
主从复制时的中继日志

3.3 CheckPoint
脏页写入到磁盘的技术
sharp checkpoint完全检查点,正常关闭数据库时触发
fuzzy checkpoint异常时触发
3.4 GTID
全局事务ID,为每一个在Master上提交的事务在复制集群中可以生成一个唯一的ID
GTID=UUID+TransactionID

四、主从复制
主节点:
1、 启用二进制日志;
2.、为当前节点设置一个全局唯一的server_id;
3.、创建有复制权限的用户账号 REPLIACTION SLAVE、REPLIATION CLIENT;
从节点:
1、启动中继日志;
2、为当前节点设置一个全局唯一的server_id;
3、使用有复制权限的用户账号连接至主节点,并启动复制线程;
(1)异步复制
性能最高,部分数据有丢失风险
exec->binlog->commit
....................->relay log->apply->binlog->commit
(2)半同步复制
至少一个从库生成对应事务的relay log并返回ack才会返回commit
最大程度保证数据不丢失
exec->binlog............................->commit
....................->relay log->[ACK]->apply->binlog->commit
参数:
rpl_semi_sync_master_timeout(超时退化时间):主库等待 ack 的超时时间, 如果超过这个时间则退化为异步复制, 默认值 10s
rpl_semi_sync_master_wait_point(主库事务提交的时间点:1-AFTER_SYNC,2-AFTER_COMMIT)
rpl_semi_sync_slave_trace_level: tace(日志等级设置:1-General;16-More detailed;32-Net wait level;64:Function level)
(3)组复制MGR
基于Paxos协议实现高可用
分为单Master模式(推荐)和多Master模式
exec->Consensus->certify->binlog->commit
........->Consensus->certify->relay log->apply->binlog->commit
........->Consensus->certify->relay log->apply->binlog->commit
五、运维优化:
表紧致命令:alter table xxx engine=InnoDB

六、高可用设计:
6.1组件切换方案:
1、KeepAlived+VIP
2、MHA+VIP(不用了)
3、replication-manager(Switchover+Failover)
4、orchestrator
6.2集群方案
6.2.1 InnoDB Cluster
故障专业、故障恢复、读写分离、负载均衡
1、支持Group Replication功能的MySQL Server
2、MySQL-Shell:提供AdminAPI、自动化配置Group Replication
3、MySQL-Router:读写分离、负载均衡
MGR故障检测机制,只有一台存活时不能提供服务
group_replication_consistency(数据一致性管理)
1. EVENTUAL:确保最终一致性,不能保证数据实时同步
2. BEFORE:确保本地强一致性,不保证其他节点数据实时同步
3. AFTER:确保全局强一致性,可以保证所有节点数据实时同步
4. BEFORE_AND_AFTER:最高级别,确保本地强一致性,全局强一致性
5. BEFORE_ON_PRIMARY_FAILOVER:确保从节点晋升为主节点后的本地一致性
6.2.2 Percona XtraDB Cluster
七、中间件
成熟度、功能性、稳定性、可扩展性、社区活跃度
ShardingSphere,MyCat,vitess,kingshard

【PostgreSQL架构笔记】
一、要点
支持复杂SQL查询、支持物化视图、存储过程
数据库本身也是数据库对象,逻辑上彼此隔离
所有数据库对象用OID进行内部管理
PG使用OS的文件系统进行对象存储
表空间分为: 默认表空间、系统字典表表空间、自定义表空间
查询执行过程:
建立连接->发送请求->解析分析->优化->执行->返回结果
优化器-表连接方式(Join):Nested Loop Join,Merge Join,Hash Join
“死元组”和“膨胀”:Update=Delete+Insert,不会物理删除,会膨胀,需要用vacuum清理
LSN(Log Sequence Number)是WAL日志的唯一全局标识,用select pg_current_wal_lsn();查询
支持Jsonb

二、PostgreSQL 核心进程:
• Postmaster守护进程
• Postgres服务进程
• BgWriter后台写进程 , 更新共享缓存池
• WaLWriter预写式日志进程
• AutoVAcuum系统自动清理
• SysLogger系统日志进程
• PgArch归档进程
• PgStat统计数据收集进程
• CheckPoint检查点进程

三、内存结构
Local Memory Area
Shared Memory Area

四、复制
预写日志记录用于保持数据库服务器间的数据同步
基于“WAL文件的日志传送”+基于“流式WAL记录的数据同步“

五、中间件
5.1 pgbouncer
作为连接池和代理层为PG和应用提供服务:会话连接池、事务连接池、语句连接池
不具备负载均衡、高可用、VIP
5.2 pgpool-II
具备连接池、负载均衡、自动故障转移、在线恢复、复制、watchdog
patroni高可用架构
vip+Keepalived+HAProxy+Patroni+etcd/ZK/consul

【分库分表笔记】
一、拆分规则
1.1垂直拆分
1.2水平拆分
分库、分表、分库+分表
分片键:用于分片的数据库字段
逻辑表:水平拆分的数据库/表的相同逻辑和数据结构表/库的总称
实际表:在分片的数据库中真实存在的物理表
1.3数据库拆分规则
range
hash
1.4事务一致性
分布式事务:适用于一致性要求极高的场景
最终一致性:适用于性能要求高,对一致性要求不高的系统
1.5全局主键
UUID
Snowflake:整体递增
Leaf:分布式递增ID生成(From美团)

【TiDB架构笔记】
一、架构
1、TiDB:表数据和KV的映射转换,无状态
2、TiKV:RocksDB改造的KV存储,Raft一致性算法,按Key切分成多个Region,每个Region为96MB
3、PD:调度管理-Placement Driver
4、TiFlash:列式存储

0条评论
0 / 1000
成俞晟
6文章数
5粉丝数
成俞晟
6 文章 | 5 粉丝
原创

星火计划四期-云计算 “数据库原理及代表类型”课程笔记

2022-11-18 08:32:50
170
0

【MySQL架构笔记】
MySQL分为“应用层、服务层、存储引擎层”

一、应用层
1、连接处理 
2、用户鉴权
3、安全管理

二、服务层
1. MySQL Management Server & utilities(系统管理)
2. SQL Interface(SQL 接口)
3. SQL Parser(SQL 解析器)
4. Optimizer (查询优化器)
5. Caches & buffers(缓存)

三、InnoDB存储引擎层
ACID事务兼容
基于B+树提供索引
分为:
1、内存池
2、后台线程
3、磁盘文件
3.1、内存池Buffer Pool(InnoDB缓存表和Index的主内存区域):
采用LRU算法
innodb_buffer_pool_size缓冲池大小,越大越好
innodb_old_blocks_pct老生代占整个LRU链长度比例,default=37
innodb_old_blocks_time老生代停留时间窗口,default=1000ms
(1)内存池-Redo Log Buffer
redo log先写入redo buffer cache,当redo buffer cache 可用小于50%时触发缓冲刷新写入到redo log文件中
innodb_flush_log_at_trx_commit(0=每秒写入redo log并刷盘;1=实时写入redo log并刷盘;2=实时写入redo log每秒刷一次盘)
(2)内存池-Double Write Buffer
双写缓冲区,提升可靠性,InnoDB特性之一
数据库IO最小单元16K。顺序写入缓冲池,离散写入表空间
Double Write Buffer=2MB Memory Double Write Buffer+2MB Disk ibdata
(3)内存池-Change Buffer
对Insert、Delete、Update操作做缓冲
innodb_change_buffer_max_size控制ChangeBuffer占BufferPool总内存比例,default=25,max=50
innodb_change_buffering控制Change Buffer对哪些DML起作用
show engine innodb status \G;
(4)内存池-AHI
自动表哈希索引建立
innodb_adaptive_hash_index启用AHI
innodb_adaptive_hash_index_parts哈希索引分区,default=8,max=512
show engine innodb status \G;
(5)内存池-Additional Memory Pool

3.2、日志
(1)redo log
重做日志,对表的操作进行记录,用于系统崩溃时的数据恢复。
InnoDB特有,顺序写,物理页日志,循环写
可以对“已提交的事务”前滚
(2)undo log
用于存放被修改的数据页修改前的镜像,即:存放未修改的数据,用于回滚(rollback)
可以对“未提交的事务”回滚
(3)binlog
二进制日志,记录所有DDL和DML语句(除了select和show)
用于复制和恢复(mysqlbinlog工具)
MySQL特有所有引擎都可以用,逻辑日志,追加写
MySQL主从复制
逻辑:Redo log write prepare->Write Binlog->Commit
sync_binlog(=1时最安全,最多丢失一个事务的更新)
格式:
1、STATEMENT:基于SQL语句复制,SBR;
2、ROW:基于行的复制(推荐),RBR;
3、MIXED:混合模式复制,MBR
(4)relay log
主从复制时的中继日志

3.3 CheckPoint
脏页写入到磁盘的技术
sharp checkpoint完全检查点,正常关闭数据库时触发
fuzzy checkpoint异常时触发
3.4 GTID
全局事务ID,为每一个在Master上提交的事务在复制集群中可以生成一个唯一的ID
GTID=UUID+TransactionID

四、主从复制
主节点:
1、 启用二进制日志;
2.、为当前节点设置一个全局唯一的server_id;
3.、创建有复制权限的用户账号 REPLIACTION SLAVE、REPLIATION CLIENT;
从节点:
1、启动中继日志;
2、为当前节点设置一个全局唯一的server_id;
3、使用有复制权限的用户账号连接至主节点,并启动复制线程;
(1)异步复制
性能最高,部分数据有丢失风险
exec->binlog->commit
....................->relay log->apply->binlog->commit
(2)半同步复制
至少一个从库生成对应事务的relay log并返回ack才会返回commit
最大程度保证数据不丢失
exec->binlog............................->commit
....................->relay log->[ACK]->apply->binlog->commit
参数:
rpl_semi_sync_master_timeout(超时退化时间):主库等待 ack 的超时时间, 如果超过这个时间则退化为异步复制, 默认值 10s
rpl_semi_sync_master_wait_point(主库事务提交的时间点:1-AFTER_SYNC,2-AFTER_COMMIT)
rpl_semi_sync_slave_trace_level: tace(日志等级设置:1-General;16-More detailed;32-Net wait level;64:Function level)
(3)组复制MGR
基于Paxos协议实现高可用
分为单Master模式(推荐)和多Master模式
exec->Consensus->certify->binlog->commit
........->Consensus->certify->relay log->apply->binlog->commit
........->Consensus->certify->relay log->apply->binlog->commit
五、运维优化:
表紧致命令:alter table xxx engine=InnoDB

六、高可用设计:
6.1组件切换方案:
1、KeepAlived+VIP
2、MHA+VIP(不用了)
3、replication-manager(Switchover+Failover)
4、orchestrator
6.2集群方案
6.2.1 InnoDB Cluster
故障专业、故障恢复、读写分离、负载均衡
1、支持Group Replication功能的MySQL Server
2、MySQL-Shell:提供AdminAPI、自动化配置Group Replication
3、MySQL-Router:读写分离、负载均衡
MGR故障检测机制,只有一台存活时不能提供服务
group_replication_consistency(数据一致性管理)
1. EVENTUAL:确保最终一致性,不能保证数据实时同步
2. BEFORE:确保本地强一致性,不保证其他节点数据实时同步
3. AFTER:确保全局强一致性,可以保证所有节点数据实时同步
4. BEFORE_AND_AFTER:最高级别,确保本地强一致性,全局强一致性
5. BEFORE_ON_PRIMARY_FAILOVER:确保从节点晋升为主节点后的本地一致性
6.2.2 Percona XtraDB Cluster
七、中间件
成熟度、功能性、稳定性、可扩展性、社区活跃度
ShardingSphere,MyCat,vitess,kingshard

【PostgreSQL架构笔记】
一、要点
支持复杂SQL查询、支持物化视图、存储过程
数据库本身也是数据库对象,逻辑上彼此隔离
所有数据库对象用OID进行内部管理
PG使用OS的文件系统进行对象存储
表空间分为: 默认表空间、系统字典表表空间、自定义表空间
查询执行过程:
建立连接->发送请求->解析分析->优化->执行->返回结果
优化器-表连接方式(Join):Nested Loop Join,Merge Join,Hash Join
“死元组”和“膨胀”:Update=Delete+Insert,不会物理删除,会膨胀,需要用vacuum清理
LSN(Log Sequence Number)是WAL日志的唯一全局标识,用select pg_current_wal_lsn();查询
支持Jsonb

二、PostgreSQL 核心进程:
• Postmaster守护进程
• Postgres服务进程
• BgWriter后台写进程 , 更新共享缓存池
• WaLWriter预写式日志进程
• AutoVAcuum系统自动清理
• SysLogger系统日志进程
• PgArch归档进程
• PgStat统计数据收集进程
• CheckPoint检查点进程

三、内存结构
Local Memory Area
Shared Memory Area

四、复制
预写日志记录用于保持数据库服务器间的数据同步
基于“WAL文件的日志传送”+基于“流式WAL记录的数据同步“

五、中间件
5.1 pgbouncer
作为连接池和代理层为PG和应用提供服务:会话连接池、事务连接池、语句连接池
不具备负载均衡、高可用、VIP
5.2 pgpool-II
具备连接池、负载均衡、自动故障转移、在线恢复、复制、watchdog
patroni高可用架构
vip+Keepalived+HAProxy+Patroni+etcd/ZK/consul

【分库分表笔记】
一、拆分规则
1.1垂直拆分
1.2水平拆分
分库、分表、分库+分表
分片键:用于分片的数据库字段
逻辑表:水平拆分的数据库/表的相同逻辑和数据结构表/库的总称
实际表:在分片的数据库中真实存在的物理表
1.3数据库拆分规则
range
hash
1.4事务一致性
分布式事务:适用于一致性要求极高的场景
最终一致性:适用于性能要求高,对一致性要求不高的系统
1.5全局主键
UUID
Snowflake:整体递增
Leaf:分布式递增ID生成(From美团)

【TiDB架构笔记】
一、架构
1、TiDB:表数据和KV的映射转换,无状态
2、TiKV:RocksDB改造的KV存储,Raft一致性算法,按Key切分成多个Region,每个Region为96MB
3、PD:调度管理-Placement Driver
4、TiFlash:列式存储

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
1
0