我正在運行一個允許用戶登錄的Web應用程序。用戶可以將內容添加到他/她的「庫」中,該庫顯示在名爲「library.php」的頁面上。在每次加載「library.php」時,不需要爲數據庫查詢用戶庫的內容,我希望在用戶登錄時將其全局存儲到PHP中,以便查詢只運行一次。有這樣做的最佳做法嗎? FX。將他們的庫存儲在會話中的數組中?在PHP中存儲全局數據的最佳實踐?
感謝您的時間
我正在運行一個允許用戶登錄的Web應用程序。用戶可以將內容添加到他/她的「庫」中,該庫顯示在名爲「library.php」的頁面上。在每次加載「library.php」時,不需要爲數據庫查詢用戶庫的內容,我希望在用戶登錄時將其全局存儲到PHP中,以便查詢只運行一次。有這樣做的最佳做法嗎? FX。將他們的庫存儲在會話中的數組中?在PHP中存儲全局數據的最佳實踐?
感謝您的時間
如果每個用戶的庫存儲在$_SESSION
作爲數組,如你所說(這絕對是可能的),那麼必須確保用戶進行任何更新到庫中立即反映給該會話變量。老實說,除非有一些嚴重的查詢正在進行一個庫的獲取,否則你有很多流量,我只需堅持'每當用戶點擊library.php時執行查詢'。
我認爲最好將它存儲在會話中。
它在用戶登錄時,所創建的會話,並且可以使用超全局中保存數據:
$_SESSION['key'] = "value";
您還可以存儲陣列或其他一切存在,並且可以清除如果用戶註銷。
當用戶登錄時,您可以生成xslt顯示的xml文件(例如USER_ID.xml)。
考慮數據的大小。乘以最大併發用戶數。
然後比較你的服務器上可用的內存。還要考慮這是否是共享服務器;其他網站也需要資源。
基於此,最好創建一個可以使用的文件(按照Remi的評論),或者保持默認的無狀態形式並每次讀取。我懷疑每次讀取數據都會造成很大的開銷。
每個PHP腳本完成後就會死亡,因此無法像在PC應用程序中那樣將數據永久保存在Web應用程序中。
一種方法可能是會話,但它取決於您想要保存的數據量。根據你的例子,你正在談論一個圖書館,所以在我看來,需要保存大量數據,在這種情況下,數據庫就是要走的路,而且每次都必須查詢它。
另一種方式可能是將它們保存在一個php文件中的數組中,但是每次您都必須查詢數據庫時,您必須每次都包含這樣的php文件。
由於這是一個分貝的性能優化,我建議你看一看memcached這完全符合您的問題:
memcached是[..]旨在用於加快 動態Web應用程序通過 緩解數據庫負載。
你關心表現;請注意:
使用數據庫,它被設計爲在這種情況下使用!
「全球」通常意味着「每個人都有一個實例」。你所追求的是每個用戶會話數據。 – 2010-03-08 15:21:35