Mysql存储引擎用于日志表

时间:2011-12-01 23:17:45

标签: mysql database

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

如果id字段(int)有一个日期字段,消息级别的varchar和带消息的文本字段,该表将有一对。

它将记录所有类型的事物,用户操作,系统事件等。预计它会迅速增长。

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:27)

那么,根据你的问题,InnoDB应该做的工作是因为:

  1. 它的可扩展性比MyISAM好很多
  2. 它是行锁定的,因此如果你要有更多的写入而不是选择,那么它更适合。
  3. 最后,由于你说他们很少被访问,所以不需要MyISAM,因为它在选择查询时更好。
  4. 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.
    

    基本上是这样的:

    1. 如果您打算使用MEMORY,请不要像您说的那样大量访问数据,而且您的桌子会增长太多。您将需要大量的RAM,当您重新启动时,所有数据都将丢失。
    2. 如果您打算使用MyISAM,请不要使用,因为它是为表格设计的,选择查询的频率比插入和更新更频繁。
    3. 至于档案,那是你的选择。 Here是MyISAM和日志表存档之间的比较。我会坚持使用InnoDB。
    4. 我甚至不会提到Merge,Blackhole,Example和其他引擎。 (我对CSV引擎知之甚少,但据我所知,对于这种表格来说,这不是一个合适的引擎。
    5. 说实话,我曾经花了很多时间才开始编码。我研究了几个小时,也许是几天关于一个问题,看看哪种方式最合适。我会告诉你什么,研究是好的,但是在一点之后,如果它阻止你工作,那么你应该停下来,喝一杯咖啡,然后马上做出选择。因此,只要尝试最合适的一个,就像你将体验到的那样,通过自己尝试,你会发现更好的方法。我的意思是,我不相信Facebook是为这样的音量设计的,但随着它的发展,它们继续相应地改变结构。这就是我所相信的,可能不是现实:)无论如何,希望信息可以帮助你。

      编辑2013

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

      的MyISAM

      这些表包括其他优化,例如高级缓存和索引机制,可以快速访问数据。使用表级锁定,MyISAM存储引擎提供并发操作。当阅读性能受到关注时,通常,MyISAM是您的选择。

      内存

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

      InnoDB的

      您需要使用此存储引擎的一种情况是您需要使用外键或事务。 InnoDB比MyISAM更并发,因为它提供行级锁定。存储引擎非常可靠。当您想要使用此存储时,另一种情况是您有更多写入而不是读取。当您经常将数据写入表中时,尝试使用此存储,它比MyISAM更并发。

      存档

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

      合并

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