做奖杯的企业网站,上虞网站建设,网络公司 网站源码,网站建设做什么费用其他资料 每日速记10道java面试题01-CSDN博客
每日速记10道java面试题02-CSDN博客
每日速记10道java面试题03-CSDN博客
每日速记10道java面试题04-CSDN博客
每日速记10道java面试题05-CSDN博客
每日速记10道java面试题06-CSDN博客
每日速记10道java面试题07-CSDN博客
每…其他资料 每日速记10道java面试题01-CSDN博客
每日速记10道java面试题02-CSDN博客
每日速记10道java面试题03-CSDN博客
每日速记10道java面试题04-CSDN博客
每日速记10道java面试题05-CSDN博客
每日速记10道java面试题06-CSDN博客
每日速记10道java面试题07-CSDN博客
每日速记10道java面试题08-CSDN博客
每日速记10道java面试题09-CSDN博客
每日速记10道java面试题10-CSDN博客
每日速记10道java面试题11-CSDN博客
每日速记10道java面试题12-CSDN博客
每日速记10道java面试题13-MySQL篇-CSDN博客
每日速记10道java面试题14-MySQL篇-CSDN博客
每日速记10道java面试题15-MySQL篇-CSDN博客
目录 1.如何在MySQL中避免单点故障/如何实现读写分离
2.如何处理MySQL的主从同步延迟
3.什么是分库分表分库分表有哪些策略
4.对数据库分库分表会产生哪些问题
5.从 MySQL获取数据是从磁盘读取的吗?
6.MySQL 的 Doublewrite Buffer 是什么?它有什么作用?
7.什么是MySQL的Log buffer
8.为什么在数据库中都是不推荐使用多表JOIN
9.MySQL 中 DELETE、DROP 和 TRUNCATE 的区别是什么?
10.MySQL中INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别是什么? 1.如何在MySQL中避免单点故障/如何实现读写分离
一般会使用主从架构的形式主数据库从数据库读操作只在从数据库中读写操作往主数据库中写写完之后再数据同步到从数据库当主数据库崩了之后就让从数据库顶上来读写操作都由从数据库承担等到主数据库恢复了之后再将从数据库中的数据同步到主数据库并恢复读写分离。
2.如何处理MySQL的主从同步延迟
主从同步延迟就是主数据库和从数据库之间的数据同步存在时间差导致从数据库的数据落后于主数据库。这种延迟是必然存在的我们无法避免只能尽量减少。
我能想到比较好的两点方案能够尽量减少主从同步延迟
第一点就是关键业务的读写都走主数据库比如用户注册这种比较重要的这样用户登录进来就不会说账号不存在等问题。
第二点就是设置缓存在主库写入之后同步到缓存这样每次查询就先查缓存缓存没有再查数据库但是这样又会出现缓存数据不一致的问题。
3.什么是分库分表分库分表有哪些策略
什么是分库分表: 将数据进行拆分放到不同的数据库或者表中 分库分表的类型(策略):水平分表垂直分表垂直分库水平分库 水平分表:将一个表按行进行拆分分成多行放到不同的表中表数据太多了分一点到其他表 垂直分表:将一个表按列进行拆分分成多列放到不同的表中表字段太多了分一点到其他表 水平分库:不同的库可以具有相同的表结构只不过每个表里面的数据不一样。 垂直分库:根据功能或者模块进行分库不同的库存储不同功能或模块的数据例如用户模块订单模块一个搞一个数据库。 水平分库比垂直分库维护起来更加的困难跨库查询更加的复杂。 为什么要分库分表:业务发展需要用户以及数据越来越多单库单表抗不住压力性能差。分库分表能够提升性能。
4.对数据库分库分表会产生哪些问题
1.事务问题。单机事务用不上得使用分布式事务而分布式事务大多只能保证数据的最终一致性所以可能存在数据不一致的场景 2.分库之后不同库里面的表不能进行ioin查询。一般在应用层进行外理可以先查出一个表里面的数据然后根据这些数据做一些处理之后去查另一个库里面的表最后进行整合得到最终结果。还可以在表里面存储一些冗余数据避免连表查询。 3.主键id重复问题。主键id在分库分表之后可能存在重复的情况可以使用雪花算法或者分布式唯一id生成器来生成。 4.order by和count问题。分库分表后order bycount无法通过数据库直接实现。可以通过应用层代码实现。
这里可能会被问到分布式事务、分布式唯一id生成器等问题
5.从 MySQL获取数据是从磁盘读取的吗?
并不总是从磁盘读取。mysql8.0之前有查询缓存会先去查询缓存里面找如果查询缓存里面有的话直接返回。8.0的时候移除了查询缓存因为命中率低它是以sql作为keysql语句要相同而且表不能发生任何变化才能命中。还有个buffer pool里面存储了一个一个的数据页mysql会从buffer pool里面找如果找到的话就会返回。
6.MySQL 的 Doublewrite Buffer 是什么?它有什么作用?
MySQL 的 Doublewrite Bufer 是 InnoDB存储引擎中的一个机制用于确保数据的安全性和一致性。它的作用是将数据先写入一个内存缓冲区(双写缓冲区)然后再将其写入数据文件。这种方式可以防止在写入过程中因崩溃或故障导致数据损坏确保数据的一致性和完整性。 工作原理简述: 写入流程:当事务提交时InnoDB 首先将数据写入 Doublewrite Buffer再从该缓冲区将数据写入磁盘的实际数据文件。 恢复机制:在崩溃恢复时InnoDB 会使用 Doublewrite Buffer 中的数据来修复损坏的页保证教据不丢失。
延伸→那如果在写入Buffer的时候就出问题了怎么办
这个问题我没深入研究过我觉得InnoDB引擎在底层应该会对这次操作进行再次执行并重试写入Buffer中。 7.什么是MySQL的Log buffer
详情请跳转我的另一篇文章MySQL数据表中的InnoDB引擎原理存储结构架构事务原理MVCC_mysql innodb存储引擎实现原理-CSDN博客
8.为什么在数据库中都是不推荐使用多表JOIN
多表 JOIN 可能导致查询性能下降尤其是在处理大数据集时JOIN 操作的计算复杂度会显著增加需要进行大量的数据扫描和匹配,增加了内存和CPU的消耗导致响应时间变长。数据量小倒数据库往往是我们系统的弱点很多情况下性能瓶颈都在数据库因此我们需要尽量避免把压力放在数据库上。
如果实在要JOIN尽量值JOIN两张表三表以上不JOIN太耗性能了。JOIN的时候尽量小表做驱动表因为驱动表要全表扫描被驱动表走索引整体复杂度是A2log2B*AA为驱动表B为被驱动表所以尽量让A尽量小。
9.MySQL 中 DELETE、DROP 和 TRUNCATE 的区别是什么?
1.Delete 用于删除行数据但保留表结构和相关的对象。 2.Drop 用于完全删除数据库表包括数据和结构。 3.Truncate只删除数据不会删除表结构和索引等其他结构。
10.MySQL中INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别是什么?
inner join 内连接:内连接就是返回两张表都关联上的数据 left join 左连接:返回时保留左表的数据右表关联不上的会显示null值 right join 右连接:返回时保留右表的数据左表关联不上的会显示null值