日志表的mysql存储引擎

Posted

技术标签:

【中文标题】日志表的mysql存储引擎【英文标题】:Mysql storage engine for log table 【发布时间】:2011-12-01 23:17:44 【问题描述】:

mysql 上用于日志表的最佳存储引擎是什么?

该表将包含一对 if id 字段(整数)、一个日期字段、一个用于消息级别的 varchar 和一个带有消息的文本字段。

它将记录各种事情,用户操作,系统事件等。预计它会迅速增长。

其中的记录永远不会被修改,也很少被访问。访问时,应该可以按日期级别和 ID 排序。

一个有趣的选项是存档引擎。它符合所有标准,但有一个很大的缺点,不仅不能删除记录,甚至不能清除表。清除表的唯一方法是删除它并重新创建它。

有什么建议吗?

【问题讨论】:

【参考方案1】:

嗯,根据你的问题,InnoDB 应该做这项工作,因为:

    它的可扩展性比 MyISAM 好很多 它是行锁定的,因此如果您的写入次数多于选择次数,则它更适合。 最后,既然你说它们将很少被访问,那么就不需要 MyISAM,因为它在选择查询上更好。

Check this for more information

编辑

好吧,在评论中您询问其他引擎。这是一个full list 的引擎。其中,正如您所说的存档有一个缺点,其他不适合您的要求。这是MySQL网站的引文:

InnoDB has been designed for maximum performance when processing large data volumes. 
Its CPU efficiency is probably not matched by any other disk-based relational database
engine.

所以基本上:

    如果您要使用 MEMORY,请不要像您所说的那样访问数据很多,并且您的表会增长太多。为此,您将需要大量 RAM,当您重新启动时,所有数据都将丢失。 如果您要使用 MyISAM,请不要使用它,因为它是为选择查询比插入和更新更频繁的表设计的。 至于存档,这是您的选择。 Here 是 MyISAM 和日志表归档之间的比较。不过我会坚持使用 InnoDB。 我什至不会提及 Merge、Blackhole、Example 和其他引擎。 (我对 CSV 引擎了解不多,但据我所知,这不是这种表格的合适引擎。

老实说,我曾经花费大量时间在编码方面做出重要举措。我研究了几个小时,甚至几天来研究一个问题,看看哪种方式最合适。我会告诉你什么,研究是好的,但如果它阻止你工作,那么你应该停下来,喝杯咖啡,然后马上做出选择。因此,只需尝试最适合您的方法,您将体验到,您会通过尝试自己找到更好的方法。我的意思是,我不相信 Facebook 是为这样的数量而设计的,但随着它的增长,他们继续相应地改变结构。这就是我所相信的,但可能不是现实:) 无论如何,希望这些信息对你有所帮助。

2013 年编辑

您将在下面找到内置 MySQL 存储引擎的简要说明。

MyISAM

这些表包括额外的优化,例如高级缓存和索引机制,可提供对数据的快速访问。使用表级锁定,MyISAM 存储引擎提供并发操作。当读取性能是一个问题时,通常选择 MyISAM。

内存

内存表也称为堆表,非常适合快速检索很少更改的常用数据(例如国家/地区代码、邮政编码或其他查找表)。顾名思义,数据存储在内存中,因此访问速度比存储在磁盘中的数据快得多。使用内存的一个重要限制是数据在 MySQL 会话期间有效。当它崩溃或关闭时数据丢失。

InnoDB

您必须使用此存储引擎的一种情况是您需要使用外键或事务。 InnoDB 比 MyISAM 更具并发性,因为它提供了行级锁定。存储引擎高度可靠。您想要使用此存储的另一种情况是写入次数多于读取次数。当您经常将数据写入表时,请尝试使用此存储,它是否比 MyISAM 更具并发性。

存档

它设计用于以压缩格式存储大量数据。此存储引擎的用例之一是存储存档或历史数据或安全日志。该表不使用索引,因此对于日常数据检索和存储而言,它不是一个好的选择。它是行级锁定,数据在需要时即时解压缩。此外,无法更改表格。

合并

Merge 用于“合并”位于同一台机器上的分区表。当您将一个大表拆分为几个较小的表并使用合并表同时访问它们时,最大的好处是它的速度。由于表中的数据较少,因此搜索和排序将执行得更快。

【讨论】:

如果在 MyISAM 和 InnoDB 之间进行选择,选择会很容易。其他存储引擎呢? InnoDB 是最适合的吗? 谢谢,这个简报拯救了我的一天:) "...研究很好,但过了一段时间,如果它阻止您工作,那么您应该停止...并立即做出选择"专门针对像我这样的拖延者的建议:D

以上是关于日志表的mysql存储引擎的主要内容,如果未能解决你的问题,请参考以下文章

MysqlMysql数据库与InnoDB存储引擎表的各种类型文件

mysql存储引擎

mysql 默认引擎innodb 初探

MySQL改变表的存储引擎

Mysql转换表存储引擎的三种方式

MySQL Merge存储引擎