每秒插入超过100个查询时应使用哪个引擎?

7 浏览
0 Comments

每秒插入超过100个查询时应使用哪个引擎?

每秒超过100次插入查询应使用哪个引擎?我已经阅读了MYISAM和InnoDB的差异以及其优缺点。但是对于一个表中的100+次插入查询(基本上是为了跟踪目的),我仍然感到困惑应该使用哪个数据库。我参考了“MYISAM和InnoDB有什么区别?”根据我的理解,对于每个插入操作,MYISAM会锁定表,因此应该使用InnoDB进行行锁定。但另一方面,MYISAM的性能要好100倍。那么应该选择什么样的最佳和正确的选项,为什么?

0
0 Comments

问题的原因是需要处理每秒超过100个插入查询。解决方法有多种:

1. 使用MyISAM引擎:如果操作的主要场景是大量插入操作,MyISAM是一个更快的选择。但是,根据数据使用情况的不同,这个答案可能会有很大的变化。如果这是一个存档应用程序,可以考虑使用ARCHIVE存储引擎。它最适合于只写一次,很少读取的应用。

2. 调查INSERT DELAYED:它允许客户端程序发出插入命令后立即返回,而不需要等待插入完成。不过,这会在mysqld进程中消耗内存。如果这种操作方式符合您的需求,那么这是选择MyISAM引擎的一个有力原因。

3. 注意目标表中的索引:维护索引是服务器插入工作负载的重要组成部分。

4. 查看MariaDB:它是MySQL的兼容分支,具有一些更高级的存储引擎和功能。

根据类似应用程序的经验,我们采取了两个方法来解决这个问题:

1. 使用消息队列系统:只运行几个进程来执行实际的插入操作。原始客户端将其日志记录写入消息队列,而不是直接写入数据库。(Amazon AWS的SQS是这样一种消息队列系统的例子)。

2. 重新设计插入过程:使用LOAD DATA INFILE一次性加载大量的日志行。

通过采取这些措施,我们的应用程序的工作负载逐渐增加,服务器可以跟得上。请注意,这种工作负载在廉价的共享托管服务或AWS微实例上是不可行的。

0
0 Comments

问题:选择哪种引擎来处理每秒超过100个插入查询的情况

原因:简单的一行插入代码在任何引擎中的性能是有限的,特别是在InnoDB引擎中,最多只能达到每秒大约100行。然而,我们可以通过一些调整来提高性能,例如设置innodb_flush_log_at_trx_commit参数为2,将innodb_buffer_pool_size设置为可用内存的70%。

解决方法:

1. 如果用户同时向同一张表插入多行数据,可以使用LOAD DATA或者批量插入(INSERT ... VALUES (...), (...), ...)来实现更快的插入速度。

2. 不要过度依赖MyISAM引擎,因为它的性能并不是InnoDB的10倍甚至100倍。在当前版本的MySQL中,很难找到一个经过良好调整的应用程序在MyISAM引擎下比InnoDB引擎更快。而且,MyISAM在发生崩溃时可能会出现数据损坏,而InnoDB则不会。

3. 使用ARCHIVE引擎可以节省磁盘空间,但会增加CPU的负担。使用MEMORY引擎可能更快,因为它没有I/O操作,但是考虑到数据量的大小,这个引擎可能不适用。

4. 如果每秒插入100行数据,相当于每天8百万行,每年30亿行。是否会定期清理数据?是否会对数据进行查询?如果需要清理数据,可以考虑使用分区表来提高性能;如果需要查询数据,可以考虑使用汇总表来加速查询。

5. 在创建索引时,尽量减少索引的数量。如果你有一个"随机"索引,比如UUID,并且有10亿行数据,无论使用哪种引擎,无论做任何调整,每秒只能插入100行数据。是否需要进一步解释呢?

6. 如果这是一个队列系统,建议直接执行任务,而不是排队等待。

建议使用InnoDB引擎,并进行适当的调整。使用批量插入,避免创建过多的索引等。

0