2013-08-06 64 views
0

背景

我正在使用聖經創建一個API,我希望能儘可能消除數據庫瓶頸。我的數據非常規範化以消除大多數不必要的連接。大容量選擇的存儲引擎

信息

看到,因爲聖經的文本不會更改,我會很難做任何INSERT語句。我插入數據的唯一時間是當我添加一個新的翻譯,這將定期發生,但我不在乎這裏的速度。

我會,但是,做噸的SELECT聲明

我不需要任何跨國的,兼容ACID的功能。我主要關心的是速度。

問題

什麼是理想的MySql存儲引擎適合這些條件?

我知道每個引擎的基礎知識(我的猜測是MyISAM是理想的),所以我在尋找一個可以用統計數據進行備份的答案,或者通過進一步的推理來展示對這些引擎的深入瞭解。

雖然使用NoSQL可能比RDBMS更好,但這不是我正在尋找的信息。

+0

「第8章優化」的MySQL參考可能值得一讀。 http://dev.mysql.com/doc/refman/5.5/en/optimization.html – DwB

+2

因爲它聽起來像你會做全文搜索,你看過[Lucene](http:// lucene。 apache.org/)? – Troy

+0

檢查TokuDB了。 –

回答

2

聖經是在文件大小方面小。如你所說不會改變。

爲了獲得最佳讀取性能,請考慮內存。這有限制,你不能使用文本/ blob。但提供你的數據分成65,533個字符塊,你會沒事的。

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

使用記憶也意味着如果電源斷電/重新啓動服務器的所有數據都將丟失。所以定期寫入磁盤會很有用,重新啓動時需要重新填充表格。

您將需要額外的內存來使用這種方法比其他方法雖然所有表都存儲在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來維護它)

+0

如果存儲MyISAM或InnoDB備份版本,您是否知道自動重新填充的方法? MySQL可以自己管理它嗎? –

1

具有良好指標的Innodb可能甚至是良好的分區。 innodb被設計爲具有更好的多線程客戶端性能(同時讀取更多的客戶端),而不是爲此構建MyISAM。

如果服務器被正確地將配置Innodb的真的會炸開的MyISAM性能

+1

不適用於讀取。 innodb是酸兼容的意思IO即使讀取 – exussum

+0

請我傷心一個正確配置的innodb服務器將爆炸Myisam。閱讀http://www.oracle.com/partners/en/knowledge-zone/mysql-5-5-innodb-myisam-522945.pdf的事實和撤消downvote ... –

+0

我沒有downvote,這是比較在交易中,innodb更擅長的東西。 MyISAM是一個更簡單的結構,每次讀取的次數少於innodb – exussum