我正在做一個視頻門戶項目。我正在嘗試爲當前觀看視頻創建一個地方。爲了保持誰正在觀看那個視頻我設計了一個表像這樣的人:(目前正在查看視頻)的表格設計?
表:(列)
斯諾
VideoID的
的SessionID
用戶ID
createddate
這些都是專欄但我認爲這是不夠的。如果可能,你能幫助我嗎?我怎麼設計桌子?我們如何能夠完美呈現當前觀看的視頻?
請幫幫我。謝謝。
我正在做一個視頻門戶項目。我正在嘗試爲當前觀看視頻創建一個地方。爲了保持誰正在觀看那個視頻我設計了一個表像這樣的人:(目前正在查看視頻)的表格設計?
表:(列)
斯諾
VideoID的
的SessionID
用戶ID
createddate
這些都是專欄但我認爲這是不夠的。如果可能,你能幫助我嗎?我怎麼設計桌子?我們如何能夠完美呈現當前觀看的視頻?
請幫幫我。謝謝。
您的設計看起來不錯。我想補充兩個字段:
beginView : DATETIME (not NULL)
endView : DATETIME
當你開始流式播放視頻,你可以添加新行與用戶ID,會話ID,視頻ID,beginView時間,並且視頻被打開時的表(假定當前時間,除非您有其他信息可用。)我假設Sno是一個標識列,您可以從調用中獲得插入行的標識列。該ID存儲在會話中。當會話關閉時,任何打開的記錄都可以通過更新endView值來關閉 - 它們不再是「當前」查看。
要尋找當前行,使用WHERE子句
WHERE endView IS NULL.
在endView NULL值是指視頻仍然被觀看。
由於通常的瀏覽器行爲,視頻流式傳輸到客戶端,通常比查看視頻快得多。要準確報告視頻何時不再被觀看,您可以安排瀏覽器發回視頻已完成的通知。
您可能想要考慮用戶長時間點擊暫停按鈕時會發生什麼情況。他們還在觀看該視頻嗎?
請注意,除非您明確拒絕您的入口,否則同一用戶可能一次查看多個視頻,可能是同一視頻,並且根據您的會話管理,它們可能會出現在同一屆會議。這對用於存儲正在會話中查看的視頻的數據結構有影響。
爲了確保合理的性能,我會在videoid和endView上添加索引。這將支持查詢誰在觀看特定視頻,例如
SELECT [DISTINCT] userid FROM VideoView where videoid=? AND endView IS NULL.
DISTINCT標誌是嚴格正確的,但這僅適用於同一用戶多次查看視頻的情況。它可以減慢查詢速度,從而簡化重複數據刪除和衡量成本。
在啓動時,您可能希望運行更新查詢,以將endView設置爲startView,以查看endView爲NULL的行。當會話未正確關閉服務器端(例如應用服務器崩潰)時,可能會發生這種情況。
一般來說,我會建議類似的模型:
表
該列的[用戶]和[視頻]將包含特定於每個實體的屬性如「創造」。的[VideoView]表將是link table含有以下列:
列
由於您可能有用戶關閉瀏覽器的訪問者「drop-offs」,因此您無法以編程方式存儲VideoView的EndDate,您可能需要後處理數據以更新EndDates具有空值的值< VideoView.StartDate + Video.Length>使用更新語句和計劃任務。
目前看視頻可以使用SQL查詢:
select * from VideoView
where StartDate <= getdate()
and isnull(EndDate, getdate()) >= getdate()
希望幫助
@Surya您是否需要設計幫助和提示?我認爲我不能完全理解你需要什麼幫助 - 對不起,也許我的英語有時候不太好。 – Aristos 2010-04-30 06:43:11