用于大量选择的存储引擎



背景

我正在创建一个API利用圣经,我希望能够消除尽可能多的数据库瓶颈。我的数据经过了相当程度的去规范化,以消除大多数不必要的联接。

信息

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

但是,我将执行SELECT语句

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

问题

要满足这些条件,理想的MySql存储引擎是什么?

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

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

就文件大小而言,bible很小。正如你所说的不会改变。

要获得最佳读取性能,请考虑内存。这有一个限制,即您不能使用text/bob。但是如果你的数据被分割成65533个字符块,你就可以了。

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

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

与其他方法相比,您需要额外的RAM来使用此方法,尽管所有表都存储在RAM 中

来自评论中的问题。

医生说

要在MySQL服务器启动时填充MEMORY表,可以使用--init文件选项。例如,您可以将以下语句插入。。。SELECT或LOAD DATA INFILE到此文件中以加载表。参见第5.1.3节"服务器命令选项",以及第13.2.6节"LOAD DATA INFOILE语法"。

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-文件

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

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

如果服务器配置正确,Innodb将真正在性能上引爆myisam

最新更新