我想开发一个应用程序,我将需要一个数据库来存储数据。我使用MySQL作为后端。我的问题是Which MySQL engine should i use?
我已经提到了在db上执行的一些重要的操作特性:
我知道InnoDB是MySQL中最新的default引擎。但是,就我所能得出的结论而言,我不需要使用InnoDB的主要原因的大多数特性。所以,现在我和MyISAM在一起了。
我正在考虑使用MyISAM,因为我只想从数据库中读取数据。我已经引用了存储引擎的官方文档,并搜索了它。但是,我的知识库可能还缺乏一些重要的更新。所以,我是在向社区寻求帮助。
MyISAM存储引擎的选择?在期待中感谢社区。
谢谢你帮我缩小了选择范围。
发布于 2013-06-18 11:30:04
尽管MyISAM与您的特性相匹配,但我建议您不要使用它,原因如下:
REPAIR TABLE,它最多可以修复您的表结构。我说如果你调查你的数据-- MyISAM是不允许的。READ LOCK。对您来说可能不是这样的出价交易;您也可以使用复制并在从服务器上执行备份(但是由于缺乏完整性和主服务器上的错误恢复,使用MyISAM的复制再次变得不安全)。或者也可以使用LVM。发布于 2013-06-18 07:40:59
MyISAM有一个缺点:并发性(带有表级锁)。即使您有少量的写入操作,它也可以阻止其他所有操作,这取决于读取操作的持续时间。
下面是一个表上的场景:
SELECT,它将持续几秒钟UPDATE (或此表上的任何写操作)。SELECT结束,然后等待UPDATE结束。现在,想象一下,如果您多读操作的数量。对于一个基于web的应用程序来说,当每个用户都要等待几秒钟才能加载一个页面时,这是非常丑陋的。但是,如果大多数读取操作只需毫秒执行。这个问题不会被注意到。
InnoDB已经通过MVCC (多版本并发控制)实现解决了这个问题,该实现同时保持单个行的多个版本。它可以在行级别锁定,而不是像MyISAM那样锁定在表中。
有一些缓解这种现象的提示,比如LOW_PRIORITY用于您的UPDATE、DELETE或INSERT或HIGH_PRIORITY用于您的SELECT,以及/或使用low-priority-updates系统变量。有关更多信息,您可以阅读正式文档这里。
如果这个缺点对您和您的应用程序没有问题,您可以继续选择MyISAM。
在您的环境中准确查看一个或另一个存储引擎的唯一方法是使用您的生产工作负载(或类似的东西)来测试它。
https://dba.stackexchange.com/questions/44732
复制相似问题