2009-11-10 156 views
3

我是荷蘭的網頁設計師。我從頭開始構建Web應用程序,我一直使用CMS,並對其進行了自定義。MySQL存儲引擎決策

我建立在PHP/MySQL的,這是完成了一個拍賣網站。最近我讀了一些關於存儲引擎的文章。

我有一個已經困擾了我一段時間了幾個問題:


什麼樣的存儲引擎是最適合我的網站,我該使用MyISAM,InnoDB的,等

我正在建設的網站是一個拍賣網站,它必須處理幾次讀寫每一秒!它必須檢查拍賣是否打開,關閉,暫停,目前的價格等

我不知道在我的數據庫中的所有表,將要訪問的,這是隻有3個。目前,他們所有的MyISAM。這個好嗎?我應該改變他們嗎?沒有改變?我真的不知道該怎麼做。 我是否改變它們,這會大大影響我的網站嗎? Finnaly將會很容易地應用這些變化,或者它們很難做到。


另一個問題,我有大約緩存系統。

我讀了幾對他們太多,但我不知道他們是否適用於這類網站的,我有。我從數據庫中獲得的數據變化很大。緩存它們對我來說很方便嗎? 例如,可以對拍賣進行緩存,因爲並非所有項目都會更改。但拍賣不會永遠在那裏,幾個小時後它不見了。

我看不出如何緩存系統可以適用於此,或者我看到這是錯誤的方式。再次,如果這個系統適用於我,這個改變是否需要付出很大的努力,並且這個努力會做出巨大的改變。


這些都是我的問題,他們真的很籠統,我想我希望有人能幫助他,我真的很感激。

問候

+0

這太問題可能會幫:http://stackoverflow.com/questions/1680023/mysql-best-storage-engine-for-constantly-changing-data – 2009-11-10 09:44:08

回答

6

什麼樣的存儲引擎是最適合我的網站,我該使用MyISAM,InnoDB的,等

通常,對於任何任務默認InnoDB的其ACID遵守和行級鎖定。考慮採用MyISAM僅用於(a)全文搜索和(b)在InnoDB下的性能不夠好的情況下(這種情況很重要,但有些類型的數據可以從MyISAM的配置文件中受益)。

網站我建立是一個拍賣網站,

像拍賣的函數真的需要一個一致的事務數據庫後面,因爲你在談論別人的錢。 MyISAM不能提供。您的網站需要爲所有非原子交互使用交易,因此不可能爲例如。兩個人在完全同時競標時贏得同樣的拍賣。

它必須處理幾次讀寫每一秒!

這不是一個巨大的數額。但是,由於MyISAM不幸的表級鎖定,InnoDB通常在寫入偏向於大型表的表現方面表現更好。

我也讀過一些關於它們的內容,但是我不知道它們是否適用於我擁有的那種網站。

不要急於進去。一些網絡作者似乎認爲,任何網站都需要使用memcache來獲得體面的表現,但實際情況並非如此。您應用的任何緩存解決方案都會增加複雜性和潛在的失敗點,以處理更新時間和現在過時的信息。

所以不要再打緩存,直到你真正需要的。如果您的常見前端頁面經常對數據集進行復雜而慢速的查詢,那麼是的,爲此擁有某種緩存,無論是在數據庫本身還是像memcache這樣的外部解決方案,都可以提高速度。但是,實際上,改變模式和添加索引使得查詢比增加緩存的複雜性和不一致性更便宜,可能會更好。

與上一個網站,只有在做「數」操作的第二,你是不是要去需要它。

+0

哇,謝謝你的偉大的職位,這是真的有用的信息對我來說,我認爲記住我的問題已經解決了。 我確實有最後一個小小的左邊。 如果我有一個表的結構是這樣的,簡化的壽, 「使用者」,「拍賣」,「消息」,「意見」等 是不是很方便,我做的所有表的InnoDB,或者只是那些有重要信息的人。還是有其他criterea要記住。也許那些被訪問最多的人? – 2009-11-10 14:57:22

+1

是的,除非沒有特別的理由,否則所有表格都應默認使用InnoDB。 (MyISAM聲稱「更好的速度」不是一個好的理由,並且在很多使用情況下都是不存在的。) – bobince 2009-11-10 18:01:39

7

InnoDB的

像你所描述毫不猶豫我會InnoDB的去一個一個場景。看看這些,你可能會需要:

  1. 行級鎖
  2. 多語句事務
  3. 回滾

緩存

你有幾種方法來做緩存。但是,說你的頭版每秒獲得10次點擊,並且每五分鐘更改一次。將頭版存儲在純html文件中並且每五分鐘有一個cron-job更新頁面非常有意義。