2012-09-16 125 views
6

我想使用MySQL來存儲會話變量。根據我的理解,這意味着每個頁面請求都會有一次讀取和一次寫入表格。用於PHP會話存儲的最佳MySQL存儲引擎

哪個MySQL存儲引擎最適合這項任務? MyISAM,InnoDB,MariaDB(我沒有在PHPMyAdmin中看到),Memory或其他東西?

回答

8

「最佳」 意味着什麼。你需要表達你的約束:你需要一致性嗎?耐用性?高可用性?性能?所有這些屬性的組合?你有能力放鬆你的會議嗎?他們能適應記憶嗎?你需要支持對同一數據的併發訪問嗎?

沒有更多的上下文,我會選擇InnoDB這是最平衡的存儲引擎。它爲OLTP應用程序,ACID事務,良好的可靠性和敏感的併發管理提供了正確的性能。會話變量訪問可能會使用主鍵完成,而且這種操作對InnoDB非常有效。

現在如果性能確實是一個約束,我寧願使用NoSQL引擎(即不是MySQL)。爲了存儲會話數據,Redis通常做得非常好,而且很容易集成和部署。

+0

優秀的答案。 –

1

內存存儲引擎聽起來是最好的選擇。請記住,這對臨時會話很有用。

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

+0

如果我有負載平衡器,引擎不會將數據寫入磁盤並且服務器不共享內存,這不會成爲問題嗎?另外,如果服務器崩潰或重新啓動,我將丟失所有數據? – qwertymk

0

這取決於你如何評價「betterness」:

MyISAM是最常見的(許多共享主機包只讓你使用MyISAM)。加上它在關係控制方面的作用相當有限,所以你設置起來非常快速和簡單。如果您希望在多個託管方案中實現可移植性和快速實施,MYISAM就是最佳選擇。

InnoDB允許您通過鏈接不同表中的鍵來創建關係並保存數據完整性,這意味着更多的工作,但更專業的數據庫設計。許多共享主機軟件包不實現InnoDB,因此當將表結構從一個環境導出到另一個環境時,可能需要做一些額外的工作。如果你想要實現關聯管理和控制,INNODB是最好的。就數據可移植性而言,InnoDB數據庫將被MyISAM完全接受(因爲MyISAM不檢查數據完整性:「當我在user_car中插入新記錄時,用戶數據庫中是否有用戶數爲4,例如」)。如果您從MyISAM開始,即使您的數據具有所有密鑰,導出爲完整的InnoDB數據庫也將是一場噩夢,因此必須以正確的順序(user_car和user_car之前)導入表數據。

MariaDB?從來沒有,只是因爲更少的人使用它,因此與MyISAM和InnoDB相比,您將獲得更少的支持。

底線緊鉗:INNODB。

+3

爲什麼MariaDB永遠不會? – qwertymk

+1

如果你強烈勸阻瑪麗亞,可能值得說出原因 - 否則這句話不是很有用!你會編輯你的文章,並擴大這一點? – halfer

+0

@quertymk和halfer,按照你的要求和編輯。感謝名單! :) –