MyISAM诉InnoDB

MyISAM诉InnoDB

我要说的是,我正在做一个涉及大量数据库写作的项目(70%的插入和30%的读取)。这一比率还将包括更新,我认为是一读一写。阅读可能很脏(例如,我在阅读时不需要100%准确的信息)。
所讨论的任务将是每小时处理100多万个数据库事务。

我在网上读过很多关于MyISAM和InnoDB之间的区别的文章,对我来说,MyISAM似乎是我在这个任务中使用的特定数据库/表的明显选择。据我所读,如果需要事务,则InnoDB是很好的,因为行级锁定是支持的。

有没有人有过这类负载(或更高的负荷)的经验?MyISAM是该走的路吗?


犯罪嫌疑人X
浏览 607回答 3
3回答

白衣非少年

我有一个简短的讨论表中的这个问题,这样您就可以得出是否与InnoDB或MyISAM.下面简要介绍一下在哪种情况下应该使用哪个db存储引擎:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyISAM&nbsp;&nbsp;&nbsp;InnoDB ---------------------------------------------------------------- Required&nbsp;full-text&nbsp;search&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.6.4 ---------------------------------------------------------------- Require&nbsp;transactions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yes ---------------------------------------------------------------- Frequent&nbsp;select&nbsp;queries&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---------------------------------------------------------------- Frequent&nbsp;insert,&nbsp;update,&nbsp;delete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yes ---------------------------------------------------------------- Row&nbsp;locking&nbsp;(multi&nbsp;processing&nbsp;on&nbsp;single&nbsp;table)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yes ---------------------------------------------------------------- Relational&nbsp;base&nbsp;design&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yes总结如下:Frequent&nbsp;reading,&nbsp;almost&nbsp;no&nbsp;writing&nbsp;&nbsp;&nbsp;=>&nbsp;MyISAM Full-text&nbsp;search&nbsp;in&nbsp;MySQL&nbsp;<=&nbsp;5.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=>&nbsp;MyISAM在所有其他情况下,InnoDB通常是最好的方法。

慕仙森

我不是数据库专家,也不是凭经验说话的。然而:MyISAM表使用表级锁定。..根据您的流量估计,您有接近200写每秒。与MyISAM其中只有一种可能在任何时候都在进行中。..您必须确保您的硬件能够跟上这些事务,以避免溢出,也就是说,一个查询所花费的时间不超过5ms。这意味着您需要一个支持行级锁定的存储引擎,即InnoDB。另一方面,编写几个简单的脚本来模拟每个存储引擎的负载,然后比较结果应该是相当简单的。

慕少森

人们经常谈论性能,读与写,外键等。但在我看来,存储引擎还有另外一个必须具备的特性:原子更新。试试这个:对MyISAM表进行5秒的更新。当更新正在进行时,比如说2.5秒,点击Ctrl-C来中断它.观察桌子上的效果。更新了多少行?有多少没有更新?这个表是可读的,还是当你点击Ctrl-C时它被破坏了?对InnoDB表进行相同的更新实验,中断正在进行的查询。观察InnoDB表。零行已更新。InnoDB已经保证您有原子更新,如果无法提交完整的更新,则会回滚整个更改。而且,该表没有损坏。即使您使用killall -9 mysqld模拟坠机。当然,性能是可取的,但是不丢失数据应该胜过那个。
打开App,查看更多内容
随时随地看视频慕课网APP