2016 - 2024

感恩一路有你

mysql可重复读原理 MySQL的可重复读级别能解决幻读吗?

浏览量:2190 时间:2021-03-17 16:01:53 作者:admin

MySQL的可重复读级别能解决幻读吗?

Mvcc现在用于主流数据库。使用RR隔离级别后,将不会发生不真实的读取。

根据不同的材料,RR是199X的ANSI SQL标准,但真正的数据库不一定符合标准(事实上,最好没有虚读)。

如何保证多线程从mysql数据库查询的数据不重复?

对于MySQL,可能会发生脏读、不可重复读和不真实读。MySQL的默认设置是repeatable read,即在一个事务中不会读取不同的数据。您可以执行以下操作:

1)打开两个客户端,两个客户端都设置为RR;

2)在一个事务中,查询一个操作以查找一段数据;例如,字段version=1中有数据;

3)在另一个事务中,删除version=1的数据;删除后,查询该事务中的数据是否为2所属没有更改,或者有版本为1的数据;

4)当我们继续更新2所属事务中的数据时,我们会发现它无法更新,并且会看到版本为1的数据。缓存一致性:缓存一致性,用什么一致性?它与数据库一致,外部查询每次都是一致的。那么,应该首先在缓存和数据库之间更新哪一个呢?有些人可能认为我可以先更新数据库,然后再更新缓存?但是你想过一个问题吗?当用户成功支付时,更新数据库,但是什么?如果你仍然显示你没有在缓存中付费,当用户频繁点击,数据库压力太大而无法同步到缓存时,你会感到尴尬吗?这是一个典型的不一致。当用户再次付费时,你告诉他已经付费了,他会骂死你。你怎么能这么做?我们可以先更新缓存,然后再更新数据库,那有什么问题?1) 缓存更新成功,但数据库更新失败,并被其他并发线程访问。2) 缓存消除成功,但数据库更新失败,也会导致后期数据不一致

在正常配置下,MySQL只能承载2000万数据(同时读写,表中有大的文本字段,单台服务器)。现在已经超过1亿,而且还在增加,建议按以下方式处理:

1子表。它可以按时间或一定的规则进行拆分,以便尽可能地查询子表中的数据库。这是最有效的方法。特别是写,放入一个新表,并定期同步。如果记录不断更新,最好将写入的数据放在redis中,并定期同步表3的大文本字段,将它们分隔成一个新的独立表。对于较大的文本字段,可以使用NoSQL数据库

4优化体系结构,或者优化SQL查询,避免联合表查询,尽量不要使用count(*)、in、recursion等性能消耗语句

5使用内存缓存,或者在前端读取时增加缓存数据库。重复读取时,直接从缓存中读取。

以上是一种低成本的管理方法,基本上几个服务器就可以做到,但是管理起来有点麻烦。

当然,如果总体数据量特别大,并且您不关心投资成本,请使用集群或tidb

mysql可重复读原理 mysql读已提交的实现机制 怎么解决不可重复读

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。