我有一个系统,用户经常向我的服务器提交工作。 一次有1500个活动,每分钟提交大约6000个工作单位。 我一直在使用一个大表来总结工作,然后当一个解决scheme运行时,数据库清除旧的工作,以保持大小的可pipe理性。
我的目标是将表格分成两部分:工作台和15分钟的日志。
工作计数器表将对每个工作提交(主键是worker_id,solution_id)运行UPDATE,每次提交工作时将第三列递增1。 所有的更新命令将使用worker_id和solution_id作为WHERE子句,所以它将始终是主键对。
日志表将存储3列:worker_id(INT),submit_time(时间戳),有效(ENUM('Y','N'))。 每一分钟,表格都会有一个查询,删除超过15分钟的信息。
我目前的计划是使用InnoDB作为计数器表格,并使用MEMORY表格作为日志。 对于每张桌子的目的,这些是引擎的正确select吗? 时间戳日志并不重要,所以如果表由于重新启动而丢失,那就不成问题了。
您将InnoDB用于计数器表是正确的,因为它将被大量写入,所以它需要InnoDB的行locking机制。
而且由于你在服务器重启时没有丢失数据的问题,那么内存引擎是一个不错的select。 但是你不得不考虑你的内存表会变得多大。 根据MySQL手册:
MEMORY表的最大大小受到max_heap_table_size系统variables的限制,默认值为16MB。 要有更大(或更小)的MEMORY表,你必须改变这个variables的值。 对于CREATE TABLE有效的值是用于表的生命周期的值。 (如果使用ALTER TABLE或TRUNCATE TABLE,则当时有效的值将成为该表的新的最大大小,服务器重新启动也会将现有的MEMORY表的最大大小设置为全局的max_heap_table_size值。)您可以设置大小如本节后面所述的单个表格。