Mysql存储引擎用于日志表

app*_*ief 16 mysql database

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

该表将有一对if字段(int),一个日期字段,一个用于消息级别的varchar和一个带有该消息的文本字段.

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

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

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

有什么建议?

Sav*_*ova 27

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

  1. 它的可扩展性比MyISAM好很多
  2. 它是行锁定的,因此如果你要有更多的写入而不是选择,那么它更适合.
  3. 最后,由于您说他们很少被访问,因此不需要MyISAM,因为它对选择查询更好.

请查看此以获取更多信息

编辑

那么,你在评论中询问其他引擎.这是一个完整的引擎列表.其中,如你所说存档有缺点,其他不适合你的要求.这是来自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.
Run Code Online (Sandbox Code Playgroud)

所以基本上:

  1. 如果您打算使用MEMORY,请不要像您说的那样,不会大量访问数据,而且您的桌子会增长太多.您将需要大量的RAM,当您重新启动时,所有数据都将丢失.
  2. 如果您打算使用MyISAM,请不要将其设计用于选择查询的表比插入和更新更频繁.
  3. 至于存档,这是你的选择.以下是MyISAM和日志表存档之间的比较.我会坚持InnoDB.
  4. 我甚至不会提到Merge,Blackhole,Example和其他引擎.(我对CSV引擎知之甚少,但据我所知,这对于这种表来说并不是一个合适的引擎.

说实话,我曾经花了很多时间才开始编码.我研究了几个小时,也许是几天关于一个问题,看看哪种方式最合适.我会告诉你什么,研究是好的,但是在一点之后,如果它阻止你工作,那么你应该停下来,喝一杯咖啡,然后马上做出选择.因此,只要尝试最合适的一个,就像你将体验到的那样,通过自己尝试,你会发现更好的方法.我的意思是,我不认为Facebook是为这样的音量设计的,但随着它的发展,它们继续相应地改变结构.这就是我所相信的,可能不是现实:)无论如何,希望信息可以帮助你.

编辑2013

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

MyISAM数据

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

记忆

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

InnoDB的

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

档案

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

合并

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

  • “**...研究是好的,但如果它阻止你工作,那么你应该停止......并立即做出选择**”这是一些特别适合像我这样的拖延者的好建议:D (2认同)