簡體   English   中英

PHP - 在$ _SESSION或數據庫中存儲大會話數組?

[英]PHP - to store big session array in $_SESSION or in database?

我需要在會話期間存儲一個大數組(目前高達幾KB,我將其限制為最大0.25MB)。

在您的意見和實踐中,將它存儲在$ _SESSION或數據庫中是否更好?

速度很重要,但處理器/內存使用情況也是如此,因為它位於共享主機上,我不希望它們因為資源過度使用而關閉網站。

你會說有一個尺寸范圍,其中$ _SESSION可以放心使用嗎? (例如0kb-100kB或您的練習/測試顯示的任何內容)。

謝謝。

如果存儲在會話中,具有合理數量的會話的0.25MB將使用比在DB中更少的資源。 因此會話中資源過度的可能性較低。

它取決於您的站點和服務器的並發用戶數。 由於它是一個共享服務器,我會使用數據庫,如果(並且僅當)你有非常多的用戶,但它更容易和更快與$ _SESSION,200kbs不是很多。 此外,不使用數據庫可以節省大量的時間來檢索數據,因為它不必在每個請求上來回轉發數據庫服務器和Web服務器。

會話的實際性能損失是PHP重寫每個請求的會話數據。 寫入磁盤(它將在moste情況下執行)非常慢。 它應僅用於簡單的事情,如身份驗證和小型數據結構,例如購物車等。

根據它是什么類型的數據以及服務器上可用的軟件,您應該將它存儲在數據庫中,或者您可以使用NoSQL解決方案,如MongoDB,Redis或CouchDB。

由於您正在考慮首先使用會話,因此我認為數據的一致性不是第一優先級。 如果數據很重要,您應該使用MySQL數據庫,因為它遵循ACID原則,即使在客戶端與當前會話解除關聯后,也會保留您的數據。

如果一致性不重要,請考慮使用Memcached(如果可用)。

簡介 :使用數據庫,但不一定是MySQL(取決於它是什么數據)。

當您使用默認會話處理程序時,會話通常在存儲在文件系統上的會話文件中后加載到內存中。 除非您明確使用內存來存儲會話,否則會話中沒有持久的內存問題。 在我看來,無論如何都要舉行大型會議。 設計中必須存在一些根本性缺陷。 如果要將數據與用戶關聯,通常可以通過設計數據庫來實現,這樣數據就可以通過外鍵與正確的用戶相關聯。 您可以查詢此數據的一小部分,而不是將大量數據加載到內存中並對其進行過濾。 會話僅對用戶身份驗證非常有用。 RESTful API根本不會使用會話。 我應該注意到,我偏向於無國籍網絡。 會話在請求之間保持狀態。 我只接受身份驗證作為有效的用例,因為瀏覽器不提供通用且安全的替代方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM