脏数据:可以理解为临时值。当事务A更新了数据,但是还未提交时事务B进行了读取。当事务A出问题进行回滚回原值,那么事务B已经读取的就是一个脏数据。
不可重复读:理解为在同一事务内的两次相同查询返回不同的值。导致原因是这两次查询中间被另一个事务修改了数据。重点修改。
幻读:当事务不是独立执行时发生的现象。当事务A对表中所有数据进行了修改或读取。同时事务B在表中插入数据。那么会在事务A后感觉还有数据没有被修改或读取到的幻觉。重点新增或删除。
解决:设置隔离级别。
数据层面的锁:悲观锁+乐观锁
悲观锁:sql+for update。锁定了所有符合条件的语句。
乐观锁:添加version标志,操作时比较version,成功后更新version。
数据库拆分:水平拆分+垂直拆分
水平拆分:表结构还是相同的,但是数量减少了,比如500w的表平均拆分10张的话,每张表就只有50w。拆分方式:顺序,hash取模,建立映射关系。
垂直拆分:将表结构拆分。如将一个10个字段的表拆成两张5个字段的表。
读写分离
缓存
负载均衡