美文网首页
数据库索引事务与主从同步

数据库索引事务与主从同步

作者: 谭英智 | 来源:发表于2021-03-07 15:29 被阅读0次

索引

  • B+树

    优点:

    • 磁盘读取快
    • 支持区间提取
    • 支持左前缀匹配
    • 查询复杂度log(n),由于磁盘支持顺序读非常好,因此查询可以很快

    缺点:

    • 大数据不占优
    • 写吞吐受限,因为有大量的随机IO,调整树结构也会带来大量的IO
  • hash

    优点:

    • kv O(1)访问

    缺点:

    • 不支持区间提取
    • 不能比较大小
  • LSM

    解决b树写慢的问题

    组成:

    • Memstore,用于保存最新写入的数据,是一个内存的有序集,可以用跳跃表实现,update,delete,insert都不会改变StoreFile的数据,会以追加的方式写入Memstore
    • HLog,每次写入都是先写log,使得可以重建Memstore在遇到故障时
    • StoreFile,当Memstore达到一定大小的时候,数据会存入StoreFile(磁盘),磁盘上会按时间顺序有多个storeFile

    牺牲了读的性能,提高了写的性能

    优化:

    • Boom过滤器
    • compact
    • 内存LRU算法
  • 倒排索引(GIN索引)

  • GIST索引

    传统的大于,小于,等于无法满足地理数据之类的运算,例如位于左侧,右侧,包含

    GIST使用R-tree的结构对数据(x,y)进行建索引

db-r-tree

事务

类型

  • 读未提交

    会带来脏读

  • 读已提交

    解决了脏读,会带来不可重复读

  • 可重复读

    解决了不可重复读(针对update,查询同一个字段,两次读不一样),带来了幻读(针对insert和delete,在查询一个区间,两次查询的结果不一样)

    MVCC解决方案:

    • 每个事务都有一个单调递增的commitid,如果事务修改了某条记录,会增加记录修改这条记录的commitid
    • 如果某个事务过来查询,它会比较这条记录的commitid是否大于自己,如果大于则去找更小的commitid的版本,并读取
  • 串行化

    解决了幻读

    MVCC解决方案:

    • 读写入的commitid小于自己的commitid的记录
    • 读删除的commitid大于自己的commitid或者删除的commitid为空的记录

    insert:写入commitid

    update:写入原记录的删除commitid,但不删除原记录,写入新记录并写入commitid

    delete:写入原纪录删除commitid,但不删除记录

HA

MYSQL

db-binlog

写binlog的时机:

  • 如果配置sync_binlog=0,代表mysql不控制binlog刷新,由操作系统控制缓存刷新
  • 如果配置为1,代表一个事务刷新一次binlog,故障时,最多丢失一个事务
  • 如果配置为n,代表n个事务刷新一次binlog,故障时,会丢失多个事务

同步类型:

  • 异步同步

    不关心同步结果

  • 全同步复制

    需要全部slave都执行了事务才返回

  • 半同步复制

    至少等待一个slave执行了事务,才返回

POSTGRESQL

通过WAL log来同步,如果master故障,slave会落后一个WAL log的数据。

因此引入了流复制的概念。

流以事务为单位,数据源源不断的从master流向slave。这样做可以大大减少因为故障而丢失数据的数量。

  • 同步流复制:一个提交必须等待slave写成功才返回
  • 级联流复制:备库可以再连备库
  • 逻辑复制:只对某些表复制
  • 异步流复制

WAL log写入时机:

  • 以事务为单位,再commit后刷新到磁盘

相关文章

  • 数据库索引事务与主从同步

    索引 B+树优点:磁盘读取快支持区间提取支持左前缀匹配查询复杂度log(n),由于磁盘支持顺序读非常好,因此查询可...

  • Python MySQL数据库5:MySQL高级知识&账

    总体内容 1、视图 2、事务 3、索引 4、账户管理 5、MySQL主从同步配置 一、视图 1.1、问题?对于复杂...

  • mysql高级:视图、事务、索引

    # mysql高级:视图、事务、索引 * 视图 * 事务 * 索引 * 账户管理 * 主从 ## 1.视图 动态抽...

  • Redis

    Redis 概念 1、Nosql 2、基于内存的数据库 3、支持集群、分布式、主从同步、一定的事务能力 应用场景 ...

  • mysql数据同步

    测试环境数据库同步,使用主从同步,但生产环境中,为了高可用,两组数据库,每组数据库组内实现主主互备,这时主从方案就...

  • 【Redis】- 集群篇

    三种集群方式 主从同步:主从复制模式中包含一个主数据库实例(master)与一个或多个从数据库实例(slave)优...

  • 【MySQL】MySQL5.6数据库基于binlog主从(Mas

    主从数据库同步原理 主从数据库同步工作原理(流程):当主库的数据发生修改时,数据更改的记录将写入到主库的二进制文件...

  • 主机的主从备份

    对于数据库来说,可以通过主从同步的方式同步数据,那么如果需要普通文件的备份,那么如何进行主从同步那,一般通过rsy...

  • MySQL集群篇

    1 集群之主从复制 1.1 主从复制概述 MySQL主从复制也可以称为MySQL主从同步,它是构建数据库高可用集群...

  • mysql-主从配置

    主库:[mysqld] 下面 主从通过这个id沟通,主从配置id不能相同 server-id = 1 同步数据库名...

网友评论

      本文标题:数据库索引事务与主从同步

      本文链接:https://www.haomeiwen.com/subject/unkyqltx.html