zoukankan      html  css  js  c++  java
  • 高性能MySQL笔记(第十章 复制)02

    p469 ~ p534. 分为2部分, p469 ~ p501(10.1 ~ 10.4), p501 ~ p534.

    一些命令

    • 查看binlog, show binlog events in 'mysql-bin.000001' from 4. 可以查看执行的每条语句

    复制和容量规划

    假设工作负载为20%的写以及80%的读. 为了计算简单, 假设有以下前提:

    • 读和写包含同样的工作量
    • 所有的服务器是等同的, 每秒能进行1000次查询
    • 备库和主库有同样的性能特征
    • 可以把所有的读操作转移到备库

    问题1: 每秒2000次查询, 需要增加多少备库才能处理.

    由于写占20%, 则400次写, 1600次读. 对于每个备库, 也有400次写, 所以最多支持600的读, 因而需要1600/600 =2.7, 即3台备库.

    问题2: 每秒4000次查询, 需要增加多少备库.

    800次写, 3200次读. 每个备库最多支持200的读, 因而需要16台备库. 这里写操作成了瓶颈, 导致写操作浪费了太多资源, 增加备库收益很低.

    有2个维度的优化:

    1. 降低写操作的负载, 提高写操作的效率. 比如降低到10%. 这样只要7台备库就可支持.
      具体方式如递增主键比随机主键要快, 日志写入就比随机写入效率高等.
    2. 降低单库写入次数. 如分库分表, 将数据按维度平均划分为2个维度. 这样每个维度都是相对独立的, 每个维度的量都是每秒2000次查询, 这样就不需要太多的备库.

    将上面优化方式不断进化, 就有了读写分离, Event Sourcing 和 CQRS.
    传统的数据库是CRUD, 可以新增, 更新, 删除数据. 更新之后原值就丢失了, 没有相应的历史记录. 而且更新是随机写入, 效率较低. Event Sourcing的思路是将新增, 更新, 删除等动作都视为Event, 以日志插入的方式, 插入到最后, 这样写的效率很高, 而且不容易出现脏数据. 读的话, 采用实时计算的方式, 将相关的Event重放一次, 就得到最新的状态.

    • 优点
      记录了所有历史. 读写分离, 读和写的效率很高, 可扩展性强. 不容易出现脏数据.
    • 缺点
      复杂性高.

    参考

    -Introduction to CQRS. https://www.cnblogs.com/yangecnu/p/Introduction-CQRS.html
    -EventSourcing. https://martinfowler.com/eaaDev/EventSourcing.html
    -CQRS. https://martinfowler.com/bliki/CQRS.html

  • 相关阅读:
    元素的定位问题
    报纸排版(分列示例)
    background的属性和背景图片定位的实例
    CSS选择器小结
    URL与图像格式
    MIME(Multipurpose Internet Mail Extensions)的简介
    介绍两种风格的URL
    门店销售讲究多
    软件项目中需求管理工作的重要性
    谈谈需求变更跟踪
  • 原文地址:https://www.cnblogs.com/winwink/p/HighPerformanceMySql_Chapter10_Replication_02.html
Copyright © 2011-2022 走看看