0

背景

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

信息

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

然而,我会做大量 SELECT 陈述。

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

问题

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

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

尽管 usingNoSQL可能比 a 更好RDBMS,但这不是我要寻找的信息。

4

2 回答 2

2

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

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

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

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

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

从评论中的问题。

文档说

要在 MySQL 服务器启动时填充 MEMORY 表,可以使用 --init-file 选项。例如,您可以将 INSERT INTO ... SELECT 或 LOAD DATA INFILE 等语句放入此文件,以从持久数据源加载表。请参见第 5.1.3 节,“服务器命令选项”和第 13.2.6 节,“加载数据 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 来维护它)

于 2013-08-12T21:46:22.720 回答
1

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

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

于 2013-08-12T21:26:07.707 回答