DB及数据交互
文章平均质量分 90
BigBug_500
Talk is cheap.Show me the code.
EmailMeAt:snail.pu@foxmail.com
展开
-
事务、分布式事务常见解决方案与对比
从 CPU 到内存、到磁盘、到操作系统、到网络,计算机系统处处存在。工程师和科学家努力使用各种软硬件方法对抗这种不可靠因素,保证数据和指令被正确地处理。在网络领域有 TCP 可靠传输协议、在存储领域有 Raid5 和 Raid6 算法、在数据库领域有基于 ARIES 算法理论实现的事务机制……本文将从实际场景出发(Trade、Fund),介绍传统事务下的并发操作问题、分布式场景下操作多数据源面临的问题,然后给出一些常用的解决方案。原创 2024-05-16 19:56:44 · 963 阅读 · 0 评论 -
InnoDB 中锁的实际应用(KeyWord:MVCC / 一致性[非]锁定读)
DB中锁的概念:锁的存在,是为了保证数据的完整一致等特性;而加锁的方式将决定 DB 处理并发的能力。以下对锁的一些介绍,是为了在使用的 MySQL 时,避免出现重量级锁降低 DB 的并发性能。InnoDB下的锁(属于悲观锁):行级锁:排他锁(x)、共享锁(s)。如InnoDB存储引擎使用。页面锁。如BerkeleyDB存储引擎使用。表级锁:意向排他锁(ix)、意向共享锁(is)。如MyISAM,Memory等非事务性存储引擎在使用。允许行级、表级锁共存。在获取两种行级锁之前,必须原创 2021-08-30 21:31:37 · 237 阅读 · 1 评论 -
分库分表、MySQL分区表
为什么需要分区 随着业务量的增长,数据量也会随之增加,进而影响 DQL (Data Query Language)、DDL(Data Definition Language),使其耗费更多,影响业务的可用性,同时导致从库延迟很大,如果业务做了读写分离,那么用户的一些重复操作将产生脏数据。什么时候进行分区 阿里开发手册建议,单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。如果预计三年后的数据量根本达不到这个级别,则不考虑该问题。 作为常见的InnoDB,其容量最大限原创 2021-07-21 17:22:49 · 867 阅读 · 0 评论 -
MySQL索引的数据结构、特点(Keywords:InnoDB、B+Tree、Hash)
B+树索引 在数据库中,B+树是高度平衡的,树的高度一般都在2 ~ 4层,所以查某一键值的行记录最多需要2 ~ 4次 IO。B+ 树索引种类分为聚集索引(clustered index)和辅助索引(secondary index)聚集索引(clustered index) 聚集索引按照每张表中的主键顺序构建B+树(每张表只能有一个主键,故每张表只能有一个聚集索引),其叶子节点存放所有的行数据,...原创 2021-07-04 21:43:51 · 720 阅读 · 1 评论 -
事务 / 分布式事务的常见解决方案
分布式事务的实现方案XA 方案:两阶段提交。事务时间长,锁数据时间长,吞吐量低(实现方式 JTA)TCC 方案(Try Confirm Cancel):强一致性,吞吐量较方案一高SAGA 方案:保证最终一致性本地消息表可靠消息最终一致性方案最大努力通知方案...原创 2021-05-30 21:02:04 · 570 阅读 · 1 评论 -
DB调优(不解释连招) :表设计和SQL方向下
一、从表设计方向上: 在设计表时,遵循设计范式,尽量使用一对一、一对多,当出现多对多时,尽量使用中间表来存储(在同一个项目中,如果有多种多对多的场景,可以考虑将所有多对多的中间关系存储在一张表中,达到减少表数量的目的)。三范式与主键设计参考二、从 SQL 语句方向上:1. 慢查询日志:慢查询日志中,会记录所有时间大于设定值的操作;包括DML、DQL、向binlog记录的SQL信息(binlog可用于数据恢复和主从同步用),都会被记载查看慢日志是否开启,记录文件名或表名。(文件位置一般在 /v原创 2020-06-16 17:35:03 · 1168 阅读 · 1 评论 -
MySQL 中 Join 的用例与原理
left join / right join / inner join对比区别:left join:保全左表数据和右表中联结字段相等的记录;如果右表没相关数据,会显示nullright join:保全右表数据和左表中联结字段相等的记录;如果左表没相关数据,会显示nullinner join:只返回两个表中联结字段相等的行,都不是null才返回用例基础表数据:left join...原创 2020-02-12 21:27:40 · 812 阅读 · 0 评论 -
MariaDB(MySQL)主从同步(异步复制)
为什么要使用主从同步:通过做主从复制(读写分离)来减轻主数据库的负载,提高系统I/O性能 当主DB中锁表、锁行后,读操作可以在从库中进行,保证业务的正常运作原理:当主服务器发生数据更改操作时,数据写入到数据文件和二进制文件中 从服务器的I/O thread来读取二进制文件,并把返回结果写入到本地中继日志中 从服务器的SQL thread读取本地的中继日志,然后写数据...原创 2019-04-23 12:26:31 · 905 阅读 · 0 评论 -
MySQL/MariaDB 下的存储引擎与特点
什么是存储引擎:存储引擎可以完成数据存储,并为存储的数据操作索引文件、数据文件等功能。MySQL支持的引擎类型:InnoDB(5.5.8后默认使用该引擎)及其特点支持事务 隔离级别默认为为 Repeatable,但与普通的 Repeatable 模式不同的是,InnoDB 使用了 next-key-locking(间隙锁)避免了 phantom(幻读)问题支持外键支持 行/表 级锁使用 clustered 索引 每一个表都有一个聚簇索引,要么是主键,要么是拥有唯一索引(unique原创 2021-06-06 11:48:28 · 371 阅读 · 2 评论 -
Spring中的IOC和AOP、事务的应用
什么是Spring:Spring是一个开源的,轻量级的IOC和AOP容器框架,简化了开发流程,方便了对其他框架的整合控制反转(Inversion Of Controll):将相互依赖对象的创建和协调工作都交由IOC容器来完成,当某个对象需要其他协作对象时,由IOC通过依赖注入(DI, Dependency Injection)的方式提供协作对象,达到只需要关注业务本身逻辑的目的。面向切面编...原创 2019-11-29 15:54:59 · 915 阅读 · 0 评论 -
数据库主键设计与范式
数据库设计的范式第一范式(1NF): 每一个字段都应当是原子性的,不可再分为多个列原创 2019-09-11 13:47:26 · 834 阅读 · 0 评论 -
MyBatis 进阶知识
基础定义:MyBatis 与 Hibernate 相似,都是持久层框架 ,而 MyBatis 是一款 半自动 ORM 工具(object relation mapping) ,其优点有:解除 SQL与程序代码的耦合支持编写动态 SQL 语句其缺点有:SQL 语句的编写工作量较大SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库MyBatis中 namespace 的作用namespace 实现了面向接口编程,通过 namespace 指定的接口,MyBatis自动找原创 2021-02-23 16:05:29 · 1357 阅读 · 7 评论 -
SQL中If,Case的区别与使用
IF函数(类似于三元表达式的效果):IF(expr,expr_true,expr_false)当expr为true时,if函数返回expr_true的值;否则返回expr_false的值eg:SELECT *,IF ( stu_sex='男', "1", "0" ) AS sex FROM stu在结果集中,stu_sex为男的sex都为1,其余情况为0IFNULL(exp...原创 2019-10-27 09:35:23 · 4247 阅读 · 0 评论 -
完成一张表的部分数据到另一张表
1.表结构完全一样INSERT INTO 目标表 SELECT * FROM 来源表; 2.表结构不一样(这种情况下得指定列名)INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表;(这里的话字段必须保持一致) INSERT INTO excelinfo(`name`) (SELECT CONCAT('...原创 2018-08-28 11:33:49 · 763 阅读 · 0 评论 -
MySQL常用索引,数据结构,聚簇/非聚簇(Deprecated)
MySQL常见索引类型:主键索引、唯一索引、普通索引、全文索引、组合索引(联合索引,多列索引)主键索引ALTER TABLE 表名 ADD PRIMARY KEY (列名);具有唯一性和自增长性,查询效率最快唯一索引ALTER TABLE 表名 ADD UNIQUE (列名);索引列的值必须唯一,但允许有空值。普通索引ALTER TABLE 表名 ADD IN...原创 2019-04-22 16:23:49 · 1005 阅读 · 1 评论