我正在开发一个具有典型CRUD web使用模式的网站:类似于用户创建/更新内容以及其他用户阅读内容的博客或论坛。
在本例中,将数据库的隔离级别设置为“读取未提交的”(脏读)似乎是可以的。我对“读未提交”的一般缺点的理解是,读取器可能读取未提交的数据,这些数据稍后将被回滚。
在CRUD博客/论坛使用模式中,会有任何回滚吗?即使存在,读取未提交的数据有什么重大问题吗?
现在我不使用任何复制,但是将来如果我想使用复制(基于行的,而不是基于语句的),“未提交的读”隔离级别会阻止我这样做吗?
你认为如何?有人试过在RDBMS上使用“未提交的读”吗?
发布于 2010-01-09 02:15:53
MySQL 5.1在使用读-未提交和绑定日志(复制所需的)时更严格,因此您可以在一些简单的update/delete语句上获得错误,而这些语句在默认的隔离级别上是不可重复读取的。我看到了一些简单的PK更新,如:
更新foo设置bar=1,其中id=1234;
错误: mysql_real_query错误1598消息:二进制日志不可能。消息: InnoDB中的事务级别“读-未提交”对于binlog模式“语句”是不安全的。
因此,您必须做好准备,在修改数据时切换回可重复读取,或者使用单独的连接进行读和写,并具有它们自己的隔离级别。当/如果需要您的项目规模和复制时,后者可以方便使用,因此您可以将select发送到只读从服务器上并在主服务器上写入。
OTOH,使用读-未提交的读取可能是一个真正的好处,如果一致的读取不是严格需要,因为Innodb有较少的锁可拿。
至于是否有可能回滚的问题,我认为您是告诉我们这个问题的最佳人选,因为您是编码它的人:)。
发布于 2010-01-08 06:42:09
此隔离级别意味着您可能读取不一致的数据。没有人能保证您所读取的数据是从数据库的一致视图中读取的。
这是否存在问题不是MySQL问题,而是应用程序问题,这涉及使用/返回不一致数据的风险评估。
在网上银行应用程序上,它将不会被禁止。在一场比赛中,这可能是可以的。那得看情况。
我使用了“未提交的读取”和复制,没有任何问题。
https://stackoverflow.com/questions/2025815
复制相似问题