日志表的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存储引擎的主要内容,如果未能解决你的问题,请参考以下文章