2010-02-23 72 views
3

我正在處理一個權限系統。在每個頁面中,需要檢查用戶是否有權這樣做。我有兩種選擇,將數據存儲在會話變量(僅在登錄期間更新)或每次查詢數據庫中的信息。 哪個更快?我認識到如果權限發生變化,我將需要更新會話變量,因此用戶需要重新登錄以「查看」權限的更改,但這不是決定中的一個因素,只有速度是。php會話vs mysql速度

+0

是速度爲單個會話情況的重要因素在這裏,還是您需要大量活動會話的速度? – 2010-02-23 07:50:08

回答

7

速度取決於很多因素:

  • 多少數據將被存儲在會話變量
  • 什麼是會話變量的實際後備存儲(如果是數據庫支持的會話,它將基本上是同一時間)

我可以告訴,對於少量的數據,基於文件的會話變量將比數據庫訪問更快。

您需要測量它以獲得應用程序中兩種方法之間的相關比較。我個人懷疑它會做出如此不同以至於不會採用會議解決方案。在會議採取

+0

數據的大小可能在1kb左右,那麼這有什麼區別? – vener 2010-02-23 07:59:44

+1

不,1kb很小。 – 2010-02-23 10:32:56

+0

我知道這是個老問題,但會對mysql連接時間產生什麼影響?因爲用mysql代碼需要建立與mysql的連接,但是session不會。這會影響性能嗎? – mandza 2014-09-15 10:40:43

1

我想這方面的信息存儲在會話:

  • 這些數據是特定於當前用戶
  • 每個用戶都有自己的數據
  • 這類型的數據是不太可能的版本經常改變 - 這意味着等到會話過期和用戶回來經常是OK
    • ,如果你認爲它會經常變化,可以保留一些時間戳會議上,沿着該數據,以磕ep最後一次從數據庫中提取的「何時」的軌道;並且如果它已被提取「太久以前」,則每隔幾分鐘重新進行一次。


我還想補充一點,如果有一天你開始有幾個不同的網絡服務器,你就可以使用memcached的存儲會話數據 - 這意味着它擴展的方式優於數據庫。

+0

-true -true -true – vener 2010-02-23 07:54:29

+0

感謝您提及memcached選項! – Chris 2012-05-16 17:12:20

0

簡答:將它存儲在會話變量中可能會更快一些,因爲您已經從數據庫中填充它。話雖如此,我懷疑一個單一的簡單數據庫查詢的速度會以任何真正可衡量的方式讓你失望。會議對DB的

+0

當用戶可能以每秒5次的速度發出請求時,我認爲它很重要。 (快速搜索) – vener 2010-02-23 07:55:24

3

設置新值:

時間:0.00062895秒

插入相同的值數據庫看法:

時間:0。00000811秒

餅乾

插入相同的值

時間:0.00000906秒

或者,您可以使用此代碼測試:

$before = microtime(true); 
    // Put your code here 
$after = microtime(true); 
$Speed = number_format(($after - $before), 8); 

echo "<h1>Time: " . $Speed . " Seconds</h1>"; 
+1

如果這包括了獲取數據的時間和數據的數量,那麼這將是完美的:) – StefansArya 2017-06-15 12:24:41