2010-04-16 53 views
0

我正在做一個視頻門戶項目。我正在嘗試爲當前觀看視頻創建一個地方。爲了保持誰正在觀看那個視頻我設計了一個表像這樣的人:(目前正在查看視頻)的表格設計?

表:(列)

斯諾
VideoID的
的SessionID
用戶ID
createddate

這些都是專欄但我認爲這是不夠的。如果可能,你能幫助我嗎?我怎麼設計桌子?我們如何能夠完美呈現當前觀看的視頻?

請幫幫我。謝謝。

+0

@Surya您是否需要設計幫助和提示?我認爲我不能完全理解你需要什麼幫助 - 對不起,也許我的英語有時候不太好。 – Aristos 2010-04-30 06:43:11

回答

0

您的設計看起來不錯。我想補充兩個字段:

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的行。當會話未正確關閉服務器端(例如應用服務器崩潰)時,可能會發生這種情況。

0

一般來說,我會建議類似的模型:

  • 用戶
  • 視頻
  • VideoView

該列的[用戶]和[視頻]將包含特定於每個實體的屬性如「創造」。的[VideoView]表將是link table含有以下列:

  • VideoViewID (不爲空) - 如果需要,可以命名爲斯諾
  • VideoID的(不爲空) - 鏈接到[Video]表的主鍵
  • UserID (非空) - 鏈接到[User]表的主鍵
  • 的StartDate (不爲空) - 日期時間值表示視圖開始datetimestamp
  • 結束日期(空) - 日期時間值表示視圖端datetimestamp
  • 的SessionID (不爲空) - 唯一地標識用於網絡服務器會話跟蹤
  • 創建(NOT NULL) - 當記錄的創建/保存到數據庫日期時間值reporesenting

由於您可能有用戶關閉瀏覽器的訪問者「drop-offs」,因此您無法以編程方式存儲VideoView的EndDate,您可能需要後處理數據以更新EndDates具有空值的值< VideoView.StartDate + Video.Length>使用更新語句和計劃任務。


目前看視頻可以使用SQL查詢:

select * from VideoView 
where StartDate <= getdate() 
and isnull(EndDate, getdate()) >= getdate() 


希望幫助