2010-03-08 126 views
5

我正在運行一個允許用戶登錄的Web應用程序。用戶可以將內容添加到他/她的「庫」中,該庫顯示在名爲「library.php」的頁面上。在每次加載「library.php」時,不需要爲數據庫查詢用戶庫的內容,我希望在用戶登錄時將其全局存儲到PHP中,以便查詢只運行一次。有這樣做的最佳做法嗎? FX。將他們的庫存儲在會話中的數組中?在PHP中存儲全局數據的最佳實踐?

感謝您的時間

+0

「全球」通常意味着「每個人都有一個實例」。你所追求的是每個用戶會話數據。 – 2010-03-08 15:21:35

回答

7

如果每個用戶的庫存儲在$_SESSION作爲數組,如你所說(這絕對是可能的),那麼必須確保用戶進行任何更新到庫中立即反映給該會話變量。老實說,除非有一些嚴重的查詢正在進行一個庫的獲取,否則你有很多流量,我只需堅持'每當用戶點擊library.php時執行查詢'。

+1

另一件可能更好的事情是創建一個自己的緩存,當用戶登錄時會創建一個緩存(類似於顯示該庫的靜態html站點),該緩存在特定時間段後會被刪除(例如30分鐘或用戶註銷),並且如果它不存在或者如果有任何UPDATE查詢已經完成,它將被刷新。 – Tobias 2010-03-08 14:44:26

+1

正確 - 但會增加複雜性。作爲第一步,我會將索引和查詢緩存添加到庫表中,以最大限度地提高查詢性能。 – karim79 2010-03-08 14:50:24

0

我認爲最好將它存儲在會話中。
它在用戶登錄時,所創建的會話,並且可以使用超全局中保存數據:

$_SESSION['key'] = "value"; 

您還可以存儲陣列或其他一切存在,並且可以清除如果用戶註銷。

2

考慮數據的大小。乘以最大併發用戶數。

然後比較你的服務器上可用的內存。還要考慮這是否是共享服務器;其他網站也需要資源。

基於此,最好創建一個可以使用的文件(按照Remi的評論),或者保持默認的無狀態形式並每次讀取。我懷疑每次讀取數據都會造成很大的開銷。

1

每個PHP腳本完成後就會死亡,因此無法像在PC應用程序中那樣將數據永久保存在Web應用程序中。

一種方法可能是會話,但它取決於您想要保存的數據量。根據你的例子,你正在談論一個圖書館,所以在我看來,需要保存大量數據,在這種情況下,數據庫就是要走的路,而且每次都必須查詢它。

另一種方式可能是將它們保存在一個php文件中的數組中,但是每次您都必須查詢數據庫時,您必須每次都包含這樣的php文件。

1

由於這是一個分貝的性能優化,我建議你看一看memcached這完全符合您的問題:

memcached是[..]旨在用於加快 動態Web應用程序通過 緩解數據庫負載。

0

你關心表現;請注意:

  • 會話可以使用數據庫文件來存儲數據。
  • 數據庫在這裏被用來代替文件,因爲它的性能和能力。

使用數據庫,它被設計爲在這種情況下使用!