我正在创建一个利用圣经的API,我希望尽可能消除数据库瓶颈。我的数据被相当去规范化以消除大多数不必要的连接。
看到圣经的文字没有改变,我几乎不会做任何INSERT
陈述。我唯一一次插入数据就是当我添加一个新的翻译时,会定期发生,但我不关心这里的速度。
然而,我会做吨的 SELECT
语句。
我不需要任何跨国,符合ACID的功能。我主要担心的是速度。
理想的MySql存储引擎适合这些条件是什么?
我知道每个引擎的基础知识(我的猜测是MyISAM
是理想的),所以我正在寻找一个可以用统计数据或进一步推理来证明对某些内容的深入了解的答案。这些引擎。
虽然使用NoSQL
可能比RDBMS
更好,但这不是我正在寻找的信息。
答案 0 :(得分:2)
圣经在文件大小方面很小。正如你所说的那样没有改变。
为了获得最佳的读取性能,请考虑内存。这有一个限制,你不能使用text / 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节”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来维护它)
答案 1 :(得分:1)
具有良好索引的Innodb甚至可能是好的分区。 innodb旨在通过多线程客户端(同时读取更多客户端)获得更好的性能,而MyISAM不是为此而构建的。
如果服务器配置正确,Innodb将在性能上真正爆发myisam