2013-10-30 90 views
1

我正在使用myisam表創建一個網站,因爲它將主要是隻讀的。這就是爲什麼我認爲myisam會更好。但是我將用戶會話存儲在數據庫中......所以這意味着每個頁面請求上的會話表的select + update。所以對於會話,我現在在桌面上有1/1次讀/寫,如果我需要更新會話上的某些內容,寫次數可能會更高。我應該使用innodb這樣的表嗎?或者是1/1讀/寫比率仍然是myisam沒有問題的東西?該應用程序將不會有高流量(雖然我什至不知道什麼纔算高流量針對這種情況)InnoDB或MyISAM會話?

+0

我會說'既不是':如果你擔心性能,兩者都太慢。使用MEMORY(引擎)或Memcached/Redis(另一個具有內存存儲的RDBMS)。 – raina77ow

+0

您想要對內置PHP會話不支持的會話做什麼? – RandomSeed

+0

@RandomSeed ...將它們存儲在數據庫中。這不是關於會話的問題,而是關於存儲引擎的問題。會議就是這方面最好的例子,但它們不是唯一的情況,比如1/1。所以,我們不要在這裏談論話題。 – Marius

回答

0

的MyISAM往往快於InnoDB的原始PE方面性能(主要是因爲它不是ACID)。因此訪問MyISAM 比InnoDB消耗更少的資源。另一方面,MyISAM僅支持表級鎖定:在高併發環境中,延遲增加。幾十個簡單的查詢不應該導致太多麻煩,但是(假設大多數查詢將是一個簡單的SELECT session_data FROM session_table WHERE session_id = <some_id>)。相反,InnoDB提供了更強大的功能:InnoDB表幾乎不可能被損壞,性能差異往往越來越小(例如參見this benchmark)。有些人甚至會爭辯說現在沒有什麼理由繼續使用MyISAM(InnoDB成爲v5.5中的默認存儲引擎)。

對於沒有提供關於哪個「更快」的更確切答案,我感到抱歉。與性能優化一樣,必須執行實際測試。請記住,您可以非常輕鬆地切換引擎(ALTER TABLE t ENGINE=[MyISAM | InnoDB]),我建議您嘗試一下。

但考慮到您的預期流量,使用這一個或另一個不應該有太大的區別。

+0

這將很容易切換,但有些事情像自動增量在兩個引擎中工作方式不同。更不用說innodb上的死鎖檢測。至於「哪一個更快」 - 只要所有東西都在幾秒鐘而不是全部秒鐘內運行,我真的不在乎。而且我擔心可能會因myisam開始發生,因爲太快會發生全桌鎖。無論如何,感謝您的意見,我認爲你的最後一句話很好地回答了我的問題:) – Marius

1

你有很多選擇和MySQL是不是最好的一個:

  1. 保存到光盤的如果你有硬件RAID,不錯的選擇,不適合複製。
  2. Mysql - 是的,沒有我以前使用的Mysql - Myisam和50個用戶表崩潰。所以,如果你需要,你可以使用「MEMORY (HEAP)"
  3. 一些語言如PHP +擴展了自己的會話存儲EQ WinCache Session Handler - 手動
  4. 最受歡迎Php+memcached session
  5. 可以使用甚至SQLite,讓會話存儲,因爲你可以。我最好的選擇是MongoDB的會話存儲|| REDIS-SESSION-PHP
  6. 有人更改序列化引擎「igbinary」有更好的表現