随笔分类 - Mysql
摘要:如何实现mysql的读写分离? 就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去。 MySQL主从复制原理的是啥? 主库将变更写binlog日志,然后从库连接到主库之后,从库有一个IO线程,将主库的binlog日志拷贝到自己本地
阅读全文
摘要:数据库自增id: 这个就是说你的系统里每次得到一个id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个id。拿到这个id之后再往对应的分库分表里去写入。 这个方案的好处就是方便简单;缺点就是单库生成自增id,要是高并发的话,就会有瓶颈的; 适合的场景:你分库分表就俩
阅读全文
摘要:设定好几台数据库服务器,每台服务器上几个库,每个库多少个表,推荐是32库 * 32表。 比如4台服务器,每台服务器上8个库,每个库32张表。 路由的规则,orderId%32 = 库,orderId / 32 %32 = 表 扩容的时候,申请增加更多的数据库服务器,装好mysql,倍数扩容,4台服务
阅读全文
摘要:停机迁移方案 网站或者app挂个公告,说0点到早上6点进行运维,无法访问 接着到0点,停机,没有流量写入了,此时老的单库单表数据库静止了。然后你之前得写好一个导数的一次性工具,此时直接跑起来,然后将单库单表的数据读出来,写到分库分表里面去。 导数完了之后,就ok了,修改系统的数据库连接配置啥的,包括
阅读全文
摘要:单表到几百万的时候,性能就会相对差一些了,你就得分表了。 分表是啥意思?就是把一个表的数据放到多个表中,然后查询的时候你就查一个表。比如按照用户id来分表,将一个用户的数据就放在一个表中。然后操作的时候你对一个用户就操作那个表就好了。这样可以控制每个表的数据量在可控的范围内,比如每个表就固定在200
阅读全文
摘要:一、缓存式的Web应用程序架构: 在Web层和db层之间加一层cache层,主要目的:减少数据库读取负担,提高数据读取速度。cache存取的媒介是内存,可以考虑采用分布式的cache层,这样更容易破除内存容量的限制,同时增加了灵活性。 二、业务拆分: 电商平台,包含了用户、商品、评价、订单等几大模块
阅读全文
摘要:可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。 虽然实现机制有所不同,但大都实现了非阻塞的读操作,写操作也只锁定必要的行。 MVCC的实现是通过保存数据在某个时间点的快照来实现的。 MVCC只在读提交和可重复读这两个隔离级别下工作。 保存这两个额外的系统版本号,
阅读全文
摘要:MYISAM与innodb搜索引擎原理 MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。其采用索引文件与数据文件,索引文件只存放索引,叶子节点存放数据的物理地址。数据文件存放数据。其索引方式是非聚集的。 InnoDB也使用B+Tree作为索引结构。但是它的主索
阅读全文
摘要:MySQL调优三步: 慢查询 (分析出现出问题的sql) Explain (显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句) Profile(查询到 SQL 会执行多少时间, 并看出 CPU/Memory 使用量, 执行过程中 System
阅读全文
摘要:MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符. select_type: SELECT 查询的类型. S
阅读全文
摘要:乐观锁和悲观锁是属于一种思想,不是具体的锁。 悲观锁(Pessimistic Lock): 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。 传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁
阅读全文
摘要:概述: 汉语字典的正文本身就是一个聚集索引。 比如要查z开头的,我们会自然翻到字典的后半部分,而不是从前往后一页一页翻,避免了全表扫描。 而当我们翻到那一页,就能得到内容,而不需要再去查其他目录来找到需要找的内容。 字典正文内容本身就是一种按照一定规则排列的索引,索引中的叶子节点保存的就是要查找的数
阅读全文
摘要:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 目前,主要有六种范式:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。满足最低要求的叫第一范式
阅读全文
摘要:内连接(INNER JOIN): 分为三种 等值连接、自然连接、不等连接 外连接(OUTER JOIN): 左外连接(LEFT OUTER JOIN或LEFT JOIN) 右外连接(RIGHT OUTER JOIN或RIGHT JOIN) 全外连接(FULL OUTER JOIN或FULL JOIN
阅读全文
摘要:概述: 索引(Index)是帮助MySQL高效获取数据的数据结构。 索引是以表列为基础的数据库对象,它保存着表中排序的索引列,并且记录了索引列在数据表中的物理存储位置,实现了表中数据的逻辑排序, 其主要目的是提高数据库系统的性能,加快数据的查询速度和减少系统的响应时间。 在MySQL中,索引是在存储
阅读全文
摘要:MySQL的存储引擎 InnoDB: MySQL5.5之后的默认存储引擎。 采用MVCC来支持高并发,并且实现了四个标准的隔离级别(默认可重复读)。 支持事务,支持外键、支持行锁、非锁定读(默认读取操作不会产生锁) 行锁优点是适用于高并发的频繁表修改,高并发是性能优于 MyISAM。缺点是系统消耗较
阅读全文
摘要:数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable 这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。 READ UNCOMMITTED (未提交读): 事务中的修改,即使没提交,对
阅读全文
摘要:数据库事务 事务指的是满足 ACID 特性的一系列操作。在数据库中,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 MYSQL 事务处理主要有两种方法: 1、用 BEGIN, ROLLBA
阅读全文