我正在向系统添加新功能。该过程将从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表。
答案 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是基于事务的,所以它会进行行锁定,但速度较慢。