MySQL - 2 个表的最佳引擎 - 一个运行大量更新,另一个保存 15 分钟的日志

MySQL - 2 个表的最佳引擎 - 一个运行大量更新,另一个保存 15 分钟的日志

我有一个系统,用户经常向我的服务器提交工作。如果同时有 1500 名用户处于活动状态,则每分钟大约有 6000 个工作单元被提交。我一直使用一个大表来汇总工作,然后当解决方案运行时,数据库会清除旧工作以保持大小可控。

我的目标是将表格分成两个部分:一个工作计数器和一个 15 分钟日志。

工作计数器表将在每次工作提交时运行 UPDATE(主键为 worker_id、solution_id),每次提交工作时将第三列加 1。所有更新命令都将使用 worker_id 和 solution_id 作为 WHERE 子句,因此它将始终命中主键对。

日志表将存储 3 列:worker_id (INT)、submit_time (时间戳)、valid (ENUM ('Y','N'))。每分钟,该表都会有一个查询,删除超过 15 分钟的信息。

我目前的计划是使用 InnoDB 作为计数器表,使用 MEMORY 表作为日志。这些是否是针对每个表的正确引擎选择?时间戳日志并不重要,因此如果由于重新启动而导致表丢失,也不会成为问题。

答案1

您正确地使用 InnoDB 作为计数器表,因为它将被大量写入,因此需要 InnoDB 的行锁定机制。,

并且由于您没有遇到服务器重启时数据丢失的问题,那么内存引擎是一个不错的选择。但是您必须考虑内存表会变得多大。根据 MySQL 手册:

MEMORY 表的最大大小受 max_heap_table_size 系统变量限制,其默认值为 16MB。要获得更大(或更小)的 MEMORY 表,您必须更改此变量的值。CREATE TABLE 的有效值是表的整个生命周期内使用的值。(如果您使用 ALTER TABLE 或 TRUNCATE TABLE,则当时有效的值将成为表的新最大大小。服务器重新启动还会将现有 MEMORY 表的最大大小设置为全局 max_heap_table_size 值。)您可以按照本节后面所述设置各个表的大小。

相关内容