本發(fā)明屬于信息處理領(lǐng)域,尤其涉及一種用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法及系統(tǒng)。
背景技術(shù):
隨著iptv(internetprotocoltelevision,網(wǎng)路協(xié)議電視)的廣泛普及,iptv的用戶(hù)數(shù)量不斷增加。為了更好地改善和提高iptv的服務(wù)質(zhì)量,為用戶(hù)提供更有價(jià)值的服務(wù),對(duì)于服務(wù)提供商而言,需要先對(duì)用戶(hù)的行為數(shù)據(jù)進(jìn)行采集和分析,從而能夠?qū)ν馓峁┐笠?guī)模用戶(hù)實(shí)時(shí)狀態(tài)信息的查詢(xún)功能。用戶(hù)實(shí)時(shí)狀態(tài)包括在線(xiàn)狀態(tài)以及離線(xiàn)狀態(tài),其中,對(duì)用戶(hù)實(shí)時(shí)狀態(tài)的檢測(cè)和分析又是行為數(shù)據(jù)分析過(guò)程中的一大重點(diǎn)和難點(diǎn)。
現(xiàn)有的iptv用戶(hù)實(shí)時(shí)狀態(tài)檢測(cè)系統(tǒng)主要用于把描述了用戶(hù)實(shí)時(shí)狀態(tài)的數(shù)據(jù)保存在傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)中,即,通過(guò)直接對(duì)關(guān)系數(shù)據(jù)庫(kù)執(zhí)行讀寫(xiě)操作,更新當(dāng)前存儲(chǔ)的用戶(hù)實(shí)時(shí)狀態(tài)的數(shù)據(jù)。然而,在這種處理方式中,數(shù)據(jù)庫(kù)不但要負(fù)責(zé)大量實(shí)時(shí)存儲(chǔ)用戶(hù)消息的任務(wù),還要負(fù)責(zé)大量的用戶(hù)實(shí)時(shí)狀態(tài)查詢(xún)?nèi)蝿?wù),因此會(huì)為數(shù)據(jù)庫(kù)帶來(lái)巨大的壓力。
綜上所述,現(xiàn)有用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法存在數(shù)據(jù)庫(kù)讀寫(xiě)壓力過(guò)大的問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法及系統(tǒng),旨在解決現(xiàn)有的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法中,存在數(shù)據(jù)庫(kù)讀寫(xiě)壓力過(guò)大的問(wèn)題。
本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,一種用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法,包括:
消息采集模塊接收機(jī)頂盒模塊發(fā)出的用戶(hù)心跳消息,并將所述用戶(hù)心跳消息存儲(chǔ)至第一消息隊(duì)列;
第一處理模塊以固定的第一時(shí)間間隔獲取所述第一消息隊(duì)列中的所述用戶(hù)心跳消息,并將所述用戶(hù)心跳消息從所述第一消息隊(duì)列中移除;
所述第一處理模塊分別判斷每條所述用戶(hù)心跳消息在所述第一消息隊(duì)列中的生存時(shí)間是否超過(guò)預(yù)設(shè)閾值;
當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列中的生存時(shí)間未超過(guò)預(yù)設(shè)閾值時(shí),所述第一處理模塊將該條用戶(hù)心跳消息重新存儲(chǔ)至所述第一消息隊(duì)列;
當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列中的生存時(shí)間超過(guò)預(yù)設(shè)閾值時(shí),所述第一處理模塊在狀態(tài)緩存中將該條用戶(hù)心跳消息對(duì)應(yīng)的用戶(hù)的實(shí)時(shí)狀態(tài)更新為離線(xiàn)狀態(tài),以在接收到關(guān)于所述用戶(hù)的實(shí)時(shí)狀態(tài)查詢(xún)指令時(shí),從所述狀態(tài)緩存中檢測(cè)出所述用戶(hù)的實(shí)時(shí)狀態(tài)。
本發(fā)明實(shí)施例的另一目的在于提供一種用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)系統(tǒng),包括消息采集模塊、機(jī)頂盒模塊、第一處理模塊、第一消息隊(duì)列以及狀態(tài)緩存,
所述消息采集模塊用于接收機(jī)頂盒模塊發(fā)出的用戶(hù)心跳消息,并將所述用戶(hù)心跳消息存儲(chǔ)至第一消息隊(duì)列;
所述第一處理模塊用于以固定的第一時(shí)間間隔獲取所述第一消息隊(duì)列中的所述用戶(hù)心跳消息,并將所述用戶(hù)心跳消息從所述第一消息隊(duì)列中移除;
所述第一處理模塊還用于分別判斷每條所述用戶(hù)心跳消息在所述第一消息隊(duì)列中的生存時(shí)間是否超過(guò)預(yù)設(shè)閾值;
當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列中的生存時(shí)間未超過(guò)預(yù)設(shè)閾值時(shí),所述第一處理模塊還用于將該條用戶(hù)心跳消息重新存儲(chǔ)至所述第一消息隊(duì)列;
當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列中的生存時(shí)間超過(guò)預(yù)設(shè)閾值時(shí),所述第一處理模塊還用于在狀態(tài)緩存中將該條用戶(hù)心跳消息對(duì)應(yīng)的用戶(hù)的實(shí)時(shí)狀態(tài)更新為離線(xiàn)狀態(tài),以在接收到關(guān)于所述用戶(hù)的實(shí)時(shí)狀態(tài)查詢(xún)指令時(shí),從所述狀態(tài)緩存中檢測(cè)出所述用戶(hù)的實(shí)時(shí)狀態(tài)。
本發(fā)明實(shí)施例中,通過(guò)在狀態(tài)緩存中記錄用戶(hù)的實(shí)時(shí)狀態(tài),能夠?qū)⒆x取和存儲(chǔ)用戶(hù)實(shí)時(shí)狀態(tài)數(shù)據(jù)的壓力從數(shù)據(jù)庫(kù)轉(zhuǎn)移至緩存中,使得管理員在查詢(xún)某個(gè)用戶(hù)的實(shí)時(shí)狀態(tài)時(shí),只需從緩存中讀取數(shù)據(jù),因此,提高了非關(guān)系型用戶(hù)實(shí)時(shí)狀態(tài)數(shù)據(jù)的讀取效率,也避免了數(shù)據(jù)庫(kù)讀寫(xiě)壓力過(guò)大的問(wèn)題產(chǎn)生?;诟鱾€(gè)模塊來(lái)對(duì)實(shí)時(shí)狀態(tài)數(shù)據(jù)進(jìn)行處理,保證了所有數(shù)據(jù)都能夠分布在一臺(tái)服務(wù)器,故不會(huì)受到數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的限制,提高了對(duì)大批量數(shù)據(jù)的處理性能。通過(guò)單獨(dú)對(duì)第一消息隊(duì)列中的用戶(hù)心跳消息進(jìn)行處理,且第一消息隊(duì)列中存儲(chǔ)的用戶(hù)心跳消息總量不斷在調(diào)整,保證了在判斷用戶(hù)的實(shí)時(shí)狀態(tài)時(shí),無(wú)須每次都讀取來(lái)源同一用戶(hù)的所有心跳消息,且僅有在用戶(hù)心跳消息超時(shí)時(shí)才將該用戶(hù)的實(shí)時(shí)狀態(tài)更新為離線(xiàn)狀態(tài),因而降低了用戶(hù)的離線(xiàn)狀態(tài)檢測(cè)難度,由此也提高了系統(tǒng)的穩(wěn)定性和可靠性。
附圖說(shuō)明
圖1是本發(fā)明實(shí)施例提供的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法所適用的系統(tǒng)架構(gòu)圖;
圖2是本發(fā)明實(shí)施例提供的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法的實(shí)現(xiàn)流程圖;
圖3是本發(fā)明另一實(shí)施例提供的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法的實(shí)現(xiàn)流程圖;
圖4是本發(fā)明另一實(shí)施例提供的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法所適用的系統(tǒng)架構(gòu)圖;
圖5是本發(fā)明實(shí)施例提供的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法s101的具體實(shí)現(xiàn)流程圖;
圖6是本發(fā)明實(shí)施例提供的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)系統(tǒng)的結(jié)構(gòu)框圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
在本發(fā)明實(shí)施例中,用戶(hù)的實(shí)時(shí)狀態(tài)包括在線(xiàn)狀態(tài)以及離線(xiàn)狀態(tài),用戶(hù)的實(shí)時(shí)狀態(tài)數(shù)據(jù)包括用戶(hù)的實(shí)時(shí)狀態(tài)、用戶(hù)當(dāng)前觀看的節(jié)目信息、用戶(hù)當(dāng)前觀看的頻道信息、觀看時(shí)間以及用戶(hù)的基本賬號(hào)信息等與用戶(hù)所使用的iptv相關(guān)的所有數(shù)據(jù),在此不作限定。
圖1示出了本發(fā)明實(shí)施例提供的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法所適用的系統(tǒng)架構(gòu)圖,為了便于說(shuō)明,僅示出了與本實(shí)施例相關(guān)的部分。
參照?qǐng)D1,該系統(tǒng)由多個(gè)機(jī)頂盒模塊11、消息采集模塊12、第一消息隊(duì)列13、第一處理模塊14以及狀態(tài)緩存15組成,其中,機(jī)頂盒模塊11可位于iptv機(jī)頂盒內(nèi)部,用于根據(jù)預(yù)存儲(chǔ)的策略,對(duì)當(dāng)前用戶(hù)正在收看的節(jié)目信息、頻道信息和用戶(hù)的基本信息進(jìn)行采集及管理,并用于生成用戶(hù)心跳消息,從而將獲取得到的上述各類(lèi)實(shí)時(shí)狀態(tài)數(shù)據(jù)通過(guò)有線(xiàn)或無(wú)線(xiàn)網(wǎng)絡(luò)發(fā)送至消息采集模塊12,以告知消息采集模塊12當(dāng)前用戶(hù)處于怎樣的狀態(tài)之中。
在該系統(tǒng)中,消息采集模塊12用于接收機(jī)頂盒模塊11發(fā)出的各類(lèi)實(shí)時(shí)狀態(tài)數(shù)據(jù),并將其中的用戶(hù)心跳消息暫存于第一消息隊(duì)列13中,以使第一處理模塊14能夠從該第一消息隊(duì)列13中讀取出最新時(shí)刻的用戶(hù)心跳消息,從而根據(jù)用戶(hù)心跳消息的生存時(shí)間,判斷出對(duì)應(yīng)的哪些用戶(hù)正處于在線(xiàn)狀態(tài)或離線(xiàn)狀態(tài),并在狀態(tài)緩存15中實(shí)現(xiàn)對(duì)用戶(hù)實(shí)時(shí)狀態(tài)的更新或修改。
圖2示出了本發(fā)明實(shí)施例提供的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法的實(shí)現(xiàn)流程,詳述如下:
在s201中,消息采集模塊接收機(jī)頂盒模塊發(fā)出的用戶(hù)心跳消息,并將所述用戶(hù)心跳消息存儲(chǔ)至第一消息隊(duì)列。
本實(shí)施例中,機(jī)頂盒實(shí)現(xiàn)了將用戶(hù)所使用的iptv電視機(jī)與外部信號(hào)源相連,機(jī)頂盒模塊位于iptv機(jī)頂盒的內(nèi)部。其中,用戶(hù)可利用iptv賬號(hào)和密碼,在機(jī)頂盒所提供的操作界面中執(zhí)行登錄,以獲取與iptv賬號(hào)綁定的節(jié)目觀看權(quán)限以及頻道觀看權(quán)限。當(dāng)iptv機(jī)頂盒開(kāi)啟后,機(jī)頂盒模塊在預(yù)設(shè)的時(shí)間間隔到達(dá)時(shí),生成用戶(hù)心跳消息,例如,一分鐘生成一次用戶(hù)心跳消息,并將攜帶有iptv賬號(hào)的該條用戶(hù)心跳信息發(fā)送至遠(yuǎn)程服務(wù)器內(nèi)部的消息采集模塊中;換句話(huà)說(shuō),當(dāng)iptv機(jī)頂盒關(guān)閉后,機(jī)頂盒模塊將停止運(yùn)行,由于此時(shí)無(wú)法生成用戶(hù)心跳消息,因此,消息采集模塊將不會(huì)接收到最新時(shí)刻下基于該iptv賬號(hào)的用戶(hù)心跳消息。
此外,當(dāng)iptv機(jī)頂盒開(kāi)啟后,用戶(hù)通過(guò)遙控器來(lái)選擇自己所需的信號(hào)源、播放平臺(tái)以及選擇自己所需觀看的頻道、節(jié)目時(shí),上述機(jī)頂盒模塊能夠檢測(cè)出用戶(hù)所選擇的具體內(nèi)容,并將該具體內(nèi)容與其檢測(cè)到的iptv賬號(hào)共同作為上述用戶(hù)心跳消息中,從而發(fā)送至遠(yuǎn)程的消息采集模塊。
特別地,僅在接收到切換指令,以改變當(dāng)前所播放的節(jié)目或頻道時(shí),機(jī)頂盒模塊才再次采集當(dāng)前時(shí)刻的用戶(hù)實(shí)時(shí)狀態(tài)數(shù)據(jù);或者,按照預(yù)設(shè)的時(shí)間間隔檢測(cè)當(dāng)前時(shí)刻的播放內(nèi)容時(shí),若播放頻道或者播放節(jié)目未發(fā)生改變,則機(jī)頂盒模塊無(wú)須再次采集當(dāng)前時(shí)刻的用戶(hù)實(shí)時(shí)狀態(tài)數(shù)據(jù)。
本實(shí)施例中,消息采集模塊將各個(gè)機(jī)頂盒模塊發(fā)送過(guò)來(lái)的基于不同用戶(hù)的用戶(hù)心跳消息存儲(chǔ)至預(yù)先建立的第一消息隊(duì)列中。
在s202中,第一處理模塊以固定的第一時(shí)間間隔獲取所述第一消息隊(duì)列中的所述用戶(hù)心跳消息,并將所述用戶(hù)心跳消息從所述第一消息隊(duì)列中移除。
系統(tǒng)中的第一處理模塊批量讀取當(dāng)前已累積存儲(chǔ)于該隊(duì)列中的各條用戶(hù)心跳消息,即,將第一消息隊(duì)列中的用戶(hù)心跳消息轉(zhuǎn)移至第一處理模塊內(nèi)部,且在第一消息隊(duì)列中清空當(dāng)前已被讀取的每一條用戶(hù)心跳消息。
由于消息采集模塊會(huì)接收到不同時(shí)刻下不同機(jī)頂盒模塊上傳的用戶(hù)心跳消息,因此,當(dāng)?shù)谝幌㈥?duì)列中的用戶(hù)心跳消息被清空后,也會(huì)再次累積有最新時(shí)刻下的各條用戶(hù)心跳消息,故第一處理模塊將會(huì)保持固定的時(shí)間間隔不斷讀取第一消息隊(duì)列中最新的用戶(hù)心跳消息。
例如,第一處理模塊每隔2秒將執(zhí)行一次用戶(hù)心跳消息獲取操作,則第一處理模塊將會(huì)得到這2秒之內(nèi)才存儲(chǔ)于第一消息隊(duì)列中的各條用戶(hù)心跳消息。
在s203中,所述第一處理模塊分別判斷每條所述用戶(hù)心跳消息在所述第一消息隊(duì)列中的生存時(shí)間是否超過(guò)預(yù)設(shè)閾值。
本實(shí)施例中,某條用戶(hù)心跳消息的生存時(shí)間是指該用戶(hù)心跳消息進(jìn)入第一消息隊(duì)列中的時(shí)長(zhǎng),即存儲(chǔ)時(shí)長(zhǎng)。第一處理模塊在讀取用戶(hù)心跳消息并將用戶(hù)心跳消息從所述第一消息隊(duì)列中移除之前,先分別獲取每條用戶(hù)心跳消息在第一消息隊(duì)列中的生存時(shí)間。根據(jù)系統(tǒng)內(nèi)部預(yù)設(shè)的時(shí)長(zhǎng)閾值,第一處理模塊能夠識(shí)別出每一條用戶(hù)心跳消息的生存時(shí)間是否超過(guò)了該時(shí)長(zhǎng)閾值。
在s204中,當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列中的生存時(shí)間未超過(guò)預(yù)設(shè)閾值時(shí),所述第一處理模塊將該條用戶(hù)心跳消息重新存儲(chǔ)至所述第一消息隊(duì)列。
對(duì)于某條用戶(hù)心跳消息而言,當(dāng)該用戶(hù)心跳消息被第一處理模塊讀取并處理后,第一消息隊(duì)列中已不再存儲(chǔ)有該條用戶(hù)心跳消息。此時(shí),若經(jīng)過(guò)分析得知該條用戶(hù)心跳消息在第一消息隊(duì)列中的生存時(shí)間未超過(guò)預(yù)設(shè)的閾值時(shí)長(zhǎng),則第一處理模塊會(huì)再次在第一消息隊(duì)列中寫(xiě)入該條用戶(hù)心跳消息,且該條用戶(hù)心跳消息的存儲(chǔ)時(shí)刻保持與第一次進(jìn)入第一消息隊(duì)列時(shí)的存儲(chǔ)時(shí)刻相同。將未超時(shí)的用戶(hù)心跳消息再次進(jìn)行存儲(chǔ),表示該條用戶(hù)心跳消息所對(duì)應(yīng)的用戶(hù)依然處于在線(xiàn)狀態(tài)。由此可知,存在于第一消息隊(duì)列中各條用戶(hù)心跳消息所對(duì)應(yīng)的用戶(hù)的實(shí)時(shí)狀態(tài)都被判定為在線(xiàn)狀態(tài)。
優(yōu)選地,在s204中,當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列中的生存時(shí)間未超過(guò)預(yù)設(shè)閾值時(shí),所述方法還包括:
所述第一處理模塊將該條用戶(hù)心跳消息中的實(shí)時(shí)收視信息存儲(chǔ)至所述狀態(tài)緩存中,以更新所述用戶(hù)在所述狀態(tài)緩存中對(duì)應(yīng)的歷史收視信息
本實(shí)施例中,狀態(tài)緩存是數(shù)據(jù)交換的緩沖區(qū),該緩沖區(qū)中存儲(chǔ)了用戶(hù)最新的實(shí)時(shí)狀態(tài)數(shù)據(jù),包含但不限于各個(gè)用戶(hù)的實(shí)時(shí)狀態(tài)、iptv賬號(hào)信息、用戶(hù)收視對(duì)象以及用戶(hù)心跳消息的接收時(shí)間等信息,這些信息都是用戶(hù)實(shí)時(shí)狀態(tài)檢測(cè)系統(tǒng)最終所需要生成的緩存數(shù)據(jù)。
當(dāng)基于生存時(shí)間來(lái)判斷某條用戶(hù)心跳消息所對(duì)應(yīng)的用戶(hù)仍處于在線(xiàn)狀態(tài)時(shí),由于用戶(hù)心跳消息中攜帶有上述信號(hào)源、播放平臺(tái)、收看頻道以及收看節(jié)目等內(nèi)容,因而除了將該其用戶(hù)心跳消息再次寫(xiě)入第一消息隊(duì)列,還會(huì)在狀態(tài)緩存中更新該用戶(hù)的歷史收視信息,使得歷史收視信息中的內(nèi)容為用戶(hù)心跳消息所攜帶的具體內(nèi)容,以保證狀態(tài)緩存能夠具有最實(shí)時(shí)以及最準(zhǔn)確的用戶(hù)實(shí)時(shí)狀態(tài)數(shù)據(jù)。
在s205中,當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列中的生存時(shí)間超過(guò)預(yù)設(shè)閾值時(shí),所述第一處理模塊在狀態(tài)緩存中將該條用戶(hù)心跳消息對(duì)應(yīng)的用戶(hù)的實(shí)時(shí)狀態(tài)更新為離線(xiàn)狀態(tài),以在接收到關(guān)于所述用戶(hù)的實(shí)時(shí)狀態(tài)查詢(xún)指令時(shí),從所述狀態(tài)緩存中檢測(cè)出所述用戶(hù)的實(shí)時(shí)狀態(tài)。
當(dāng)?shù)谝惶幚砟K識(shí)別到某條用戶(hù)心跳消息在第一消息隊(duì)列中的生存時(shí)間超過(guò)了預(yù)設(shè)的時(shí)長(zhǎng)閾值時(shí),第一處理模塊將會(huì)在狀態(tài)緩存中找到該條用戶(hù)心跳消息所對(duì)應(yīng)的用戶(hù)的實(shí)時(shí)狀態(tài)記錄,并將其更新為離線(xiàn)狀態(tài),用以表示已太長(zhǎng)時(shí)間未接收到該用戶(hù)的心跳信息,因而判定該用戶(hù)已下線(xiàn)。
作為本發(fā)明的一個(gè)實(shí)施例,上述s205具體如下:
當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列中的生存時(shí)間超過(guò)預(yù)設(shè)閾值時(shí),所述第一處理模塊分別在狀態(tài)緩存以及在收視對(duì)象數(shù)據(jù)庫(kù)中將該條用戶(hù)心跳消息對(duì)應(yīng)的用戶(hù)的實(shí)時(shí)狀態(tài)更新為離線(xiàn)狀態(tài)。
本發(fā)明實(shí)施例中,收視對(duì)象數(shù)據(jù)庫(kù)為關(guān)系型數(shù)據(jù)庫(kù),用于存儲(chǔ)每個(gè)用戶(hù)的收視狀態(tài)信息。其中,收視狀態(tài)信息包括當(dāng)前收看對(duì)象、收視開(kāi)始時(shí)間以及用戶(hù)的實(shí)時(shí)狀態(tài)等信息,且收視對(duì)象具體為收看節(jié)目以及收看頻道。收視對(duì)象數(shù)據(jù)庫(kù)為其他外部系統(tǒng)提供了收視狀態(tài)信息的匯總查詢(xún)服務(wù),使得其他系統(tǒng)能夠調(diào)用該收視對(duì)象數(shù)據(jù)庫(kù)中的具體數(shù)據(jù),從而基于對(duì)該數(shù)據(jù)的分析來(lái)提供更好的iptv服務(wù)。
例如,外部系統(tǒng)可在收視對(duì)象數(shù)據(jù)庫(kù)中快速查詢(xún)到當(dāng)前正在收看a節(jié)目的所有用戶(hù)名單,而無(wú)需再到上述狀態(tài)緩存中輪詢(xún)每個(gè)用戶(hù)對(duì)應(yīng)的歷史收看節(jié)目后,再判斷出收看a節(jié)目的所有用戶(hù)有哪些。
當(dāng)狀態(tài)緩存中某個(gè)用戶(hù)的實(shí)時(shí)狀態(tài)更新為離線(xiàn)狀態(tài)時(shí),收視對(duì)象數(shù)據(jù)庫(kù)中該用戶(hù)的實(shí)時(shí)狀態(tài)也一并更新為離線(xiàn)狀態(tài),用以確定用戶(hù)的實(shí)時(shí)狀態(tài)已發(fā)生了改變,因而需要實(shí)時(shí)記錄至收視對(duì)象數(shù)據(jù)庫(kù)中,同時(shí)也保持了狀態(tài)緩存與收視對(duì)象數(shù)據(jù)庫(kù)中實(shí)時(shí)狀態(tài)數(shù)據(jù)的同步,避免出現(xiàn)兩邊信息不一致而導(dǎo)致數(shù)據(jù)混亂以及降低系統(tǒng)可靠性的問(wèn)題。
特別地,當(dāng)系統(tǒng)接收到關(guān)于某一用戶(hù)的實(shí)時(shí)狀態(tài)查詢(xún)指令時(shí),系統(tǒng)或者系統(tǒng)內(nèi)部的第三處理模塊將會(huì)從所述狀態(tài)緩存中檢測(cè)出該用戶(hù)的實(shí)時(shí)狀態(tài),并將該實(shí)時(shí)狀態(tài)返回至發(fā)出實(shí)時(shí)狀態(tài)查詢(xún)指令的請(qǐng)求用戶(hù)。
本發(fā)明實(shí)施例中,通過(guò)在狀態(tài)緩存中記錄用戶(hù)的實(shí)時(shí)狀態(tài),能夠?qū)⒆x取和存儲(chǔ)用戶(hù)實(shí)時(shí)狀態(tài)數(shù)據(jù)的壓力從數(shù)據(jù)庫(kù)轉(zhuǎn)移至緩存中,使得管理員在查詢(xún)某個(gè)用戶(hù)的實(shí)時(shí)狀態(tài)時(shí),只需從緩存中讀取數(shù)據(jù),因此,提高了非關(guān)系型用戶(hù)實(shí)時(shí)狀態(tài)數(shù)據(jù)的讀取效率,也避免了數(shù)據(jù)庫(kù)讀寫(xiě)壓力過(guò)大的問(wèn)題產(chǎn)生?;诟鱾€(gè)模塊來(lái)對(duì)實(shí)時(shí)狀態(tài)數(shù)據(jù)進(jìn)行處理,保證了所有數(shù)據(jù)都能夠分布在一臺(tái)服務(wù)器,故不會(huì)受到數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的限制,提高了對(duì)大批量數(shù)據(jù)的處理性能。通過(guò)單獨(dú)對(duì)第一消息隊(duì)列中的用戶(hù)心跳消息進(jìn)行處理,且第一消息隊(duì)列中存儲(chǔ)的用戶(hù)心跳消息總量不斷在調(diào)整,保證了在判斷用戶(hù)的實(shí)時(shí)狀態(tài)時(shí),無(wú)須每次都讀取來(lái)源同一用戶(hù)的所有心跳消息,且僅有在用戶(hù)心跳消息超時(shí)時(shí)才將該用戶(hù)的實(shí)時(shí)狀態(tài)更新為離線(xiàn)狀態(tài),因而降低了用戶(hù)的離線(xiàn)狀態(tài)檢測(cè)難度,由此也提高了系統(tǒng)的穩(wěn)定性和可靠性。
作為本發(fā)明的另一實(shí)施例,圖3示出了本發(fā)明實(shí)施例提供的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法的實(shí)現(xiàn)流程,詳述如下:
在s301中,消息采集模塊接收機(jī)頂盒模塊發(fā)出的用戶(hù)心跳消息,并將所述用戶(hù)心跳消息存儲(chǔ)至第一消息隊(duì)列以及第二消息隊(duì)列,其中,所述用戶(hù)心跳信息包括實(shí)時(shí)收視信息。
第二消息隊(duì)列為系統(tǒng)中預(yù)先建立的除第一消息隊(duì)列之外的另一個(gè)隊(duì)列?;谏鲜鰏101中相同的實(shí)現(xiàn)原理,當(dāng)消息采集模塊采集到各個(gè)機(jī)頂盒模塊發(fā)出的實(shí)時(shí)收視信息后,會(huì)將實(shí)時(shí)收視信息分發(fā)到第二消息隊(duì)列中。
在s302中,第二處理模塊以固定的第二時(shí)間間隔獲取所述第二消息隊(duì)列中的所述實(shí)時(shí)收視信息。
每條實(shí)時(shí)收視信息的屬性中記錄了該條信息的存儲(chǔ)時(shí)刻。第二處理模塊保持固定的時(shí)間間隔讀取第二消息隊(duì)列中的實(shí)時(shí)收視信息,在一次讀取過(guò)程中,僅讀取存儲(chǔ)時(shí)刻與當(dāng)前系統(tǒng)時(shí)間的差值在預(yù)設(shè)時(shí)長(zhǎng)范圍內(nèi)的一條或多條實(shí)時(shí)收視信息。
例如,第二處理模塊每隔2秒將執(zhí)行一次實(shí)時(shí)收視信息的獲取操作,則第二處理模塊將會(huì)得到最近2秒內(nèi)才存儲(chǔ)于第二消息隊(duì)列中的各條實(shí)時(shí)收視信息。
在s303中,所述第二處理模塊在所述狀態(tài)緩存中獲取所述用戶(hù)的所述歷史收視信息,并判斷所述歷史收視信息與所述實(shí)時(shí)收視信息是否相同。
第二處理模塊讀取到第二消息隊(duì)列中的各條最新的實(shí)時(shí)收視信息后,在狀態(tài)緩存中獲取每條實(shí)時(shí)收視信息所對(duì)應(yīng)的用戶(hù)的歷史收視信息。第二處理模塊將屬于同一用戶(hù)的兩組數(shù)據(jù)進(jìn)行比較,從而可以判斷出最新時(shí)刻讀取到的該用戶(hù)的實(shí)時(shí)收視對(duì)象相對(duì)于較前時(shí)刻存儲(chǔ)于狀態(tài)緩存中的該用戶(hù)的收視對(duì)象來(lái)說(shuō),在當(dāng)前時(shí)刻之下是否發(fā)生了變化。
例如,狀態(tài)緩存中用戶(hù)a的歷史收視信息中記錄了其當(dāng)前收看對(duì)象為節(jié)目a,而從第二消息隊(duì)列中剛剛讀取到的用戶(hù)a的收看對(duì)象為節(jié)目b,可以得知,用戶(hù)a的收視對(duì)象在當(dāng)前時(shí)刻下發(fā)生了變化,即用戶(hù)a的歷史收視信息與實(shí)時(shí)收視信息不同。
在s304中,若所述歷史收視信息與所述實(shí)時(shí)收視信息不同,則所述第二處理模塊在收視對(duì)象數(shù)據(jù)庫(kù)中將所述用戶(hù)的當(dāng)前收看對(duì)象更新為所述實(shí)時(shí)收視信息中的所述收看對(duì)象,并在所述狀態(tài)緩存中將所述用戶(hù)的所述歷史收視信息更新為所述實(shí)時(shí)收視信息。
本實(shí)施例中,只有當(dāng)緩存中的歷史收視信息與實(shí)時(shí)收視信息有差別時(shí),收視對(duì)象數(shù)據(jù)庫(kù)中的用戶(hù)實(shí)時(shí)狀態(tài)數(shù)據(jù)才會(huì)被寫(xiě)入以及存儲(chǔ),而在歷史收視信息與實(shí)時(shí)收視信息相同時(shí),收視對(duì)象數(shù)據(jù)庫(kù)無(wú)須執(zhí)行數(shù)據(jù)寫(xiě)入操作。在大部分情況之下,用戶(hù)在一段時(shí)間內(nèi)會(huì)持續(xù)收看相同的一個(gè)節(jié)目,因此,第二處理模塊即使在這段時(shí)間內(nèi)持續(xù)接收與歷史收視信息相同的某個(gè)用戶(hù)的用戶(hù)心跳消息,也不必每接收到一條該用戶(hù)的用戶(hù)心跳消息就執(zhí)行一次收視對(duì)象更新操作,因而本發(fā)明實(shí)施例極大地減輕了數(shù)據(jù)庫(kù)的運(yùn)行壓力,提高了實(shí)時(shí)狀態(tài)數(shù)據(jù)的檢測(cè)效率。
由于第二處理模塊從第二消息隊(duì)列中獲取到的實(shí)時(shí)收視信息為用戶(hù)傳送至系統(tǒng)的最新信息,因此,基于該最新的實(shí)時(shí)收視信息來(lái)更新收視對(duì)象數(shù)據(jù)庫(kù)以及狀態(tài)緩存中的歷史收視信息時(shí),能夠最大程度地記錄存儲(chǔ)用戶(hù)當(dāng)前時(shí)刻的真實(shí)收看狀態(tài),提高了系統(tǒng)中存儲(chǔ)的用戶(hù)實(shí)時(shí)狀態(tài)數(shù)據(jù)的準(zhǔn)確性。
圖4示出了本發(fā)明另一實(shí)施例提供的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法所適用的系統(tǒng)架構(gòu)圖,為了便于說(shuō)明,僅示出了與本實(shí)施例相關(guān)的部分。
參照?qǐng)D4,該系統(tǒng)由多個(gè)機(jī)頂盒模塊41、消息采集模塊42、第一消息隊(duì)列43、第二消息隊(duì)列44、第一處理模塊45、狀態(tài)緩存46、第二處理模塊47以及收視對(duì)象數(shù)據(jù)庫(kù)48組成。其中,機(jī)頂盒模塊41將采集到的用戶(hù)心跳消息以及實(shí)時(shí)收視信息發(fā)送至遠(yuǎn)程的消息采集模塊42,消息采集模塊42將接收到的每條用戶(hù)心跳信息分發(fā)至第一消息隊(duì)列43以及將接收到的每條實(shí)時(shí)收視信息分發(fā)至第二消息隊(duì)列44。
第一處理模塊45以固定的時(shí)間間隔從第一消息隊(duì)列43中讀取出最新時(shí)刻的用戶(hù)心跳消息,從而根據(jù)用戶(hù)心跳消息的生存時(shí)間,判斷出對(duì)應(yīng)的哪些用戶(hù)正處于離線(xiàn)狀態(tài),并在狀態(tài)緩存46以及在收視對(duì)象數(shù)據(jù)庫(kù)48中實(shí)現(xiàn)對(duì)用戶(hù)實(shí)時(shí)狀態(tài)的更新或修改;若某條用戶(hù)心跳信息的生存時(shí)間尚未超時(shí),則第一處理模塊45將該條用戶(hù)心跳信息重新寫(xiě)入第一消息隊(duì)列43中,隨著時(shí)間的推移,該用戶(hù)心跳信息會(huì)達(dá)到時(shí)長(zhǎng)閥值,從而判斷用戶(hù)已經(jīng)離線(xiàn),此時(shí)該用戶(hù)心跳消息將不會(huì)再寫(xiě)入第一消息隊(duì)列中。
第二處理模塊47以固定的時(shí)間間隔從第二消息隊(duì)列44中讀取出最近的預(yù)設(shè)時(shí)長(zhǎng)內(nèi)的各條實(shí)時(shí)收視信息,并在狀態(tài)緩存46中讀取每條實(shí)時(shí)收視信息所對(duì)應(yīng)的用戶(hù)的歷史收視信息,從而判斷該用戶(hù)的兩條新舊信息是否相同,若不相同,則在狀態(tài)緩存46以及收視對(duì)象數(shù)據(jù)庫(kù)48中,將該用戶(hù)的收視信息進(jìn)行更新后存儲(chǔ)。
本發(fā)明實(shí)施例將用戶(hù)離線(xiàn)狀態(tài)檢測(cè)的過(guò)程與用戶(hù)在線(xiàn)狀態(tài)下實(shí)時(shí)收視信息的處理過(guò)程分發(fā)至第一處理模塊以及第二處理模塊來(lái)獨(dú)立處理,并且兩個(gè)模塊所讀取的數(shù)據(jù)信息來(lái)源于不同的消息隊(duì)列,因此,避免了不同類(lèi)型數(shù)據(jù)之間的相互影響,通過(guò)將實(shí)時(shí)狀態(tài)數(shù)據(jù)的讀寫(xiě)壓力留在了狀態(tài)緩存中,減輕了收視對(duì)象數(shù)據(jù)庫(kù)的存儲(chǔ)壓力。
作為本發(fā)明的又一實(shí)施例,如圖5所示,在所述消息采集模塊接收機(jī)頂盒發(fā)出的用戶(hù)心跳消息之后,在所述將所述用戶(hù)心跳消息存儲(chǔ)至第一消息隊(duì)列中之前,所述方法還包括:
在s501中,所述消息采集模塊判斷所述第一消息隊(duì)列中是否存在與所述用戶(hù)心跳消息對(duì)應(yīng)同一用戶(hù)的另一條用戶(hù)心跳消息。
在s502中,當(dāng)所述第一消息隊(duì)列中存在與所述用戶(hù)心跳消息對(duì)應(yīng)同一用戶(hù)的另一條用戶(hù)心跳消息時(shí),所述消息采集模塊將所述另一條用戶(hù)心跳消息從所述第一消息隊(duì)列中移除。
消息采集模塊在持續(xù)不斷接收到各個(gè)機(jī)頂盒模塊上傳的用戶(hù)心跳消息時(shí),在將剛接收到的某條用戶(hù)心跳消息準(zhǔn)備存入第一消息隊(duì)列之前,第一消息隊(duì)列之中已包含有之前時(shí)刻所存入的其他用戶(hù)心跳消息。每條用戶(hù)心跳消息標(biāo)識(shí)了其對(duì)應(yīng)的用戶(hù),因此,消息采集模塊讀取剛接收到的用戶(hù)心跳消息所標(biāo)識(shí)的用戶(hù)后,能夠判斷當(dāng)前第一消息隊(duì)列中是否存在標(biāo)識(shí)了相同用戶(hù)的一條用戶(hù)心跳消息,若是,則將其中已存儲(chǔ)的該用戶(hù)的用戶(hù)心跳消息從第一消息隊(duì)列中移除,保證即將存入第一消息隊(duì)列中的用戶(hù)心跳消息是該用戶(hù)的最新一條用戶(hù)心跳消息,從而在后續(xù)判斷該用戶(hù)是否離線(xiàn)時(shí),能夠基于其最新的用戶(hù)心跳消息來(lái)獲取生存時(shí)間以及獲取最新的收視信息存入狀態(tài)緩存,提高該用戶(hù)實(shí)時(shí)狀態(tài)的判斷準(zhǔn)確性。
應(yīng)理解,在本發(fā)明實(shí)施例中,上述各過(guò)程的序號(hào)的大小并不意味著執(zhí)行順序的先后,各過(guò)程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對(duì)本發(fā)明實(shí)施例的實(shí)施過(guò)程構(gòu)成任何限定。
圖6示出了本發(fā)明實(shí)施例提供的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)裝置的結(jié)構(gòu)框圖,該用于運(yùn)行本發(fā)明圖1至圖5實(shí)施例所述的用戶(hù)的實(shí)時(shí)狀態(tài)檢測(cè)方法。為了便于說(shuō)明,僅示出了與本實(shí)施例相關(guān)的部分。
參照?qǐng)D6,該系統(tǒng)包括機(jī)頂盒模塊61、消息采集模塊62、第一消息隊(duì)列63、第一處理模塊64以及狀態(tài)緩存65,
所述消息采集模塊62用于接收機(jī)頂盒模塊61發(fā)出的用戶(hù)心跳消息,并將所述用戶(hù)心跳消息存儲(chǔ)至第一消息隊(duì)列63。
所述第一處理模塊64用于以固定的第一時(shí)間間隔獲取所述第一消息隊(duì)列63中的所述用戶(hù)心跳消息,并將所述用戶(hù)心跳消息從所述第一消息隊(duì)列63中移除。
所述第一處理模塊64還用于分別判斷每條所述用戶(hù)心跳消息在所述第一消息隊(duì)列63中的生存時(shí)間是否超過(guò)預(yù)設(shè)閾值。
當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列63中的生存時(shí)間未超過(guò)預(yù)設(shè)閾值時(shí),所述第一處理模塊64還用于將該條用戶(hù)心跳消息重新存儲(chǔ)至所述第一消息隊(duì)列63。
當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列63中的生存時(shí)間超過(guò)預(yù)設(shè)閾值時(shí),所述第一處理模塊64還用于在狀態(tài)緩存65中將該條用戶(hù)心跳消息對(duì)應(yīng)的用戶(hù)的實(shí)時(shí)狀態(tài)更新為離線(xiàn)狀態(tài),以在接收到關(guān)于所述用戶(hù)的實(shí)時(shí)狀態(tài)查詢(xún)指令時(shí),從所述狀態(tài)緩存65中檢測(cè)出所述用戶(hù)的實(shí)時(shí)狀態(tài)。
可選地,所述系統(tǒng)還包括收視對(duì)象數(shù)據(jù)庫(kù),當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列63中的生存時(shí)間超過(guò)預(yù)設(shè)閾值時(shí),所述第一處理模塊64具體用于分別在狀態(tài)緩存65以及在收視對(duì)象數(shù)據(jù)庫(kù)中將該條用戶(hù)心跳消息對(duì)應(yīng)的用戶(hù)的實(shí)時(shí)狀態(tài)更新為離線(xiàn)狀態(tài)。
可選地,當(dāng)所述用戶(hù)心跳消息在所述第一消息隊(duì)列63中的生存時(shí)間未超過(guò)預(yù)設(shè)閾值時(shí),所述第一處理模塊64還用于將該條用戶(hù)心跳消息中的實(shí)時(shí)收視信息存儲(chǔ)至所述狀態(tài)緩存65中,以使所述實(shí)時(shí)收視信息作為所述用戶(hù)在所述狀態(tài)緩存65中對(duì)應(yīng)的歷史收視信息。
可選地,所述系統(tǒng)還包括第二消息隊(duì)列以及第二處理模塊,所述消息采集模塊62還用于接收機(jī)頂盒模塊發(fā)出的用戶(hù)心跳消息,并將所述用戶(hù)心跳消息存儲(chǔ)至第一消息隊(duì)列63以及第二消息隊(duì)列,其中,所述用戶(hù)心跳信息包括實(shí)時(shí)收視信息;
所述第二處理模塊用于以固定的第二時(shí)間間隔獲取所述第二消息隊(duì)列中的所述實(shí)時(shí)收視信息;
所述第二處理模塊還用于在所述狀態(tài)緩存65中獲取所述用戶(hù)的所述歷史收視信息,并判斷所述歷史收視信息與所述實(shí)時(shí)收視信息是否相同;
若所述歷史收視信息與所述實(shí)時(shí)收視信息不同,則所述第二處理模塊還用于在收視對(duì)象數(shù)據(jù)庫(kù)中將所述用戶(hù)的當(dāng)前收看對(duì)象更新為所述實(shí)時(shí)收視信息中的所述收看對(duì)象,并在所述狀態(tài)緩存65中將所述用戶(hù)的所述歷史收視信息更新為所述實(shí)時(shí)收視信息。
可選地,所述消息采集模塊62還用于判斷所述第一消息隊(duì)列63中是否存在與所述用戶(hù)心跳消息對(duì)應(yīng)同一用戶(hù)的另一條用戶(hù)心跳消息。
當(dāng)所述第一消息隊(duì)列63中存在與所述用戶(hù)心跳消息對(duì)應(yīng)同一用戶(hù)的另一條用戶(hù)心跳消息時(shí),所述消息采集模塊62還用于將所述另一條用戶(hù)心跳消息從所述第一消息隊(duì)列63中移除。
本領(lǐng)域普通技術(shù)人員可以意識(shí)到,結(jié)合本文中所公開(kāi)的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來(lái)實(shí)現(xiàn)。這些功能究竟以硬件還是軟件方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專(zhuān)業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng)、裝置和單元的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以?xún)蓚€(gè)或兩個(gè)以上單元集成在一個(gè)單元中。
所述功能如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷(xiāo)售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:u盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(rom,read-onlymemory)、隨機(jī)存取存儲(chǔ)器(ram,randomaccessmemory)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。