本申請涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別是涉及一種行為記錄的存儲方法和設(shè)備。
背景技術(shù):
滑動規(guī)則在引擎中支持類SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)語句,滑動規(guī)則是商家設(shè)定的查詢規(guī)則,用于查詢哪些用戶是自己想要的用戶,或哪些用戶是潛在用戶,滑動規(guī)則對指定的行為記錄有一定的要求,并且要求行為記錄還要滿足設(shè)定的時間窗口的限制,例如:距離當(dāng)前時間前30分鐘,交易筆數(shù)大于2的用戶有哪些。
現(xiàn)有根據(jù)滑動規(guī)則確定用戶的方案使用流計算系統(tǒng)實現(xiàn)的,具體的,利用用戶的消息更新來驅(qū)動對滑動規(guī)則的計算,一條滑動規(guī)則對應(yīng)一個進程,計算的中間結(jié)果寫入到持久化存儲中,最終的結(jié)果通過用戶自定義的輸出接口輸出到指定終端。
在實現(xiàn)本申請的過程中,申請人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:
由于用戶的滑動規(guī)則是存儲在不同的設(shè)備上的,在進行行為記錄查詢時,多個的行為記錄是分開進行查詢的,在查詢完所有滑動規(guī)則對應(yīng)的用戶后再進行統(tǒng)計并發(fā)送給用戶,整個計算到輸出結(jié)果耗時比較高,通常在秒級和分鐘級,不能滿足時間要求較高的業(yè)務(wù),同時,上述方法提供的查詢方式只能滿足G2U(Group to Users,一種查詢方式,通過滑動規(guī)則查詢滿足此滑動規(guī)則的所有用戶)的查詢方式,查詢方式比較簡單。
技術(shù)實現(xiàn)要素:
本申請的目的在于提供一種行為記錄的存儲方法和設(shè)備,通過將用戶的行為記錄存儲在服務(wù)器中的不同存儲單元中,在進行行為記錄查詢時,多個行為記錄可以同時進行查詢,使查找時間限定在毫秒之內(nèi),縮短了整個計算 到輸出結(jié)果的耗時,同時,本申請中提出的存儲方法不僅能夠滿足G2U的查詢方式,還可以滿足U2G的查詢方式。
本申請的技術(shù)方案如下:
一種行為記錄的存儲方法,服務(wù)器包括多個存儲單元,所述方法包括:
所述服務(wù)器獲取用戶的行為記錄和用戶ID;
所述服務(wù)器根據(jù)所述用戶ID確定對應(yīng)的存儲單元;
所述服務(wù)器將所述行為記錄存儲在對應(yīng)的存儲單元中,以使所述服務(wù)器在接收到查詢請求時在對應(yīng)的存儲單元中進行查詢。
所述服務(wù)器將所述行為記錄存儲在對應(yīng)的存儲單元中,具體為:
所述服務(wù)器根據(jù)所述行為記錄中的所述用戶的行為信息確定對應(yīng)的存儲單元中所述行為記錄對應(yīng)行為記錄列表;
所述服務(wù)器根據(jù)所述用戶ID確定所述行為記錄列表中所述用戶對應(yīng)的行為記錄隊列;
所述服務(wù)器將所述行為記錄存儲在所述行為記錄隊列中。
在所述服務(wù)器將所述行為記錄存儲在對應(yīng)的存儲單元中之前,所述方法包括:
所述服務(wù)器根據(jù)所述行為記錄判斷所述存儲單元中是否存在所述行為記錄對應(yīng)的行為記錄列表;
如果不存在,所述服務(wù)器為所述行為記錄建立對應(yīng)的行為記錄列表;
所述服務(wù)器根據(jù)所述行為記錄在所述行為記錄列表中為所述用戶建立對應(yīng)的行為記錄隊列。
當(dāng)所述服務(wù)器判斷一個用戶滿足的滑動規(guī)則時,所述方法包括:
所述服務(wù)器確定所述用戶ID所在的存儲單元;
所述服務(wù)器確定所述存儲單元中所述用戶ID對應(yīng)的行為記錄列表;
所述服務(wù)器根據(jù)所述行為記錄列表確定所述用戶ID滿足的滑動規(guī)則,以使所述服務(wù)器將所述用戶ID推薦給滑動規(guī)則對應(yīng)的發(fā)布用戶。
當(dāng)所述服務(wù)器判斷滿足一個滑動規(guī)則的用戶時,所述方法還包括:
所述服務(wù)器確定所述多個存儲單元中滿足所述滑動規(guī)則中的用戶行為的 行為記錄列表;
所述服務(wù)器確定所述行為記錄列表中都存在的用戶對應(yīng)的行為記錄隊列;
所述服務(wù)器根據(jù)所述行為記錄隊列確定滿足所述滑動規(guī)則中設(shè)定的時間段的用戶ID;
所述服務(wù)器將確定的用戶ID推薦給所述滑動規(guī)則的發(fā)布用戶。
在所述服務(wù)器根據(jù)所述用戶ID確定對應(yīng)的存儲單元之后,所述方法還包括:
所述服務(wù)器判斷所述存儲單元中的用戶分組隊列中是否存在所述用戶ID;
如果不存在,所述服務(wù)器將所述用戶ID存儲在對應(yīng)的存儲單元中的用戶分組隊列中,以使所述服務(wù)器在進行滑動規(guī)則進行查詢時確定用戶對應(yīng)的存儲單元;
所述用戶分組隊列是在所述服務(wù)器進行行為記錄查詢時用戶分組列表中任一沒有被使用的用戶分組隊列。
一種服務(wù)器,服務(wù)器包括多個存儲單元,所述服務(wù)器包括:
獲取模塊,用于獲取用戶的行為記錄和用戶ID;
第一確定模塊,用于根據(jù)所述用戶ID確定對應(yīng)的存儲單元;
存儲模塊,用于將所述行為記錄存儲在對應(yīng)的存儲單元中,以使所述服務(wù)器在接收到查詢請求時在對應(yīng)的存儲單元中進行查詢。
所述存儲模塊具體用于:
根據(jù)所述行為記錄中的所述用戶的行為信息確定對應(yīng)的存儲單元中所述行為記錄對應(yīng)行為記錄列表;
根據(jù)所述用戶ID確定所述行為記錄列表中所述用戶對應(yīng)的行為記錄隊列;
將所述行為記錄存儲在所述行為記錄隊列中。
所述服務(wù)器還包括:
第一判斷模塊,在所述存儲模塊將所述行為記錄存儲在對應(yīng)的存儲單元 中之前,用于根據(jù)所述行為記錄判斷所述存儲單元中是否存在所述行為記錄對應(yīng)的行為記錄列表;
第一建立模塊,如果存儲單元中不存在所述行為記錄對應(yīng)的行為記錄列表,用于為所述行為記錄建立對應(yīng)的行為記錄列表;
第二建立模塊,用于根據(jù)所述行為記錄在所述行為記錄列表中為所述用戶建立對應(yīng)的行為記錄隊列。
所述第一確定模塊還具體用于:
當(dāng)所述服務(wù)器判斷一個用戶滿足的滑動規(guī)則時,確定所述用戶ID所在的存儲單元;
所述服務(wù)器還包括:
第二確定模塊,用于確定所述存儲單元中所述用戶ID對應(yīng)的行為記錄列表;
第三確定模塊,用于根據(jù)所述行為記錄列表確定所述用戶ID滿足的滑動規(guī)則,以使所述服務(wù)器將所述用戶ID推薦給滑動規(guī)則對應(yīng)的發(fā)布用戶。
所述服務(wù)器還包括:
第三確定模塊,當(dāng)所述服務(wù)器判斷滿足一個滑動規(guī)則的用戶時,用于確定所述多個存儲單元中滿足所述滑動規(guī)則中的用戶行為的行為記錄列表;
第四確定模塊,用于確定所述行為記錄列表中都存在的用戶對應(yīng)的行為記錄隊列;
第五確定模塊,用于根據(jù)所述行為記錄隊列確定滿足所述滑動規(guī)則中設(shè)定的時間段的用戶ID;
發(fā)送模塊,用于將確定的用戶ID推薦給所述滑動規(guī)則的發(fā)布用戶。
所述服務(wù)器還包括:
第二判斷模塊,在所述第一確定模塊根據(jù)所述用戶ID確定對應(yīng)的存儲單元之后,用于判斷所述存儲單元中的用戶分組隊列中是否存在所述用戶ID;
所述存儲模塊,如果所述存儲單元中的用戶分組隊列中不存在所述用戶ID,還用于將所述用戶ID存儲在對應(yīng)的存儲單元中的用戶分組隊列中,以使所述服務(wù)器在進行滑動規(guī)則進行查詢時確定用戶對應(yīng)的存儲單元;
所述用戶分組隊列是在所述服務(wù)器進行行為記錄查詢時用戶分組列表中任一沒有被使用的用戶分組隊列。
本申請通過將用戶的行為記錄存儲在服務(wù)器中的不同存儲單元中,在進行行為記錄查詢時,多個行為記錄可以同時進行查詢,使查找時間限定在毫秒之內(nèi),縮短了整個計算到輸出結(jié)果的耗時,同時,本申請中提出的存儲方法不僅能夠滿足G2U的查詢方式,還可以滿足U2G的查詢方式。
附圖說明
為了更清楚地說明本申請或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對本申請或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本申請實施例中的一種行為記錄的存儲方法流程圖;
圖2為本申請實施例中的一種行為記錄列表的存儲結(jié)構(gòu)示意圖;
圖3為本申請實施例中的一種用戶分組隊列的存儲結(jié)構(gòu)示意圖;
圖4為本申請實施例中的一種服務(wù)器的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本申請中的附圖,對本申請中的技術(shù)方案進行清楚、完整的描述,顯然,所描述的實施例是本申請的一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員獲得的其他實施例,都屬于本申請保護的范圍。
一種行為記錄的存儲方法,如圖1所示,所述服務(wù)器包括多個存儲單元,所述方法包括以下步驟:
步驟101,所述服務(wù)器獲取用戶的行為記錄和用戶ID(Identity,身份標(biāo)識號碼)。
其中,所述存儲單元中可以包括多個鏡像存儲子單元,每個鏡像存儲子單元中存儲有相同的行為記錄,且具有相同的服務(wù)功能。
具體的,為了提高服務(wù)器的可靠性,可以將服務(wù)器中的存儲單元劃分為多個鏡像存儲子單元,每一個存儲單元都有鏡像存儲子單元來提供服務(wù),行為記錄在進行存儲時,將所述行為記錄存儲在一個存儲子單元中的所有鏡像存儲子單元中,即同一個存儲子單元中的多個鏡像存儲子單元具有相同的存儲數(shù)據(jù),可以提供相同的服務(wù),因此如果一個存儲子單元中的一個鏡像存儲子單元出現(xiàn)問題,所述存儲子單元中的其他鏡像子單元可以提供相同的服務(wù),同時,所述多個鏡像子單元可以同時處理多個任務(wù),還可以為一個任務(wù)同時提供服務(wù)。
所述行為記錄中至少包括:所述用戶的行為信息、所述用戶的行為時間。行為記錄中記錄了用戶在某個時間點或時間段做了什么事情,以某用戶在凌晨1點花了100元買了一罐奶粉為例,該事件的行為信息可以包括:產(chǎn)生了一次購物(用戶的購物次數(shù)增加了一次)、買了一罐奶粉、花費了100元,該事件產(chǎn)生的行為記錄可以為:該用戶在凌晨1點花費了100元、該用戶在凌晨1點進行了一次購物和該用戶在凌晨1點購買了一罐奶粉,當(dāng)用戶在進行某個事件時產(chǎn)生了對應(yīng)的行為記錄時,所述服務(wù)器會根據(jù)預(yù)先設(shè)定的需要統(tǒng)計的行為內(nèi)容對產(chǎn)生的行為記錄生成對應(yīng)的行為記錄信息,當(dāng)用戶根據(jù)一個行為記錄產(chǎn)生了一個行為記錄信息時就會對所述行為記錄進行存儲,當(dāng)然如果設(shè)定需要統(tǒng)計消費次數(shù),該事件對應(yīng)的行為信息還包括:產(chǎn)生了一次消費(用戶的消費次數(shù)增加了一次),對應(yīng)的行為記錄為:該用戶在凌晨1點進行了一次消費,獲取的行為信息可以根據(jù)預(yù)先設(shè)定的規(guī)則進行獲取,即需要獲取哪些行為信息對應(yīng)的行為記錄。
步驟102,所述服務(wù)器根據(jù)所述用戶ID確定對應(yīng)的存儲單元。
具體的,所述服務(wù)器可以根據(jù)預(yù)先設(shè)定的規(guī)則確定所述用戶ID對應(yīng)的存儲單元,例如:將用戶ID尾號為1的存儲在1號存儲單元中。
由于用戶ID數(shù)目一般非常龐大,為了支撐如此龐大的用戶數(shù)以及用戶對應(yīng)的行為記錄,將所述服務(wù)器劃分為多個存儲單元,根據(jù)用戶ID來分別存儲不同用戶及其用戶對應(yīng)的行為記錄,這樣可以在所述服務(wù)器提供查詢服務(wù)時有效的保證系統(tǒng)的負載,從而使得查詢請求在毫秒級響應(yīng)得到保證。在進行 查詢請求時,每個存儲單元只處理自身所負責(zé)的用戶的行為記錄的計算,如果滑動規(guī)則沒有關(guān)聯(lián)到某個存儲單元,那么所述存儲單元不需要提供服務(wù)。
步驟103,所述服務(wù)器將所述行為記錄存儲在對應(yīng)的存儲單元中,以使所述服務(wù)器在接收到查詢請求時在對應(yīng)的存儲單元中進行查詢。
由于不同用戶對應(yīng)的行為記錄存儲在所述服務(wù)器中的不同存儲單元中,一個存儲單元可以根據(jù)其存儲的用于對應(yīng)的行為記錄判斷其存儲的用戶滿足哪些滑動規(guī)則,即一個存儲單元只針對一部分用戶來進行滑動規(guī)則的計算,那么多個存儲單元可以快速的完成針對所有用戶的滑動規(guī)則的計算,并且,由于每個存儲單元中可以劃分成多個鏡像存儲子單元,且每個鏡像存儲子單元都可以提供完整的服務(wù),因此每個鏡像子單元可以對滑動規(guī)則的計算任務(wù)進行負載分擔(dān),快速完成滑動規(guī)則的計算,例如:在進行G2U的查詢方式計算滑動規(guī)則時,所述服務(wù)器中的存儲單元分別計算自身存儲的用戶對應(yīng)的行為記錄,多個存儲單元來共同完成整個用戶針對此滑動規(guī)則的計算,在進行U2G(User to Groups,一種查詢方式,通過給定用戶ID查詢所述用戶ID滿足的所有滑動規(guī)則)的查詢方式計算滑動規(guī)則時,存儲該用戶的存儲單元的每個鏡像存儲子單元同時對該用戶對應(yīng)的行為記錄進行計算,可以快速確定出該用戶滿足哪些滑動規(guī)則,由于每個鏡像存儲子單元都具有完成的功能,因此還可以保證系統(tǒng)的穩(wěn)定性。
所述服務(wù)器將所述行為記錄存儲在對應(yīng)的存儲單元中,具體為:
所述服務(wù)器根據(jù)所述行為記錄中的所述用戶的行為信息確定對應(yīng)的存儲單元中所述行為記錄對應(yīng)的行為記錄列表;
所述服務(wù)器根據(jù)所述用戶ID確定所述行為記錄列表中所述用戶對應(yīng)的行為記錄隊列;
所述服務(wù)器將所述行為記錄存儲在所述行為記錄隊列中。
具體的,所述服務(wù)器對不同行為信息對應(yīng)行為記錄存儲在不同的行為記錄列表中,以某用戶在凌晨1點花了100元買了一罐奶粉產(chǎn)生的3個行為記錄為例,這3中行為記錄對應(yīng)的行為信息分別為:產(chǎn)生了一次購物,購買了一罐奶粉和花費了100元,這3個行為信息是同一個用戶在一個事件中產(chǎn)生 的,由于服務(wù)器對行為記錄是按行為信息進行存儲的,因此將這3個行為信息對應(yīng)的行為記錄分別存儲在3個行為記錄列表中,這3個行為記錄列表分別為:購物行為記錄列表、花費金額行為記錄列表和買奶粉行為記錄列表,當(dāng)其他用戶也在某時間產(chǎn)生了相應(yīng)的行為信息,所述服務(wù)器會將行為信息對應(yīng)的行為記錄存儲在對應(yīng)的行為記錄列表中,例如:某個用戶在下午1點花費了80元買了一罐奶粉,所述服務(wù)器會將該用戶產(chǎn)生的3個行為記錄存儲在上述3個行為記錄列表中,如果某個用戶在下午1點花費了80買了一件衣服,那么所述服務(wù)器會將該用戶產(chǎn)生的一次消費和購物對應(yīng)的行為記錄分別存儲在購物行為記錄列表、花費金額行為記錄列表,而該用戶產(chǎn)生的行為信息:買衣服,存儲在買衣服行為記錄列表中,即所述服務(wù)器的存儲單元對應(yīng)的所有用戶產(chǎn)生的同一行為信息對應(yīng)的行為記錄都會存在同一個行為記錄列表中。
行為信息列表中的對行為記錄的存儲方式具體如圖2所示,以買奶粉行為記錄列表為例,圖2中存儲的是所述服務(wù)器某個存儲單元對應(yīng)的所有用戶產(chǎn)生買奶粉的行為記錄,所述行為列表中包括多個行為記錄隊列,每個行為記錄隊列記錄的是一個用戶在不同時間發(fā)生的買奶粉的行為信息,以userid1為例,userid1的行為記錄隊列中記錄的是userid1在不同時間買奶粉的行為信息,userid1的行為記錄隊列中有3個Node節(jié)點,表示userid1在3個時間點發(fā)生了買奶粉的行為記錄,一個Node節(jié)點都表示userid1發(fā)生一次買奶粉的行為,不同的Node節(jié)點對應(yīng)userid1買奶粉的不同時間,一個隊列中的Node節(jié)點是根據(jù)一定的時間順序進行排列的。根據(jù)所述行為記錄列表可以確定發(fā)生哪些用戶發(fā)生過買奶粉的行為記錄,還可以根據(jù)用戶的所述行為記錄隊列確定用戶每次發(fā)生買奶粉的行為記錄的時間,同時,還可以根據(jù)所述行為記錄隊列中Node節(jié)點的個數(shù)確定不同用戶發(fā)生買奶粉行為的次數(shù)。
在用戶產(chǎn)生了一個行為記錄時,所述服務(wù)器需要將所述行為記錄存儲在對應(yīng)的存儲單元中,所述存儲單元需要確定所述行為記錄對應(yīng)的行為記錄列表和產(chǎn)生所述行為記錄的用于對應(yīng)的行為記錄隊列,并進行存儲,例如:如果所述用戶產(chǎn)生的行為記錄為買奶粉,那么所述存儲單元需要將所述行為記 錄存儲在買奶粉行為記錄列表中,在確定出行為記錄對應(yīng)的行為記錄列表后,還需要確定出產(chǎn)生所述行為記錄的用戶對應(yīng)的行為記錄隊列,如圖2所示,如果所述行為記錄是userid1產(chǎn)生的,那么需要在userid1的行為記錄隊列中建立一個Node節(jié)點,該Node節(jié)點用戶存儲所述行為記錄。
其中,行為記錄隊列中不同的Node節(jié)點是按行為記錄的產(chǎn)生的時間進行排序的,這樣在根據(jù)滑動規(guī)則進行計算時可以快速確定出滿足所述滑動規(guī)則對應(yīng)的時間。
在所述服務(wù)器將所述行為記錄存儲在對應(yīng)的存儲單元中之前,所述方法包括:
所述服務(wù)器根據(jù)所述行為記錄判斷所述存儲單元中是否存在所述行為記錄對應(yīng)的行為記錄列表;
如果不存在,所述服務(wù)器為所述行為記錄建立對應(yīng)的行為記錄列表;
所述服務(wù)器根據(jù)所述行為記錄在所述行為記錄列表中為所述用戶建立對應(yīng)的行為記錄隊列。
在確定出行為記錄對應(yīng)的用戶所在的存儲單元后,還要確定出所述存儲單元中是否存在所述行為記錄列表,如果所述行為記錄中的行為信息是一種新的行為信息,那么所述存儲單元中之前不可能存在所述行為記錄對應(yīng)的行為記錄列表,因此,需要為所述行為記錄對應(yīng)的行為建立行為記錄列表,并將所述行為記錄中建立所述行為記錄對應(yīng)用戶的行為記錄隊列,然后將所述行為記錄存儲在所述行為記錄隊列中。
在所述服務(wù)器根據(jù)所述用戶ID確定對應(yīng)的存儲單元之后,所述方法還包括:
所述服務(wù)器判斷所述存儲單元中的用戶分組隊列中是否存在所述用戶ID;
如果不存在,所述服務(wù)器將所述用戶ID存儲在對應(yīng)的存儲單元中的用戶分組隊列中,以使所述服務(wù)器在根據(jù)滑動規(guī)則進行查詢時確定用戶對應(yīng)的存儲單元;
所述用戶分組隊列是在所述服務(wù)器進行行為記錄查詢時用戶分組列表中 任一沒有被使用的用戶分組隊列。
所述服務(wù)器的不同存儲單元獲取不同用戶產(chǎn)生行為記錄,并進行存儲,所述存儲單元中存儲有其對應(yīng)的用戶,如果用戶的行為記錄存儲在了所述存儲單元中,那么表示所述用戶屬于所述存儲單元,需要對用戶的ID進行存儲,以便所述存儲設(shè)備快速確定出其對應(yīng)哪些用戶,具體的,所述用戶ID存儲在如圖3所示的用戶分組隊列中,每個存儲單元中有若干個用戶分組隊列,用于存儲所述存儲單元對應(yīng)的用戶ID,在存儲單元接收到其對應(yīng)的用戶ID后,先要判斷所述存儲單元中是否已經(jīng)存在所述用戶ID,如果存在,表明所述用戶ID已經(jīng)在所述存儲單元中建立過對應(yīng)的行為記錄隊列,如果不存在,表明所述用戶ID是第一次在其對應(yīng)的存儲單元中建立行為記錄隊列,需要將所述用戶ID存儲在所述存儲單元中,由于服務(wù)器中的存儲單元隨時都可能處于服務(wù)狀態(tài),在存儲單元處于服務(wù)狀態(tài)時需要查詢其存儲的用戶ID,以便查詢所述用戶ID對應(yīng)的行為記錄列表和行為記錄隊列,如果此時在所述存儲單元中添加用戶ID,會對所述存儲單元的穩(wěn)定性造成影響,以及對所述存儲單元的處理速度造成影響,將存儲單元對應(yīng)的用戶ID分成若干組,在添加用戶ID時,在沒有被使用的用戶分組隊列中進行添加,這樣就不會對所述存儲單元的穩(wěn)定性和處理速度造成影響,例如:如果當(dāng)前存儲單元正在調(diào)用userid1,即所述存儲單元正在使用用戶分組隊列block1,所述存儲單元在用戶分組隊列中添加一個新的用戶ID時,可以在除block1之外的其他沒有使用的隊列中添加,如:block2。
行為記錄和用戶ID的存儲結(jié)構(gòu)是基于內(nèi)存進行的,因此當(dāng)服務(wù)器發(fā)生宕機或者程序發(fā)生crash(程序異常終止)之后是需要進行數(shù)據(jù)恢復(fù)的,所述服務(wù)器根據(jù)預(yù)先設(shè)定的時間定期dump(備份文件系統(tǒng))內(nèi)存中存儲的行為記錄和用戶ID到服務(wù)器中發(fā)生宕機或者程序發(fā)生crash時不會丟失的存儲空間內(nèi),或其他外部存儲器中,同時還要記錄消息更新的當(dāng)前offset(一種函數(shù),用于以指定的引用為參照系,通過給定偏移量得到新的引用),當(dāng)服務(wù)器發(fā)生宕機或者程序發(fā)生crash時,服務(wù)器可以獲取其存儲空間或外部存儲器中的數(shù)據(jù)進行數(shù)據(jù)恢復(fù),同時,消息消費從記錄的offset繼續(xù)消費,從而避免 服務(wù)器發(fā)生宕機或者程序發(fā)生crash時引起的數(shù)據(jù)恢復(fù)的問題。
由于服務(wù)器中的數(shù)據(jù)的時間長度是有限的,一般是數(shù)據(jù)接入的時候就通過數(shù)據(jù)庫指定好的,服務(wù)器需要對超過期限的數(shù)據(jù)進行GC(一種回收機制)處理,這樣一方面有效的節(jié)省了內(nèi)存,使得服務(wù)器中的存儲單元中能存儲更多的數(shù)據(jù),另一方面,及時的把過期數(shù)據(jù)進行GC掉,可以加速規(guī)則計算時的速度。其中GC方案有兩種,一種為:每次進行數(shù)據(jù)備份的時候,進行一次全量GC;另外一種為:使用GC管理器,在服務(wù)器低負載時觸發(fā)GC任務(wù),這樣能有效的減少GC對在線查詢的干擾。
當(dāng)所述服務(wù)器判斷一個用戶滿足的滑動規(guī)則時,所述方法包括:
所述服務(wù)器確定所述用戶ID所在的存儲單元;
所述服務(wù)器確定所述存儲單元中所述用戶ID對應(yīng)的行為記錄列表;
所述服務(wù)器根據(jù)所述行為記錄列表確定所述用戶ID滿足的滑動規(guī)則,以使所述服務(wù)器將所述用戶ID推薦給滑動規(guī)則對應(yīng)的發(fā)布用戶。
具體的,服務(wù)器在進行U2G時,即所述服務(wù)器判斷一個用戶滿足哪些滑動規(guī)則時,所述服務(wù)器需要先定位所述用戶ID對應(yīng)的存儲單元,并可以確定出所述存儲單元中的一個鏡像存儲子單元進行此次U2G的查詢,在定位所述用戶ID對應(yīng)的存儲單元時具體是通過存儲單元中的用戶分組列表確定存儲單元的,在確定出鏡像存儲子單元后,所述鏡像存儲子單元中存儲有所述用戶ID對應(yīng)的行為記錄列表確定所述用戶滿足哪些行為記錄,具體的,所述鏡像存儲子單元在確定出所述用戶ID對應(yīng)的行為記錄后,根據(jù)所述行為記錄中的時間和行為信息與滑動規(guī)則中設(shè)定的時間和行為信息進行對比判斷所述用戶ID對應(yīng)的行為記錄都滿足哪些滑動規(guī)則,并將返回查詢結(jié)果。
當(dāng)所述服務(wù)器判斷滿足一個滑動規(guī)則的用戶時,所述方法還包括:
所述服務(wù)器確定所述多個存儲單元中滿足所述滑動規(guī)則中的用戶行為的行為記錄列表;
所述服務(wù)器確定所述行為記錄列表中都存在的用戶對應(yīng)的行為記錄隊列;
所述服務(wù)器根據(jù)所述行為記錄隊列確定滿足所述滑動規(guī)則中設(shè)定的時間 段的用戶ID;
所述服務(wù)器將確定的用戶ID推薦給所述滑動規(guī)則的發(fā)布用戶。
具體的,服務(wù)器在進行G2U時,即所述服務(wù)器判斷滿足一個滑動規(guī)則的用戶時,所述服務(wù)器接收給定的滑動規(guī)則,所述服務(wù)器確定每個存儲單元中提供查詢服務(wù)的鏡像存儲子單元,所述服務(wù)器將所述滑動規(guī)則發(fā)送到確定出的鏡像存儲子單元中,使用所述鏡像存儲子單元根據(jù)所述滑動規(guī)則進行查詢服務(wù),在所述鏡像存儲子單元接收到所述滑動規(guī)則時,確定所述鏡像存儲子單元中存儲的滿足所述滑動規(guī)則中的用戶行為的行為記錄列表,然后在確定出所述行為記錄列表中都存在的用戶所對應(yīng)的行為記錄隊列(因為用戶產(chǎn)生的行為記錄存儲在不同的行為記錄列表中,只有用戶產(chǎn)生的行為記錄所在的行為記錄列表都滿足所述滑動規(guī)則中的行為信息是所述用戶才可能是滿足所述滑動規(guī)則的用戶),此時確定出的用戶所對應(yīng)的行為記錄隊列是可能滿足所述滑動規(guī)則的隊列,所述鏡像存儲子單元再根據(jù)所述滑動規(guī)則中行為對應(yīng)的時間確定所述滑動規(guī)則隊列中滿足所述滑動規(guī)則的用戶ID,并返回查詢結(jié)果。
本申請通過將用戶的行為記錄存儲在服務(wù)器中的不同存儲單元中,在進行行為記錄查詢時,多個行為記錄可以同時進行查詢,使查找時間限定在毫秒之內(nèi),縮短了整個計算到輸出結(jié)果的耗時,同時,本申請中提出的存儲方法不僅能夠滿足G2U的查詢方式,還可以滿足U2G的查詢方式。
基于與上述方法同樣的申請構(gòu)思,本申請還提出了一種服務(wù)器,如圖4所述,服務(wù)器包括多個存儲單元,所述服務(wù)器包括:
獲取模塊41,用于獲取用戶的行為記錄和用戶ID;
第一確定模塊42,用于根據(jù)所述用戶ID確定對應(yīng)的存儲單元;
存儲模塊43,用于將所述行為記錄存儲在對應(yīng)的存儲單元中,以使所述服務(wù)器在接收到查詢請求時在對應(yīng)的存儲單元中進行查詢。
所述存儲模塊具體用于:
根據(jù)所述行為記錄中的所述用戶的行為信息確定對應(yīng)的存儲單元中所述行為記錄對應(yīng)行為記錄列表;
根據(jù)所述用戶ID確定所述行為記錄列表中所述用戶對應(yīng)的行為記錄隊列;
將所述行為記錄存儲在所述行為記錄隊列中。
所述服務(wù)器還包括:
第一判斷模塊,在所述存儲模塊將所述行為記錄存儲在對應(yīng)的存儲單元中之前,用于根據(jù)所述行為記錄判斷所述存儲單元中是否存在所述行為記錄對應(yīng)的行為記錄列表;
第一建立模塊,如果存儲單元中不存在所述行為記錄對應(yīng)的行為記錄列表,用于為所述行為記錄建立對應(yīng)的行為記錄列表;
第二建立模塊,用于根據(jù)所述行為記錄在所述行為記錄列表中為所述用戶建立對應(yīng)的行為記錄隊列。
所述第一確定模塊還具體用于:
當(dāng)所述服務(wù)器判斷一個用戶滿足的滑動規(guī)則時,確定所述用戶ID所在的存儲單元;
所述服務(wù)器還包括:
第二確定模塊,用于確定所述存儲單元中所述用戶ID對應(yīng)的行為記錄列表;
第三確定模塊,用于根據(jù)所述行為記錄列表確定所述用戶ID滿足的滑動規(guī)則,以使所述服務(wù)器將所述用戶ID推薦給滑動規(guī)則對應(yīng)的發(fā)布用戶。
所述服務(wù)器還包括:
第三確定模塊,當(dāng)所述服務(wù)器判斷滿足一個滑動規(guī)則的用戶時,用于確定所述多個存儲單元中滿足所述滑動規(guī)則中的用戶行為的行為記錄列表;
第四確定模塊,用于確定所述行為記錄列表中都存在的用戶對應(yīng)的行為記錄隊列;
第五確定模塊,用于根據(jù)所述行為記錄隊列確定滿足所述滑動規(guī)則中設(shè)定的時間段的用戶ID;
發(fā)送模塊,用于將確定的用戶ID推薦給所述滑動規(guī)則的發(fā)布用戶。
所述服務(wù)器還包括:
第二判斷模塊,在所述第一確定模塊根據(jù)所述用戶ID確定對應(yīng)的存儲單元之后,用于判斷所述存儲單元中的用戶分組隊列中是否存在所述用戶ID;
所述存儲模塊,如果所述存儲單元中的用戶分組隊列中不存在所述用戶ID,還用于將所述用戶ID存儲在對應(yīng)的存儲單元中的用戶分組隊列中,以使所述服務(wù)器在進行滑動規(guī)則進行查詢時確定用戶對應(yīng)的存儲單元;
所述用戶分組隊列是在所述服務(wù)器進行行為記錄查詢時用戶分組列表中任一沒有被使用的用戶分組隊列。
本申請通過將用戶的行為記錄存儲在服務(wù)器中的不同存儲單元中,在進行行為記錄查詢時,多個行為記錄可以同時進行查詢,使查找時間限定在毫秒之內(nèi),縮短了整個計算到輸出結(jié)果的耗時,同時,本申請中提出的存儲方法不僅能夠滿足G2U的查詢方式,還可以滿足U2G的查詢方式。
通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個實施例所述的方法。
以上所述僅是本申請的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本申請原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視本申請的保護范圍。
本領(lǐng)域技術(shù)人員可以理解實施例中的裝置中的模塊可以按照實施例描述進行分布于實施例的裝置中,也可以進行相應(yīng)變化位于不同于本實施例的一個或多個裝置中。上述實施例的模塊可以集成于一體,也可以分離部署;可以合并為一個模塊,也可以進一步拆分成多個子模塊。上述本申請實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
以上公開的僅為本申請的幾個具體實施例,但是,本申請并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本申請的保護范圍。