
数据库
文章平均质量分 72
NUS_Ryan
规矩严格,功夫到家
展开
-
MySQL(三):切分,主从复制,读写分离
当一个表的数据不断增多的时候,sharding是必然的选择,它可以将数据分布到集群的不同节点上,从而缓解单个数据库的压力。垂直切分指的是将一张表按列拆分成多个表,通常是按照列的关系密集程度进行切分,也可以利用垂直切分将经常被使用的列和不经常被使用的列进行切分到不同的表中。在数据库的层面使用垂直切分将按数据库中表的密集程度部署到不同的库中,例如将原来的电商数据库垂直切分成商品数据库、用户数据库等。1.binlog线程: 负责将主服务器上的数据更改写入二进制的日志。映射表:使用单独的一个数据库来存储映射关系。原创 2023-02-17 21:20:38 · 800 阅读 · 1 评论 -
MySQL(二):InnoDB和MyISAM
即:InnoDB 如果添加其他辅助索引,辅助索引查询就需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也相应都会很大。(比如表中有id(主键),name,age 字段,我们创建一个主键索引,再来创建一个name索引,层级关系如下图所示)InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的;MyISAM是非聚集索引,它也是使用B+Tree作为索引结构,但是索引和数据文件是分离的,索引保存的是数据文件的指针。原创 2023-02-17 17:21:57 · 619 阅读 · 0 评论 -
MySQL(二):查询性能分析
对于连接查询,如果其中一个表发生变化,那么整个查询缓存就无法使用。而分解后的多个查询,即使其中一个表发生变化,对其它表的查询缓存依然可以使用。例如下面的例子中,使用 IN() 代替连接查询,可以让 MySQL 按照 ID 顺序进行查询,这可能比随机的连接要更高效。分解成多个单表查询,这些单表查询的缓存结果更可能被其它查询使用到,从而减少冗余记录的查询。在应用层进行连接,可以更容易对数据库进行拆分,从而更容易做到高性能和可伸缩。select_type : 查询类型,有简单查询、联合查询、子查询等。原创 2023-02-17 17:19:53 · 745 阅读 · 0 评论 -
MySQL(一):B+ Tree,索引以及其优点, 索引实战, 聚簇索引和非聚簇索引, 最左匹配,索引失效
在MySQL建立联合索引时会遵守最左前缀匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。由于构建一棵B+树只能根据一个值来确定索引关系,所以数据库依赖联合索引最左的字段来构建。举例:创建一个(a,b)的联合索引,那么它的索引树就是下图的样子。可以看到a的值是有顺序的,1,1,2,2,3,3,而b的值是没有顺序的1,2,1,4,1,2。但是我们又可发现a在等值的情况下,b值又是按顺序排列的,但是这种顺序是相对的。原创 2023-02-17 17:10:56 · 2277 阅读 · 0 评论 -
数据库(六): MySQL的主从复制和读写分离
实现的方式有很多,比如采用Spring AOP的方式去判断输入的mysql语句,如果sql语句中包含get,select,query就去连接slave,否则就去连接master。比如说,假设是单机,读和写都在一台mysql上面完成,性能肯定不高,如果有三台mysql,一台master只负责写操作,两台slave负责读操作,性能不就可以大大提高了吗。sharding.master-slave-rules是标明主库和从库,一定不要写错,否则写入数据到从库,就会导致无法同步。假设我们有三台虚拟机。原创 2023-02-13 11:27:03 · 457 阅读 · 0 评论 -
数据库(五):ER图
下图表示一个课程的先修关系,先修关系出现两个 Course 实体,第一个是先修课程,后一个是后修课程,因此需要用两条线来表示这种关系。虽然老师可以开设多门课,并且可以教授多名学生,但是对于特定的学生和课程,只有一个老师教授,这就构成了一个三元联系。用一个三角形和两条线来连接类和子类,与子类有关的属性和联系都连到子类上,而与父类和子类都有关的连到父类上。如果是多对多,画两个不带箭头的线段。本文转载于CYC CS Notes。如果是一对一,画两个带箭头的线段;包含一对一,一对多,多对多三种。转载 2023-02-12 19:06:31 · 1332 阅读 · 0 评论 -
数据库(四):函数依赖和数据库异常,第一范式,第二范式,第三范式,第四范式
本文转载于:https://zhuanlan.zhihu.com/p/20028672在阅读本文时,可以把“关系”理解为数据表。此外还有一个“关系模式”的概念。“关系”和“关系模式”的区别,类似于面向对象程序设计中”类“与”对象“的区别。”关系“是”关系模式“的一个实例,你可以把”关系”理解为一张带数据的表,而“关系模式”是这张数据表的表结构。转载 2023-02-12 17:41:32 · 2406 阅读 · 0 评论 -
数据库(四):多版本并发控制MVCC,行锁的衍生版本,记录锁,间隙锁, Next-Key锁(邻键锁)
MVCC,即多版本并发控制,是InnoDB机制中的一种用来解决读写冲突的无锁并发机制。我们可以简单认为MVCC式行锁的变种。在表锁中我们的读写是阻塞的,基于提升并发性能的考虑,MVCC一般读写是不阻塞的(很多情况避免了加锁的操作)。MVCC解决了脏读和不可重复读的问题,但是在某些情况仍然没有解决幻影读的问题。这就是为什么我们要引入接下来的邻键锁Next-Key Locks。原创 2023-02-11 17:35:20 · 748 阅读 · 0 评论 -
数据库(三):行锁和表锁,共享锁和排他锁,数据库引擎MyISAM和InnoDB,乐观锁和悲观锁
之前我们提到了数据库的隔离性可能会出现的若干问题,以及数据库为了解决这些问题而提出来的若干种隔离级别。实际上,数据库底层实现这些隔离级别的原理本质上就是通过各种封锁。今天我们在这里总结一下两种封锁粒度。原创 2023-02-11 17:11:51 · 1308 阅读 · 0 评论 -
数据库(二):数据库的隔离性以及并发一致性问题
在并发环境下,事务的隔离性很难被保证,因此会出现很多并发一致性问题。原创 2023-02-11 15:20:06 · 379 阅读 · 0 评论 -
数据库面经(一):事务的ACID特性
事务指的是满足ACID特性的一组操作,可以通过commit提交一个事务,也可以使用rollback进行回滚。原创 2023-02-03 10:47:22 · 255 阅读 · 0 评论