我正在開發一個非常小的調查應用程序,可能3-4頁的Web應用程序。所以我的問題是保存調查數據的最佳方式是什麼?存儲調查數據的最佳方式?
到目前爲止,我已經想出了以下方法。
保存到數據庫並將每個調查標記爲不完整。當用戶提交調查檢查的最後一個形式時,完成調查並在完成後將其標記爲完整。
保存到會話並保存到數據庫中,當用戶提交最後一種調查形式時。
您對這些方法有什麼看法?
我正在開發一個非常小的調查應用程序,可能3-4頁的Web應用程序。所以我的問題是保存調查數據的最佳方式是什麼?存儲調查數據的最佳方式?
到目前爲止,我已經想出了以下方法。
保存到數據庫並將每個調查標記爲不完整。當用戶提交調查檢查的最後一個形式時,完成調查並在完成後將其標記爲完整。
保存到會話並保存到數據庫中,當用戶提交最後一種調查形式時。
您對這些方法有什麼看法?
我已經有這種事情相當頭疼,並建議不要使用會話,如果可能的話。當您的網站獲得適度的流量時,或者ASP.NET感覺如此時,您可能會發現當.NET嘗試釋放一些內存時,您會失去所有會話。
我會盡快把它放在數據庫中。使用Guid.NewGuid()來生成一個唯一的不可猜測的關鍵字,您可以在查詢字符串中從一個頁面傳遞到另一個頁面:這將是您從數據庫中檢索記錄的關鍵。你有沒有考慮過
其他兩個選項:
帖子從一個頁面到下的響應。 (這可能比它的價值更麻煩。)
使用asp:嚮導控件。這樣,您的3-4頁實際上將在單個頁面上進行3-4步。來自每個階段的數據會自動存儲在ViewState中,因此當您處於最後一步時,第一步中的輸入字段仍然可供您訪問。
(我還是會去爲你選擇1號雖然)。
如果您希望他們能夠在調查中途保存結果並在另一次回來完成調查,那麼您必須存儲調查的開始時間和結束時間以瞭解他們完成了它。到目前爲止,您還必須存儲所有的值。
由於它很小,我只是將它保留在會話中,然後在完成後將其保存到數據庫中。
我認爲第二個選擇是你最好的選擇。如果您的網站收到大量流量,選項1將給數據庫帶來更多壓力,並且還會通過不完整的調查來混淆數據庫。會話聽起來是一個更好的選擇,因爲真的,除非它完整,否則不需要數據,是嗎?
兩者看起來都很好,這取決於您希望用戶做什麼或您希望用戶的行爲。
第一種方法將允許用戶返回(即使在關閉瀏覽器後)以完成調查。如果你的調查很大並且用戶在其他事情丟失之前無法完成,那麼這是一個很好的觀點,但是如果你想強制用戶完成,這也是一個負面的問題,我的意思是,如果你不想完成調查。
第二種方法強制用戶在開始的同時完成調查。如果您的調查很快並且您需要有關他們的完整數據,這是一個很好的觀點,但如果您的調查很長,並且通常在用戶完成調查之前分散注意力,這很不好。
我會說,每個頁面的問題數量將是定義在兩種方法之間進行選擇的因素,也許它也適用於您。
不要爲此使用會話。微軟有一個很好的例子,說明如何不在TechEd使用的應用程序中進行調查。每次你必須考慮答案時,會議都會超時。使用ajax,保存每個答案,甚至是部分答案。如果遇到數據庫性能問題,請在一定時間內收集所有調查的所有答案,並將其保存在一起。 對於某些JavaScript,只有在過去幾秒內或在窗口關閉之前發生了某些變化時,纔可以對服務器執行回調。
除非你有回答問題的時間限制。
如果您預計您的應用程序將來可能會增長(提供更長時間的調查,甚至可能以用戶之間「相同」的結果和稍後恢復的形式),我肯定會與數據庫選項。
這是我如何做到這一點:
我會選擇第一個選項,因爲它比會話更強大。 guid(唯一標識符)好主意,我會在表格中添加guid,因爲它將完全消除會話的需要。 謝謝 – Mohamed 2009-02-11 00:16:46