高插入负载的最佳mysql表格式是什么?

时间:2009-10-19 10:29:28

标签: mysql

我正在向系统添加新功能。该过程将从PLC读取实时数据并将其存储在数据库中。 数据表将有4列:variable_id(SMALLINT),时间戳(TIMESTAMP),值(FLOAT),质量(TINYINT)。 主键是(variable_id,timestamp)。

系统需要能够每秒插入1000-2000条记录。

数据表将保留最近24小时的数据,旧数据将从表中删除。

数据表还需要每秒处理5-10个select语句。 select语句从表中选择特定变量的最新值并在Web上显示。

我应该使用MyISAM还是InnoDB表格式? MyISAM在执行插入时是否锁定整个表,从而阻止来自Web界面的select语句? 目前,数据库中的所有数据表都是MyISAM表。

2 个答案:

答案 0 :(得分:7)

  

我应该使用MyISAM还是InnoDB表格格式?

对于频繁并发读写的任何项目,您应该使用InnoDB

  

MyISAM在执行插入时是否会锁定整个表,从而阻止来自Web界面的select语句?

启用@@concurrent_insert后,MyISAM可以将插入的行追加到末尾,同时仍然可以从另一个会话同时读取。

但是,如果除INSERT以外的其他任何东西,这可能会失败(即表格会锁定)。

  

系统需要能够每秒插入1000-2000条记录。

最好批量批量插入并批量生产。

InnoDB每秒行数比每秒事务数快得多。

  

数据表将保留最近24小时的数据,旧数据将从表中删除。

请注意,InnoDB会锁定所有检查的行,而不仅仅是那些受影响的行。

如果您的DELETE语句将使用fullscan,则并发INSERTs将失败(因为fullscan将使InnoDB对所有浏览的记录(包括最后一个)进行间隙锁定)。

答案 1 :(得分:2)

MyISAM更快,它锁定了整个表格。 InnoDB是基于事务的,所以它会进行行锁定,但速度较慢。