2010-07-11 49 views
7

因此,例如,用戶正在登錄,並且系統正在存儲有關它們的信息,例如:birth date,因此從會話獲取此信息或查詢數據庫的速度更快?會話是否比查詢數據庫更快?

我的想法是,用戶需要登錄一次,會話總是在那裏,但如果我查詢數據庫,那麼如果用戶重新加載頁面,系統需要反覆查詢,而不是獲取來自臨時「地點」的數據。

我使用PHP和MySQL。

+0

你使用什麼編程語言和dbms? – 2010-07-11 18:53:04

+0

我編輯了我的答案。 – Adam 2010-07-11 18:54:31

回答

9

對於幾乎所有的語言和數據庫,是的。一個用戶會話通常只存儲在內存中,掌握它只是查看它的問題。數據庫訪問通常涉及一些與不同進程的套接字通信。相比之下,它相當沉重。

+2

據我所知,PHP中的會話默認存儲在文件中,而不是存儲在內存中。對於每個命中,這個會話文件必須從文件系統中讀取並解析到PHP數組中。 你是對的,會話應該更快,但原因是 - 你必須加載用戶的會話數據出於其他原因,他談論的生日將已經存在 - 無需詢問數據庫。 – dwich 2010-07-11 19:11:45

1

你最近怎麼樣?要做的方法是在登錄頁面檢查用戶憑據,是的,你必須做一個查詢來檢查用戶指定的標準是否與數據庫匹配。如果他們這樣做,則將其存儲在會話中,然後基於該會話繼續。

所以,這不是比較,你必須在登錄頁面查詢數據庫一次,然後使用會話。

登錄頁面

// database query run once only at this page 
// if user exits, you store it into session else redirect with an error message 
+0

我知道該怎麼做,我的問題是比數據庫查詢快或不:) :) – Adam 2010-07-11 18:57:49

+1

@CIRK:當然,會話更快,但你必須考慮到安全性。 – Sarfraz 2010-07-11 18:58:37

+0

感謝安全是一個全新的話題,謝謝你說出來,我創建了一個新的問題檢查出來:http://stackoverflow.com/questions/3224286/php-what-are-the-risks-of-php-sessions – Adam 2010-07-11 19:08:24

0

事實上,卡爾的答案是不完全正確,並說: 「MySQL的」 也沒有幫助。

你看,像mysql這樣的數據庫系統有「存儲引擎」。這些通常寫入文件,但有一些寫入內存(MEMORY),其他寫入內存但保留文件備份(MyISAM)和一些寫入/ dev/null(BLACKHOLE)。

因此,一切都取決於存儲引擎:

  • 的MyISAM - 默認引擎的MySQL 3。23強大的性能
  • 記憶 - 基於哈希,存儲在內存中,可用於臨時表
  • 的InnoDB - 支持事務,行級鎖和外鍵
  • BerkeleyDB的 - 支持交易和頁級鎖
  • BLACKHOLE - 的/ dev/null的存儲引擎(什麼,你寫它消失)
  • 實例 - 實例存儲引擎
  • 存檔 - 歸檔存儲引擎
  • CSV - CSV存儲引擎
  • NDBCLUSTER - 羣集,容錯,基於存儲器的表
  • FEDERATED - 聯合MySQL存儲引擎
  • MRG_MYISAM - 等同的MyISAM表集
  • ISAM - 過時存儲引擎

(列表從PhpMyAdmin Egines列表)

+0

所以如果我使用'MEMORY',它會像'SESSION'一樣工作嗎? – Adam 2010-07-11 23:54:09

+0

這個「答案」充其量只是補充,並沒有解決這個問題。 – rvdavid 2011-02-23 09:40:57

+0

@rvdavid - 它確實解決了問題,OP只需選擇一個選項。 – Christian 2011-02-23 16:16:10