據(jù)存儲系統(tǒng)除了可以包括如圖2所示的結(jié)構(gòu)外還可以包括讀取請求單元13和請求獲取單元14,其中:
[0056]讀取請求單元13,用于接收讀取請求,所述讀取請求用于請求讀取某一用戶操作的用戶操作數(shù)據(jù);
[0057]請求獲取單元14,用于根據(jù)所述讀取請求單元13接收的讀取請求,從所述多時(shí)間滑窗的存儲結(jié)構(gòu)中獲取與所述某一用戶操作相關(guān)的用戶操作數(shù)據(jù)。
[0058]本發(fā)明實(shí)施例還提供一種推薦系統(tǒng),結(jié)構(gòu)示意圖如圖4所示,該推薦系統(tǒng)可因配置或性能不同而產(chǎn)生比較大的差異,可以包括一個(gè)或一個(gè)以上中央處理器(centralprocessing units,CPU) 20 (例如,一個(gè)或一個(gè)以上處理器)和存儲器21,一個(gè)或一個(gè)以上存儲應(yīng)用程序221或數(shù)據(jù)222的存儲介質(zhì)22 (例如一個(gè)或一個(gè)以上海量存儲設(shè)備)。其中,存儲器21和存儲介質(zhì)22可以是短暫存儲或持久存儲。存儲在存儲介質(zhì)22的程序可以包括一個(gè)或一個(gè)以上模塊(圖示沒標(biāo)出),每個(gè)模塊可以包括對推薦系統(tǒng)中的一系列指令操作。更進(jìn)一步地,中央處理器20可以設(shè)置為與存儲介質(zhì)22通信,在推薦系統(tǒng)上執(zhí)行存儲介質(zhì)22中的一系列指令操作。
[0059]推薦系統(tǒng)還可以包括一個(gè)或一個(gè)以上電源23,一個(gè)或一個(gè)以上有線或無線網(wǎng)絡(luò)接口 24,一個(gè)或一個(gè)以上輸入輸出接口 25,和/或,一個(gè)或一個(gè)以上操作系統(tǒng)223,例如Windows ServerTM, Mac OS XTM, UnixTM, LinuxTM,F(xiàn)reeBSDTM 等等。
[0060]上述方法實(shí)施例中所述的由推薦系統(tǒng)所執(zhí)行的步驟可以基于該圖4所示的推薦系統(tǒng)結(jié)構(gòu)。
[0061]以下以一個(gè)具體的應(yīng)用實(shí)例來說明本發(fā)明實(shí)施例的方法,本實(shí)施例中數(shù)據(jù)存儲方法應(yīng)用于的推薦系統(tǒng)為廣告系統(tǒng),廣告系統(tǒng)向用戶終端發(fā)送的推薦數(shù)據(jù)為廣告數(shù)據(jù),該廣告系統(tǒng)主要是向微信的朋友圈發(fā)送廣告數(shù)據(jù),并統(tǒng)計(jì)微信用戶終端對廣告數(shù)據(jù)的用戶行為的數(shù)據(jù),具體地,統(tǒng)計(jì)用戶在廣告位維度下的廣告曝光(最近7天),點(diǎn)贊,不感興趣(最近30天)等用戶行為的數(shù)據(jù);以及用戶在某一廣告維度下的廣告曝光(最近7天),點(diǎn)贊,不感興趣(最近30天)等用戶行為的數(shù)據(jù)。
[0062]本實(shí)施例中廣告系統(tǒng)是通過如圖5的結(jié)構(gòu)來實(shí)現(xiàn),包括:日志接收模塊、多個(gè)數(shù)據(jù)調(diào)整模塊、多個(gè)滑窗統(tǒng)計(jì)模塊及滑窗存儲模塊,其中,日志接收模塊可以是Spout組件,數(shù)據(jù)調(diào)整模塊可以是CombineBolt組件,滑窗存儲模塊可以是WindowBolt組件,進(jìn)一步地,廣告系統(tǒng)還可以包括用戶的接口模塊,即數(shù)據(jù)應(yīng)用模塊,其中:
[0063]1、日志接收模塊主要接收用戶行為的數(shù)據(jù),并以隨機(jī)的方式將各個(gè)用戶對應(yīng)的用戶行為的數(shù)據(jù)分別發(fā)送給數(shù)據(jù)調(diào)整模塊,發(fā)送的格式可以是:[用戶標(biāo)識,廣告位,廣告標(biāo)識,用戶行為編號,用戶操作發(fā)生的時(shí)刻Tl,數(shù)量]。其中,用戶行為可以為曝光,點(diǎn)贊,不感興趣等,這里所說的廣告位即上述的推薦位,廣告標(biāo)識即上述的推薦數(shù)據(jù)標(biāo)識。
[0064]2、數(shù)據(jù)調(diào)整模塊按照維度調(diào)整接收的用戶行為的數(shù)據(jù),使得調(diào)整后的用戶行為數(shù)據(jù)中包括多組維度對應(yīng)的用戶操作數(shù)據(jù),然后再進(jìn)行一次合并,并將合并后的數(shù)據(jù)發(fā)送給滑窗統(tǒng)計(jì)模塊,這里合并的目的是為了減少向滑窗統(tǒng)計(jì)模塊的輸出的數(shù)據(jù),且能減少最終的存儲空間。
[0065]其中,數(shù)據(jù)調(diào)整模塊在調(diào)整用戶行為的數(shù)據(jù)時(shí),將每一時(shí)刻的一組數(shù)據(jù)調(diào)整為三組子數(shù)據(jù),即[用戶標(biāo)識,廣告標(biāo)識,用戶行為編號,用戶操作發(fā)生的時(shí)刻Tl,數(shù)量],和[用戶標(biāo)識,廣告位,用戶行為編號,用戶操作發(fā)生的時(shí)刻Tl,數(shù)量],和[用戶標(biāo)識,廣告位,廣告標(biāo)識,用戶行為編號,用戶操作發(fā)生的時(shí)刻Tl,數(shù)量]。
[0066]數(shù)據(jù)調(diào)整模塊在合并數(shù)據(jù)時(shí),主要是將多個(gè)時(shí)刻的用戶操作數(shù)據(jù)合并為一個(gè)時(shí)刻的用戶操作數(shù)據(jù),最終形成[用戶標(biāo)識,維度的信息,用戶行為編號,時(shí)刻T2,合并數(shù)量],然后將合并后的用戶行為的數(shù)據(jù)發(fā)送給滑窗統(tǒng)計(jì)模塊。這里的合并數(shù)量為合并前的多個(gè)時(shí)刻對應(yīng)的數(shù)量總和;時(shí)刻T2包含了上述的多個(gè)Tl時(shí)刻,比如上述時(shí)刻Tl是以秒為最小精確位,則時(shí)刻T2則以分鐘為最小精確位,且該時(shí)刻T2的最小精確位取決于各維度的時(shí)間窗的粒度,如果時(shí)間窗粒度為I天或I小時(shí),則該時(shí)刻T2的最小精確位取分鐘即可。
[0067]需要說明的是,該數(shù)據(jù)調(diào)整模塊主要是對一個(gè)用戶對應(yīng)的用戶行為的數(shù)據(jù)進(jìn)行處理。
[0068]3、滑窗統(tǒng)計(jì)模塊主要是從滑窗存儲模塊中讀取數(shù)據(jù);并將讀取的數(shù)據(jù)與數(shù)據(jù)調(diào)整模數(shù)發(fā)送過來的數(shù)據(jù)進(jìn)行整合,具體地,用調(diào)整后的用戶行為數(shù)據(jù)中包括的多組維度分別對應(yīng)的用戶操作數(shù)據(jù),分別代替讀取的數(shù)據(jù)中多組維度分別對應(yīng)的時(shí)間窗之外的用戶操作數(shù)據(jù);然后將整合后的數(shù)據(jù)再寫入滑窗存儲模塊中。
[0069]在具體實(shí)現(xiàn)中,滑窗統(tǒng)計(jì)模塊在整合數(shù)據(jù)之前,還可以對不同數(shù)據(jù)調(diào)整模塊發(fā)送過來的數(shù)據(jù)進(jìn)行合并,及對不同用戶的用戶行為的數(shù)據(jù)進(jìn)行合并。
[0070]4、滑窗存儲模塊按照多時(shí)間滑窗的存儲結(jié)構(gòu)儲存用戶行為的數(shù)據(jù),具體地,按照儲存關(guān)鍵字(key)-儲存值(value)的結(jié)構(gòu)儲存,其中,儲存關(guān)鍵字為用戶標(biāo)識,存儲值包括維度的信息和用戶操作數(shù)據(jù),則本實(shí)施例中,每一列的用戶行為的數(shù)據(jù)為一個(gè)用戶對應(yīng)的用戶行為的數(shù)據(jù)。
[0071]如圖6和圖7所示,在滑窗存儲模塊中儲存多個(gè)列族,每個(gè)列族為一個(gè)用戶對應(yīng)的用戶行為的數(shù)據(jù),每個(gè)列族中包括多對列關(guān)鍵字和列值,其中列關(guān)鍵字為維度的信息(如圖7中的廣告位和/或廣告標(biāo)識),這樣一個(gè)用戶的不同維度下的數(shù)據(jù)可以集中儲存到一起,節(jié)省了存儲空間。進(jìn)一步地,每個(gè)列值中包括多對指標(biāo)關(guān)鍵字和時(shí)間槽,每個(gè)指標(biāo)關(guān)鍵字為用戶行為標(biāo)識(比如圖7中的用戶曝光和用戶點(diǎn)贊),這樣同一維度下的不同用戶操作的用戶操作信息可以集中儲存到一起,而每個(gè)時(shí)間槽中儲存的數(shù)據(jù)的時(shí)間窗可以相同,也可以不同,滿足了不同用戶操作的用戶操作信息的時(shí)間窗要求,比如用戶曝光的數(shù)據(jù)只需要存儲最近7天,而用戶點(diǎn)贊的數(shù)據(jù)需要存儲30天。
[0072]在每個(gè)時(shí)間槽中儲存中對應(yīng)用戶操作的時(shí)間窗內(nèi)的數(shù)據(jù),具體包括多對時(shí)間片和指標(biāo)數(shù),時(shí)間片I為滑動的時(shí)間片,比如要求最近7天的用戶曝光的數(shù)據(jù),滑動粒度為I天,當(dāng)前是7號,則在時(shí)間槽里存儲了 I號到7號的數(shù)據(jù),時(shí)間片I為I號的時(shí)間。
[0073]可以理解的是,上述實(shí)施例中,廣告系統(tǒng)統(tǒng)計(jì)的是每個(gè)用戶對應(yīng)的用戶行為的數(shù)據(jù)。在其它具體實(shí)施例中,如果廣告系統(tǒng)想要統(tǒng)計(jì)一個(gè)廣告位上用戶行為的數(shù)據(jù),則滑窗存儲模塊中多時(shí)間滑窗的存儲結(jié)構(gòu)中的多個(gè)列族中每個(gè)列族為一個(gè)廣告位對應(yīng)的用戶行為的數(shù)據(jù),此時(shí),每個(gè)列族的關(guān)鍵字為廣告位標(biāo)識,關(guān)鍵字對應(yīng)的值具體可以如圖8所示:每個(gè)列族包括的多對列關(guān)鍵字和列值中,關(guān)鍵字為各個(gè)用戶標(biāo)識(比如圖8中的用戶標(biāo)識I和2);每個(gè)列值包括的多對指標(biāo)關(guān)鍵字和時(shí)間槽中,指標(biāo)關(guān)鍵字為用戶行為標(biāo)識(比如圖8中的用戶曝光和用戶點(diǎn)贊),時(shí)間槽內(nèi)儲存著對應(yīng)時(shí)間窗內(nèi)的指標(biāo)數(shù)。在這種情況下,維度的信息可以為廣告位。
[0074]進(jìn)一步地,上述圖6到圖8所示的多時(shí)間滑窗的存儲結(jié)構(gòu)是4層結(jié)構(gòu),在其它具體實(shí)施例中,多時(shí)間滑窗的存儲結(jié)構(gòu)也可以是小于4層的結(jié)構(gòu),如圖9所示,如果廣告系統(tǒng)想要統(tǒng)計(jì)一個(gè)廣告位上用戶行為的數(shù)據(jù),則滑窗存儲模塊中多時(shí)間滑窗的存儲結(jié)構(gòu)中的多個(gè)列族中每個(gè)列族為一個(gè)廣告位對應(yīng)的用戶行為的數(shù)據(jù),此時(shí),每個(gè)列族中包括多對指標(biāo)關(guān)鍵字和時(shí)間槽,指標(biāo)關(guān)鍵字為用戶行為標(biāo)識(比如圖9中的用戶曝光和用戶點(diǎn)贊),時(shí)間槽內(nèi)儲存著對應(yīng)時(shí)間窗內(nèi)的指標(biāo)數(shù)。在這種情況下,維度