【问题标题】:Storage engine for high volume of selects用于大量选择的存储引擎
【发布时间】:2013-08-07 18:02:46
【问题描述】:

背景

我正在使用圣经创建一个 API,我希望能够尽可能多地消除数据库瓶颈。我的数据被相当反规范化以消除大多数不必要的连接。

信息

鉴于圣经的文本没有改变,我几乎不会做任何INSERT 声明。我插入数据的唯一时间是添加新翻译时,这会定期发生,但我不在乎这里的速度。

不过,我会做 SELECT 声明。

我不需要任何跨国的、符合 ACID 的功能。我最关心的是速度。

问题

什么是适合这些条件的理想 MySql 存储引擎?

我了解每个引擎的基础知识(我猜MyISAM 是理想的),所以我正在寻找一个可以通过统计数据或进一步推理证明对其中一些引擎有深入了解的答案.

虽然使用NoSQL 可能比RDBMS 更好,但这不是我要查找的信息。

【问题讨论】:

标签: mysql performance storage-engines


【解决方案1】:

就文件大小而言,圣经很小。正如你所说,没有改变。

为了获得最佳读取性能,请考虑内存。这有一个限制,你不能使用文本/blob。但是,如果您的数据被分成 65,533 个字符块,您就可以了。

http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

使用内存还意味着如果断电/服务器重新启动,所有数据都会丢失。因此定期写入磁盘会很有用,并且在重新启动时,您将需要再次填充表。

虽然所有表都存储在 RAM 中,但您需要额外的 RAM 才能使用此方法而不是其他方法

来自 cmets 中的问题。

文档说

要在 MySQL 服务器启动时填充 MEMORY 表,您可以使用 --init-file 选项。例如,您可以将语句如 INSERT INTO ... SELECT 或 LOAD DATA INFILE 到此文件中以加载 来自持久数据源的表。请参见第 5.1.3 节,“服务器 命令选项”,以及第 13.2.6 节,“LOAD DATA INFILE 语法”。

http://dev.mysql.com/doc/refman/5.5/en/memory-storage-engine.html#idp82809968

http://dev.mysql.com/doc/refman/5.5/en/server-options.html#option_mysqld_init-file

同样,您需要随时更新此文件以进行任何更改。 (可以使用mysqldump来维护)

【讨论】:

  • 如果我存储了 MyISAM 或 InnoDB 备份版本,您知道自动重新填充的方法吗? MySQL 可以自己管理吗?
【解决方案2】:

具有良好索引的 Innodb 甚至可能是良好的分区。 innodb 旨在通过多线程客户端(同时读取更多客户端)获得更好的性能,而 MyISAM 不是为此而构建的。

如果服务器配置正确,Innodb 会在性能上真正消除 myisam

【讨论】:

  • 不适用于读取。 innodb 是酸兼容的意思是 IO 甚至读取
  • 我很伤心,为 innodb 正确配置的服务器会炸毁 Myisam。阅读oracle.com/partners/en/knowledge-zone/… 事实并撤消反对票...
  • 我没有投反对票,那是比较交易,innodb 更擅长的东西。 MyISAM 是一个更简单的结构,每次读取的操作比 innodb 少
  • 这个网站上的新东西我以为你投了反对票.. 是的,确实不要在没有 WHERE 的情况下使用 COUNT(*),例如 innodb 表上的索引字段。简单的结构并不总是最好的,innodb 也没有成为 mysql 的默认存储引擎。
  • InnoDB 将优于 MyISAM。它更新了,即使它符合酸要求 - 这并不意味着它会花费每 1 个选择的 I/O。此外,如果配置正确,InnoDB 会将工作数据集保存在内存中,因此在读取时不会碰到磁盘。
猜你喜欢
  • 2023-04-05
  • 2011-08-13
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多