欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

記錄網(wǎng)絡(luò)用戶行為數(shù)據(jù)的方法及其裝置、計算機(jī)可讀介質(zhì)與流程

文檔序號:11407370閱讀:630來源:國知局
記錄網(wǎng)絡(luò)用戶行為數(shù)據(jù)的方法及其裝置、計算機(jī)可讀介質(zhì)與流程

本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種記錄網(wǎng)絡(luò)用戶行為數(shù)據(jù)的方法及其裝置、計算機(jī)可讀介質(zhì)。



背景技術(shù):

隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,各種網(wǎng)站或網(wǎng)絡(luò)應(yīng)用也如雨后春筍般涌現(xiàn)。在網(wǎng)絡(luò)業(yè)務(wù)領(lǐng)域,記錄網(wǎng)絡(luò)(web)用戶的操作行為,并對這些數(shù)據(jù)進(jìn)行分析,可以讓企業(yè)更加詳細(xì)、清楚地了解用戶的行為習(xí)慣,從而找出網(wǎng)站、推廣渠道等企業(yè)營銷環(huán)境存在的問題,有助于企業(yè)發(fā)掘頁面轉(zhuǎn)化率,讓企業(yè)的營銷更加精準(zhǔn)、有效,提高業(yè)務(wù)轉(zhuǎn)化率,從而提升企業(yè)的廣告收益。為了更好地掌握和分析網(wǎng)絡(luò)(web)用戶對網(wǎng)站以及網(wǎng)站中的網(wǎng)頁訪問的情況,需要執(zhí)行網(wǎng)站分析(webanalytics)。網(wǎng)站分析是指通過分析網(wǎng)絡(luò)(web)用戶對網(wǎng)頁訪問的行為來提供一系列分析結(jié)果,利用所提供的分析結(jié)果可以方便并直觀地了解網(wǎng)絡(luò)(web)用戶對網(wǎng)頁訪問的趨勢。具體地,分析結(jié)果可能包括提供了訪問者在網(wǎng)站內(nèi)部的網(wǎng)頁訪問順序的點擊路徑信息,利用此種信息網(wǎng)站技術(shù)人員可以更好地組織并調(diào)整網(wǎng)站內(nèi)部的網(wǎng)頁結(jié)構(gòu)和內(nèi)容安排。

網(wǎng)絡(luò)(web)用戶行為分析一般包括數(shù)據(jù)采集和數(shù)據(jù)分析:

其中,數(shù)據(jù)采集就是獲取web用戶行為數(shù)據(jù)的過程,對于網(wǎng)站來說,自動獲取用戶行為數(shù)據(jù)最常用的方法就是基于服務(wù)器日志的方法(serverlog),就是通過web服務(wù)器所產(chǎn)生的日志文件來獲取有用的數(shù)據(jù),通常情況下日志文件中存在著大量與用戶行為分析無關(guān)的冗余數(shù)據(jù),如何從這些海量的數(shù)據(jù)中提煉出與用戶行為分析是非常關(guān)鍵的一步,因此需要對日志文件進(jìn)行預(yù)處理,然后進(jìn)行分析,目前最重要的技術(shù)就是web日志的挖掘。但是,很多關(guān)于用戶行為分析有價值的數(shù)據(jù)難以從日志文件中獲取,因此,為了進(jìn)一步獲取關(guān)于用戶行為有價值的數(shù)據(jù),逐漸產(chǎn)生了從客戶端直接獲取用戶與網(wǎng)站之間交互情況的行為數(shù)據(jù)的方法,主要包括基于瀏覽器的方法、基于網(wǎng)站的方法以及基于代理的方法,其中,基于瀏覽器的方法是由用戶使用所開發(fā)的客戶端程序去瀏覽網(wǎng)站,通常情況下是對已有的瀏覽器進(jìn)行定制,例如ie,navigator,也可以是其他的瀏覽器,然后利用開發(fā)的客戶端程序獲得用戶與網(wǎng)站交互的行為數(shù)據(jù)并把數(shù)據(jù)傳回到服務(wù)器端?;诰W(wǎng)站的方法是通過被測試的服務(wù)器端安裝組件,這一組件的功能就是對用戶要訪問的網(wǎng)頁的html代碼中自動插入事件處理腳本程序,而且插入的代碼是javascript腳本,因此,對于當(dāng)前主流的瀏覽器均能夠獲得支持?;诖淼姆椒ㄊ窃跍y試用戶的客戶端和被測試的服務(wù)器之間架設(shè)一代理服務(wù)器,代理服務(wù)器用來完成被測試服務(wù)器的用戶行為數(shù)據(jù)的收集工作。通過代理的方法可以對多個不同的用戶瀏覽不同的網(wǎng)站進(jìn)行數(shù)據(jù)收集。

所謂數(shù)據(jù)分析實際上是一個從海量數(shù)據(jù)獲得有價值的信息的數(shù)據(jù)挖掘過程,通過對采集到的流量數(shù)據(jù)的過濾、預(yù)處理、綜合分析處理等程序,從中獲取有價值的分析結(jié)果,并以準(zhǔn)確直觀的方式表示出來。

然而,在記錄用戶操作行為過程,也即是數(shù)據(jù)采集過程中需要面臨兩個問題:其一,由于記錄用戶的操作行為必然會耗費用戶對頁面操作的響應(yīng)時間,從而影響用戶體驗;其二,在大量web用戶同時在線進(jìn)行操作時,記錄用戶行為直接寫非內(nèi)存型數(shù)據(jù)庫,可能會對非內(nèi)存型數(shù)據(jù)庫的服務(wù)器造成極大的壓力。



技術(shù)實現(xiàn)要素:

本發(fā)明的主要目的在于提出一種記錄網(wǎng)絡(luò)用戶行為數(shù)據(jù)的方法及其裝置、計算機(jī)可讀介質(zhì),旨在解決大量網(wǎng)絡(luò)(web)用戶同時在線操作時,對服務(wù)器造成極大負(fù)荷的問題。

為實現(xiàn)上述目的,本發(fā)明提供的一種記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法,該方法包括以下步驟:

獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),將所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)寫入本地緩存的阻塞式隊列;

通過至少一個線程異步操作將所述阻塞式隊列中的所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)進(jìn)行處理并持久化到非內(nèi)存型數(shù)據(jù)庫。

其中,網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)至少包括以下信息類型:

訪問網(wǎng)站的主體,主要是指用戶的ip地址等信息;

訪問網(wǎng)站的路徑,主要是用戶通過哪一種方式獲得網(wǎng)站的鏈接;

用戶網(wǎng)頁停留時間,用戶查詢了網(wǎng)站的哪一些網(wǎng)頁,在每一個網(wǎng)頁中停留的時間;

用戶是否達(dá)成瀏覽目的,例如用戶進(jìn)入購物網(wǎng)站,是否最終完成交易;或者用戶進(jìn)入文件查詢網(wǎng)站,是否最終找到并獲取用戶所需要的文件;

用戶的請求信息,例如進(jìn)入購物網(wǎng)站時,用戶查詢了哪一類型的商品,或者在瀏覽器界面查詢了哪一些信息;

用戶請求的日期和時間,特別是用戶請求的頻率;

用戶請求的結(jié)果,如成功、失敗還是網(wǎng)站服務(wù)器發(fā)送錯誤、

由于web服務(wù)器類型的多種多樣,不同的web服務(wù)器產(chǎn)生的信息是不一樣的,各個網(wǎng)站根據(jù)自身的需要均會產(chǎn)生特定的用戶行為數(shù)據(jù)。

無論是基于服務(wù)器日志文件,還是基于瀏覽器的方法、基于網(wǎng)站的方法以及基于代理的方法獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),均需要對網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)進(jìn)行識別分類存儲。

其中,根據(jù)訪問網(wǎng)站主體不同分別建立一所述線程,所述線程異步操作處理對應(yīng)的所述訪問網(wǎng)站主體的網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)。另外,可以設(shè)置每一線程關(guān)聯(lián)處理多個所述訪問網(wǎng)站主體的網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)。

其中,根據(jù)所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的信息類型分別建立一所述線程,所述線程異步操作處理對應(yīng)的每一所述信息類型的網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)。

進(jìn)一步的,所述記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法,還包括以下步驟:在獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)之前,在本地緩存預(yù)設(shè)一阻塞式隊列。

其中,在獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)之前,在本地緩存中也可以設(shè)置多個阻塞式隊列,每一阻塞式隊列關(guān)聯(lián)接收不同的網(wǎng)頁,或者不同區(qū)域劃分的訪問網(wǎng)站用戶的網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),從而進(jìn)一步提升網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)獲取的處理效率。

進(jìn)一步的,所述記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法,還包括以下步驟:

預(yù)設(shè)一監(jiān)控線程,并通過所述監(jiān)控線程實時監(jiān)控所述本地緩存中的阻塞式隊列的長度。

進(jìn)一步的,所述記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法,還包括以下步驟:

預(yù)設(shè)所述本地緩存中的阻塞式隊列的最大長度閥值,當(dāng)所述阻塞式隊列的長度大于所述最大長度閥值時,增加所述線程數(shù)量。

進(jìn)一步的,所述記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法,還包括以下步驟:

預(yù)設(shè)所述本地緩存中的阻塞式隊列的最小長度閥值,當(dāng)所述阻塞式隊列的長度小于所述最小長度閥值時,減少所述線程數(shù)量。

其中,所述阻塞式隊列接收網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),所述阻塞式隊列通過線程將網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)分發(fā)給服務(wù)器存儲數(shù)據(jù)庫,根據(jù)所述服務(wù)器存儲數(shù)據(jù)庫與所述本地緩存之間的數(shù)據(jù)傳輸率確定所述最大長度閥值和最小長度閥值。

本發(fā)明的另一方面,為實現(xiàn)上述目的,本發(fā)明還提出一種記錄網(wǎng)絡(luò)用戶行為數(shù)據(jù)的裝置,該裝置包括:存儲器、處理器及存儲在所述存儲器上并可在所述處理器上運行的數(shù)據(jù)采集程序,所述數(shù)據(jù)采集程序被所述處理器執(zhí)行時實現(xiàn)如下的記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法步驟:

獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),將所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)寫入本地緩存的阻塞式隊列;

通過至少一個線程異步操作將所述阻塞式隊列中的所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)進(jìn)行處理并持久化到非內(nèi)存型數(shù)據(jù)庫。

進(jìn)一步的,所述數(shù)據(jù)采集程序被所述處理器執(zhí)行時還實現(xiàn)如下的記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法步驟:

在獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)之前,在本地緩存預(yù)設(shè)一阻塞式隊列;

以及預(yù)設(shè)一監(jiān)控線程,并通過所述監(jiān)控線程實時監(jiān)控所述本地緩存中的阻塞式隊列的長度。

進(jìn)一步的,所述數(shù)據(jù)采集程序被所述處理器執(zhí)行時還實現(xiàn)如下的記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法步驟:

在所述阻塞式隊列的長度大于預(yù)設(shè)的所述本地緩存中的阻塞式隊列的最大長度閥值時,增加所述線程數(shù)量。

進(jìn)一步的,所述數(shù)據(jù)采集程序被所述處理器執(zhí)行時還實現(xiàn)如下的記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法步驟:

在所述阻塞式隊列的長度小于預(yù)設(shè)的所述本地緩存中的阻塞式隊列的最小長度閥值時,減少所述線程數(shù)量。

此外,為實現(xiàn)上述目的,本發(fā)明還提供了一種計算機(jī)可讀存儲介質(zhì),所述計算機(jī)可讀存儲介質(zhì)上存儲有網(wǎng)絡(luò)用戶行為數(shù)據(jù)采集程序,所述網(wǎng)絡(luò)用戶行為數(shù)據(jù)采集被處理器執(zhí)行時實現(xiàn)上述的記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法的步驟。

本發(fā)明提出的記錄網(wǎng)絡(luò)用戶行為數(shù)據(jù)的方法及其裝置、計算機(jī)可讀介質(zhì),實現(xiàn)記錄用戶操作行為數(shù)據(jù),通過本地緩存寫數(shù)據(jù)的高效性來提高用戶體驗,以及通過異步線程進(jìn)行對記錄數(shù)據(jù)的處理及記錄,同時為了防止高并發(fā)時,可能會導(dǎo)致用戶行為數(shù)據(jù)生成數(shù)量大于處理數(shù)量,從而導(dǎo)致本地緩存的隊列排滿產(chǎn)生阻塞,因此加入一個監(jiān)控線程能夠進(jìn)行智能控制,減少隊列阻塞的可能性。

附圖說明

圖1為實現(xiàn)本發(fā)明各個實施例的web工作過程的原理圖;

圖2為本發(fā)明涉及的其中一種web用戶行為分析系統(tǒng)框架結(jié)構(gòu)圖;

圖3為本發(fā)明實施例的第一種記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法流程框圖;

圖4為本發(fā)明實施例的第一種記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法執(zhí)行結(jié)構(gòu)示意圖;

圖5為本發(fā)明實施例的第二種記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法流程框圖;

圖6為本發(fā)明實施例的第三種記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法流程框圖;

本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進(jìn)一步說明。

具體實施方式

應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

本發(fā)明技術(shù)方案涉及的web(worldwideweb)即全球廣域網(wǎng),也稱為萬維網(wǎng),它是一種基于超文本和http的、全球性的、動態(tài)交互的、跨平臺的分布式圖形信息系統(tǒng)。是建立在internet上的一種網(wǎng)絡(luò)服務(wù),為瀏覽者在internet上查找和瀏覽信息提供了圖形化的、易于訪問的直觀界面,其中的文檔及超級鏈接將internet上的信息節(jié)點組織成一個互為關(guān)聯(lián)的網(wǎng)狀結(jié)構(gòu)。

所謂web(worldwideweb)的表現(xiàn)形式如下:

(1)、超文本(hypertext)

超文本是一種用戶接口方式,用以顯示文本及與文本相關(guān)的內(nèi)容?,F(xiàn)時超文本普遍以電子文檔的方式存在,其中的文字包含有可以鏈接到其他字段或者文檔的超文本鏈接,允許從當(dāng)前閱讀位置直接切換到超文本鏈接所指向的文字。超文本的格式有很多,目前最常使用的是超文本標(biāo)記語言(hypertextmarkuplanguage,html)及富文本格式(richtextformat,rtf)。我們?nèi)粘g覽的網(wǎng)頁上的鏈結(jié)都屬于超文本。超文本鏈接一種全局性的信息結(jié)構(gòu),它將文檔中的不同部分通過關(guān)鍵字建立鏈接,使信息得以用交互方式搜索。

(2)、超媒體(hypermedia)

超媒體是超級媒體的簡稱。是超文本(hypertext)和多媒體在信息瀏覽環(huán)境下的結(jié)合。用戶不僅能從一個文本跳到另一個文本,而且可以激活一段聲音,顯示一個圖形,甚至可以播放一段動畫。internet采用超文本和超媒體的信息組織方式,將信息的鏈接擴(kuò)展到整個internet上。web就是一種超文本信息系統(tǒng),web的一個主要的概念就是超文本鏈接。它使得文本不再像一本書一樣是固定的線性的,而是可以從一個位置跳到另外的位置并從中獲取更多的信息,還可以轉(zhuǎn)到別的主題上。想要了解某一個主題的內(nèi)容只要在這個主題上點一下,就可以跳轉(zhuǎn)到包含這一主題的文檔上。正是這種多連接性把它稱為web。

(3)、超文本傳輸協(xié)議(http,hypertexttransferprotocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。

如圖1所示,web的工作過程可以分成:建立連接、發(fā)送請求信息、發(fā)送響應(yīng)信息、關(guān)閉連接??蛻舳耸墙K端用戶,服務(wù)器端是網(wǎng)站,通過使用web瀏覽器,客戶端向web服務(wù)器發(fā)起一個http請求,應(yīng)答的web服務(wù)器上存儲了相應(yīng)的html文本和圖像資源。web頁面由多個對象構(gòu)成,對象(object)僅僅是可由單個統(tǒng)一資源定位符url尋址的文件,例如htmt文本文件、靜態(tài)圖像、java小應(yīng)用程序、語音片段、動畫視頻等。大多數(shù)web頁面由單個基本的html文件和若干所引用的對象構(gòu)成?;緃tml文件使用相應(yīng)的url來引用本頁面的其他對象。每個url由存放該對象的服務(wù)器主機(jī)名和該對象的路徑名兩個部分構(gòu)成。

如圖2所示,其中一種web用戶行為分析系統(tǒng)框架結(jié)構(gòu)圖,web用戶的行為信息從客戶端、用戶終端、代理服務(wù)器獲取。web網(wǎng)絡(luò)用戶行為分析的對象是:上網(wǎng)用戶個體,我們把用戶訪問網(wǎng)頁的一次行為稱為事件,每當(dāng)事件發(fā)生的時候,用戶行為分析系統(tǒng)首先要做的是通過一定的方法來獲取用戶相應(yīng)的上網(wǎng)行為,其中部分信息來對用戶加以區(qū)分,其他部分用來計算用戶的興趣度,但是收集的瀏覽信息往往是雜亂無章的,并且存在一些干擾信息,不能完全反映用戶的興趣愛好,需要對信息進(jìn)行相應(yīng)的處理,經(jīng)過預(yù)處理之后作為數(shù)據(jù)挖掘的基本輸入,聚類或分類計算可以得到該網(wǎng)頁對于某個主題的相關(guān)度,之后結(jié)合用戶訪問的網(wǎng)頁對于主題的相關(guān)度和設(shè)置的一些參數(shù),定義公式來計算每個用戶對于某個主題的相關(guān)度,本課題將用戶對于某個主題的相關(guān)度稱為用戶的興趣度,最后可以根據(jù)用戶對于這個主題的相關(guān)度的大小,為用戶提供網(wǎng)頁推薦等個性化的服務(wù),或者是達(dá)到其它的目的。如圖2所示,把web用戶行為分析系統(tǒng)分為四個模塊:數(shù)據(jù)獲取及預(yù)處理模塊、數(shù)據(jù)挖掘模塊、興趣度更新模塊。

數(shù)據(jù)獲取模塊的作用就是獲取以上信息,并把它們傳送給其它的模塊或者存放在相應(yīng)的數(shù)據(jù)庫表格中,以待后面的分析。在數(shù)據(jù)獲取之前,需要分析用戶是否愿意提供相應(yīng)的信息,用戶一般都想保密自己的一些重要信息,尤其是具有隱私性和敏感性的信息,例如用戶的銀行卡號、工資、手機(jī)號碼等,80%的用戶愿意向網(wǎng)站提供自己的姓名、性別、興趣愛好等,所以必須跟被監(jiān)測用戶溝通好,保證本系統(tǒng)不會得到用戶不愿透露的隱私信息,只是觀察用戶的瀏覽信息,以得到他們的許可。

數(shù)據(jù)預(yù)處理模塊是用戶行為分析系統(tǒng)中不可缺少的一個環(huán)節(jié)。大型網(wǎng)站每天所產(chǎn)生的數(shù)據(jù)量是驚人的,并且數(shù)據(jù)庫極易受到噪聲數(shù)據(jù)、空缺數(shù)據(jù)和一些不一致數(shù)據(jù)的侵?jǐn)_,低質(zhì)量的數(shù)據(jù)將導(dǎo)致低質(zhì)最的結(jié)果,含有大量的冗余數(shù)據(jù)會降低數(shù)據(jù)挖掘數(shù)據(jù)的性能,從而得不到輸出或是得到不可靠的輸出。要使挖掘內(nèi)核更有效地挖掘知識,就必須為它提供準(zhǔn)確、簡潔的數(shù)據(jù),預(yù)處理是指網(wǎng)頁的分析、過濾、消除重復(fù)記錄、完成數(shù)據(jù)類型的轉(zhuǎn)化,檢查數(shù)據(jù)完整性和一致性,去除網(wǎng)頁中無關(guān)內(nèi)容,將信息進(jìn)行必要的整理,從而使數(shù)椐挖掘的過程更有效容易。常見的數(shù)據(jù)預(yù)處理的方法有:數(shù)據(jù)清理、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)歸約。

因特網(wǎng)上大量信息表現(xiàn)為文本,文本是指在以html格式存儲的半格式化的web頁面和文檔,如何從這些浩瀚的文本數(shù)據(jù)中挖掘出潛在的知識是一個需要亟待解決的問題。對于數(shù)據(jù)挖掘技術(shù)來說,考慮到分類算法在用戶行為分析系統(tǒng)中的應(yīng)用,事先可以將用戶的興趣主題定義好,這樣做的目的是從用戶的角度出發(fā),不同的用戶可以根據(jù)自己的實際需求來設(shè)置主題,之后得到系統(tǒng)分析的用戶對于某個主題的興趣度,并實施相應(yīng)的行為,實現(xiàn)自己的目標(biāo)。分析web的基本文本內(nèi)容是興趣度計算過程中的一個主要方面,它是獲取用戶興趣度的前提,用分類分析的方法將網(wǎng)絡(luò)用戶歸到不同的類別,這些類別就是相關(guān)的興趣主題。

實施例1

基于上述web結(jié)構(gòu)以及web用戶行為分析系統(tǒng),提出本發(fā)明方法各個實施例。

如圖3所示,本發(fā)明第一實施例提出一種記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法,該方法包括以下步驟:

s101、獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),將所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)寫入本地緩存的阻塞式隊列;

s102、通過至少一個線程異步操作將所述阻塞式隊列中的所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)進(jìn)行處理并持久化到非內(nèi)存型數(shù)據(jù)庫。

其中,網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)至少包括以下信息類型:

訪問網(wǎng)站的主體,主要是指用戶的ip地址等信息;

訪問網(wǎng)站的路徑,主要是用戶通過哪一種方式獲得網(wǎng)站的鏈接;

用戶網(wǎng)頁停留時間,用戶查詢了網(wǎng)站的哪一些網(wǎng)頁,在每一個網(wǎng)頁中停留的時間;

用戶是否達(dá)成瀏覽目的,例如用戶進(jìn)入購物網(wǎng)站,是否最終完成交易;或者用戶進(jìn)入文件查詢網(wǎng)站,是否最終找到并獲取用戶所需要的文件;

用戶的請求信息,例如進(jìn)入購物網(wǎng)站時,用戶查詢了哪一類型的商品,或者在瀏覽器界面查詢了哪一些信息;

用戶請求的日期和時間,特別是用戶請求的頻率;

用戶請求的結(jié)果,如成功、失敗還是網(wǎng)站服務(wù)器發(fā)送錯誤、

由于web服務(wù)器類型的多種多樣,不同的web服務(wù)器產(chǎn)生的信息是不一樣的,各個網(wǎng)站根據(jù)自身的需要均會產(chǎn)生特定的用戶行為數(shù)據(jù)。

無論是基于服務(wù)器日志文件,還是基于瀏覽器的方法、基于網(wǎng)站的方法以及基于代理的方法獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),均需要對網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)進(jìn)行識別分類存儲。

如圖4所示,獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的數(shù)據(jù)采集針將用戶行為數(shù)據(jù)放入到本地緩存的隊列中,如數(shù)據(jù)1、數(shù)據(jù)2、數(shù)據(jù)3、數(shù)據(jù)4。。,鏈型排列;建立至少一個線程,如線程1、線程2、線程3、線程4。。,從隊列中分別消費其中的數(shù)據(jù),并將用戶行為數(shù)據(jù)存儲到web服務(wù)器的非內(nèi)存型數(shù)據(jù)庫。

其中,根據(jù)訪問網(wǎng)站主體不同分別建立一所述線程,所述線程異步操作處理對應(yīng)的所述訪問網(wǎng)站主體的網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)。另外,可以設(shè)置每一線程關(guān)聯(lián)處理多個所述訪問網(wǎng)站主體的網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)。

其中,根據(jù)所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的信息類型分別建立一所述線程,所述線程異步操作處理對應(yīng)的每一所述信息類型的網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)。

多線程和異步操作兩者都可以達(dá)到避免調(diào)用線程阻塞的目的,從而提高軟件的可響應(yīng)性。甚至有些時候我們就認(rèn)為多線程和異步操作是等同的概念。但是,多線程和異步操作還是有一些區(qū)別的。而這些區(qū)別造成了使用多線程和異步操作的時機(jī)的區(qū)別。

所有的程序最終都會由計算機(jī)硬件來執(zhí)行,所以為了更好的理解異步操作的本質(zhì),我們有必要了解一下它的硬件基礎(chǔ)。熟悉電腦硬件的朋友肯定對dma這個詞不陌生,硬盤、光驅(qū)的技術(shù)規(guī)格中都有明確dma的模式指標(biāo),其實網(wǎng)卡、聲卡、顯卡也是有dma功能的。dma就是直接內(nèi)存訪問的意思,也就是說,擁有dma功能的硬件在和內(nèi)存進(jìn)行數(shù)據(jù)交換的時候可以不消耗cpu資源。只要cpu在發(fā)起數(shù)據(jù)傳輸時發(fā)送一個指令,硬件就開始自己和內(nèi)存交換數(shù)據(jù),在傳輸完成之后硬件會觸發(fā)一個中斷來通知操作完成。這些無須消耗cpu時間的i/o操作正是異步操作的硬件基礎(chǔ)。所以即使在dos這樣的單進(jìn)程(而且無線程概念)系統(tǒng)中也同樣可以發(fā)起異步的dma操作。

線程不是一個計算機(jī)硬件的功能,而是操作系統(tǒng)提供的一種邏輯功能,線程本質(zhì)上是進(jìn)程中一段并發(fā)運行的代碼,所以線程需要操作系統(tǒng)投入cpu資源來運行和調(diào)度。

因為異步操作無須額外的線程負(fù)擔(dān),并且使用回調(diào)的方式進(jìn)行處理,在設(shè)計良好的情況下,處理函數(shù)可以不必使用共享變量(即使無法完全不用,最起碼可以減少共享變量的數(shù)量),減少了死鎖的可能。

多線程的優(yōu)點很明顯,線程中的處理程序依然是順序執(zhí)行,符合普通人的思維習(xí)慣,所以編程簡單。但是多線程的缺點也同樣明顯,線程的使用(濫用)會給系統(tǒng)帶來上下文切換的額外負(fù)擔(dān)。并且線程間的共享變量可能造成死鎖的出現(xiàn)。

異步與多線程,從辯證關(guān)系上來看,異步和多線程并不時一個同等關(guān)系,異步是目的,多線程只是我們實現(xiàn)異步的一個手段.什么是異步:異步是當(dāng)一個調(diào)用請求發(fā)送給被調(diào)用者,而調(diào)用者不用等待其結(jié)果的返回.實現(xiàn)異步可以采用多線程技術(shù)或則交給另外的進(jìn)程來處理。

其中,本地緩存是指將客戶端本地的物理內(nèi)存劃分出一部分空間用來緩沖客戶端回寫到服務(wù)器的數(shù)據(jù),因其在回寫上的突出貢獻(xiàn),因此本地緩存一般稱為本地回寫。該技術(shù)將客戶端回寫的數(shù)據(jù)不再先寫入服務(wù)器硬盤,而是將回寫數(shù)據(jù)先寫入本地回寫緩存,當(dāng)緩存空間達(dá)到一定的閥值時,再將數(shù)據(jù)回寫到服務(wù)器。有了本地回寫緩存功能之后,可大大降低服務(wù)器讀寫壓力和網(wǎng)絡(luò)負(fù)載。

其中,持久化(persistence),即把數(shù)據(jù)(如內(nèi)存中的對象)保存到可永久保存的存儲設(shè)備中(如磁盤)。持久化的主要應(yīng)用是將內(nèi)存中的對象存儲在關(guān)系型的數(shù)據(jù)庫中,當(dāng)然也可以存儲在磁盤文件中、xml數(shù)據(jù)文件中等等。持久化是將程序數(shù)據(jù)在持久狀態(tài)和瞬時狀態(tài)間轉(zhuǎn)換的機(jī)制。jdbc就是一種持久化機(jī)制。文件io也是一種持久化機(jī)制。對象持久化可以滿足對象序列化。

其中,內(nèi)存數(shù)據(jù)庫拋棄了磁盤數(shù)據(jù)管理的傳統(tǒng)方式,基于全部數(shù)據(jù)都在內(nèi)存中重新設(shè)計了體系結(jié)構(gòu),并且在數(shù)據(jù)緩存、快速算法、并行操作方面也進(jìn)行了相應(yīng)的改進(jìn),所以數(shù)據(jù)處理速度比傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)處理速度要快很多,一般都在10倍以上常見的例子有mysql的memory存儲引擎、extremedb、tt、fastdb、sqlite、microsoftsqlservercompact等。傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)是關(guān)系型數(shù)據(jù)庫,開發(fā)這種數(shù)據(jù)庫的目的,是處理永久、穩(wěn)定的數(shù)據(jù)。關(guān)系數(shù)據(jù)庫強(qiáng)調(diào)維護(hù)數(shù)據(jù)的完整性、一致性,但很難顧及有關(guān)數(shù)據(jù)及其處理的定時限制,不能滿足工業(yè)生產(chǎn)管理實時應(yīng)用的需要,因為實時事務(wù)要求系統(tǒng)能較準(zhǔn)確地預(yù)報事務(wù)的運行時間。

對磁盤數(shù)據(jù)庫而言,由于磁盤存取、內(nèi)外存的數(shù)據(jù)傳遞、緩沖區(qū)管理、排隊等待及鎖的延遲等使得事務(wù)實際平均執(zhí)行時間與估算的最壞情況執(zhí)行時間相差很大,如果將整個數(shù)據(jù)庫或其主要的″工作″部分放入內(nèi)存,使每個事務(wù)在執(zhí)行過程中沒有i/o,則為系統(tǒng)較準(zhǔn)確估算和安排事務(wù)的運行時間,使之具有較好的動態(tài)可預(yù)報性提供了有力的支持,同時也為實現(xiàn)事務(wù)的定時限制打下了基礎(chǔ)。

內(nèi)存數(shù)據(jù)庫所處理的數(shù)據(jù)通常是″短暫″的,即有一定的有效時間,過時則有新的數(shù)據(jù)產(chǎn)生,而當(dāng)前的決策推導(dǎo)變成無效。所以,實際應(yīng)用中采用內(nèi)存數(shù)據(jù)庫來處理實時性強(qiáng)的業(yè)務(wù)邏輯處理數(shù)據(jù)。而傳統(tǒng)數(shù)據(jù)庫旨在處理永久、穩(wěn)定的數(shù)據(jù),其性能目標(biāo)是高的系統(tǒng)吞吐量和低的代價,處理數(shù)據(jù)的實時性就要考慮的相對少一些。實際應(yīng)用中利用傳統(tǒng)數(shù)據(jù)庫這一特性存放相對實時性要求不高的數(shù)據(jù)。

本發(fā)明技術(shù)方案涉及的非內(nèi)存型數(shù)據(jù)庫包括關(guān)系型數(shù)據(jù)庫以及硬盤數(shù)據(jù)庫。

如圖5所示,本發(fā)明的第二種記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法,該方法包括以下步驟:

s201、在獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)之前,在本地緩存預(yù)設(shè)一阻塞式隊列;

s202、獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),將所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)寫入本地緩存的阻塞式隊列;

s203、通過至少一個線程異步操作將所述阻塞式隊列中的所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)進(jìn)行處理并持久化到非內(nèi)存型數(shù)據(jù)庫。

在記錄web用戶行為數(shù)據(jù)時,不采用傳統(tǒng)的直接寫非內(nèi)存型持久化數(shù)據(jù)庫,而是將數(shù)據(jù)寫入一個線程安全阻塞的有界隊列的本地緩存,由于本地緩存的數(shù)據(jù)寫入速度極快,可以顯著提高用戶體驗。

其中,在獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)之前,在本地緩存中也可以設(shè)置多個阻塞式隊列,每一阻塞式隊列關(guān)聯(lián)接收不同的網(wǎng)頁,或者不同區(qū)域劃分的訪問網(wǎng)站用戶的網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),從而進(jìn)一步提升網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)獲取的處理效率。

如圖6所示,本發(fā)明的第三種記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法,該方法包括以下步驟:

s301、在獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)之前,在本地緩存預(yù)設(shè)一阻塞式隊列;

s302、獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),將所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)寫入本地緩存的阻塞式隊列;

s303、預(yù)設(shè)一監(jiān)控線程,并通過所述監(jiān)控線程實時監(jiān)控所述本地緩存中的阻塞式隊列的長度;預(yù)設(shè)所述本地緩存中的阻塞式隊列的最大長度閥值,當(dāng)所述阻塞式隊列的長度大于所述最大長度閥值時,增加所述線程數(shù)量;預(yù)設(shè)所述本地緩存中的阻塞式隊列的最小長度閥值,當(dāng)所述阻塞式隊列的長度小于所述最小長度閥值時,減少所述線程數(shù)量;

s304、通過至少一個線程異步操作將所述阻塞式隊列中的所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)進(jìn)行處理并持久化到非內(nèi)存型數(shù)據(jù)庫。

其中,所述阻塞式隊列接收網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),所述阻塞式隊列通過線程將網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)分發(fā)給服務(wù)器存儲數(shù)據(jù)庫,根據(jù)所述服務(wù)器存儲數(shù)據(jù)庫與所述本地緩存之間的數(shù)據(jù)傳輸率確定所述最大長度閥值和最小長度閥值。

實施例2

本發(fā)明的另一方面,為實現(xiàn)上述目的,本發(fā)明還提出一種記錄網(wǎng)絡(luò)用戶行為數(shù)據(jù)的裝置,該裝置包括:存儲器、處理器及存儲在所述存儲器上并可在所述處理器上運行的數(shù)據(jù)采集程序,所述數(shù)據(jù)采集程序被所述處理器執(zhí)行時實現(xiàn)如下的記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法步驟:

獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),將所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)寫入本地緩存的阻塞式隊列;

通過至少一個線程異步操作將所述阻塞式隊列中的所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)進(jìn)行處理并持久化到非內(nèi)存型數(shù)據(jù)庫。

其中,所述數(shù)據(jù)采集程序被所述處理器執(zhí)行時還實現(xiàn)如下的記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法步驟:

在獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)之前,在本地緩存預(yù)設(shè)一阻塞式隊列;

以及預(yù)設(shè)一監(jiān)控線程,并通過所述監(jiān)控線程實時監(jiān)控所述本地緩存中的阻塞式隊列的長度。

其中,所述數(shù)據(jù)采集程序被所述處理器執(zhí)行時還實現(xiàn)如下的記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法步驟:

在所述阻塞式隊列的長度大于預(yù)設(shè)的所述本地緩存中的阻塞式隊列的最大長度閥值時,增加所述線程數(shù)量。

其中,所述數(shù)據(jù)采集程序被所述處理器執(zhí)行時還實現(xiàn)如下的記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法步驟:

在所述阻塞式隊列的長度小于預(yù)設(shè)的所述本地緩存中的阻塞式隊列的最小長度閥值時,減少所述線程數(shù)量。

具體地,在本地緩存中創(chuàng)建一個阻塞式隊列l(wèi)inkedblockingqueue,設(shè)置隊列的大小為capacity。當(dāng)需要記錄用戶行為,將用戶行為相關(guān)的數(shù)據(jù)生產(chǎn)寫入本地緩存隊列l(wèi)inkedblockingqueue。對用戶行為生產(chǎn)的數(shù)據(jù)進(jìn)行消費,通過一個或多個線程的異步操作將隊列本地緩存隊列中的數(shù)據(jù)進(jìn)行消費,同時持久化到非內(nèi)存型數(shù)據(jù)庫。通過一個線程進(jìn)行監(jiān)控當(dāng)前本地緩存隊列的長度,如果大于設(shè)置的閾值,則開啟新的線程進(jìn)行消費并入庫。如果隊列長時間小于設(shè)置的閾值,則適當(dāng)減少消費線程數(shù)。

blockingqueue很好的解決了多線程中,如何高效安全“傳輸”數(shù)據(jù)的問題。通過這些高效并且線程安全的隊列類,為我們快速搭建高質(zhì)量的多線程程序帶來極大的便利。blockingqueue阻塞隊列,顧名思義,首先它是一個隊列,而一個隊列在數(shù)據(jù)結(jié)構(gòu)中所起的作用大致如下:通過一個共享的隊列,可以使得數(shù)據(jù)由隊列的一端輸入,從另外一端輸出。

常用的隊列主要有以下兩種:(當(dāng)然通過不同的實現(xiàn)方式,還可以延伸出很多不同類型的隊列,delayqueue就是其中的一種);先進(jìn)先出(fifo):先插入的隊列的元素也最先出隊列,類似于排隊的功能。從某種程度上來說這種隊列也體現(xiàn)了一種公平性。后進(jìn)先出(lifo):后插入隊列的元素最先出隊列,這種隊列優(yōu)先處理最近發(fā)生的事件。

多線程環(huán)境中,通過隊列可以很容易實現(xiàn)數(shù)據(jù)共享,比如經(jīng)典的“生產(chǎn)者”和“消費者”模型中,通過隊列可以很便利地實現(xiàn)兩者之間的數(shù)據(jù)共享。假設(shè)我們有若干生產(chǎn)者線程,另外又有若干個消費者線程。如果生產(chǎn)者線程需要把準(zhǔn)備好的數(shù)據(jù)共享給消費者線程,利用隊列的方式來傳遞數(shù)據(jù),就可以很方便地解決他們之間的數(shù)據(jù)共享問題。但如果生產(chǎn)者和消費者在某個時間段內(nèi),萬一發(fā)生數(shù)據(jù)處理速度不匹配的情況呢?理想情況下,如果生產(chǎn)者產(chǎn)出數(shù)據(jù)的速度大于消費者消費的速度,并且當(dāng)生產(chǎn)出來的數(shù)據(jù)累積到一定程度的時候,那么生產(chǎn)者必須暫停等待一下(阻塞生產(chǎn)者線程),以便等待消費者線程把累積的數(shù)據(jù)處理完畢,反之亦然。(在多線程領(lǐng)域:所謂阻塞,在某些情況下會掛起線程(即阻塞),一旦條件滿足,被掛起的線程又會自動被喚醒)。

blockingqueue的兩個常見阻塞場景:當(dāng)隊列中沒有數(shù)據(jù)的情況下,消費者端的所有線程都會被自動阻塞(掛起),直到有數(shù)據(jù)放入隊列。當(dāng)隊列中填滿數(shù)據(jù)的情況下,生產(chǎn)者端的所有線程都會被自動阻塞(掛起),直到隊列中有空的位置,線程被自動喚醒。

blockingqueue的核心方法:

1.放入數(shù)據(jù)

(1)offer(anobject):表示如果可能的話,將anobject加到blockingqueue里,即如果blockingqueue可以容納,則返回true,否則返回false。(本方法不阻塞當(dāng)前執(zhí)行方法的線程);

(2)offer(eo,longtimeout,timeunitunit):可以設(shè)定等待的時間,如果在指定的時間內(nèi),還不能往隊列中加入blockingqueue,則返回失敗。

(3)put(anobject):把a(bǔ)nobject加到blockingqueue里,如果blockqueue沒有空間,則調(diào)用此方法的線程被阻斷直到blockingqueue里面有空間再繼續(xù)。

2.獲取數(shù)據(jù)

(1)poll(time):取走blockingqueue里排在首位的對象,若不能立即取出,則可以等time參數(shù)規(guī)定的時間,取不到時返回null;

(2)poll(longtimeout,timeunitunit):從blockingqueue取出一個隊首的對象,如果在指定時間內(nèi),隊列一旦有數(shù)據(jù)可取,則立即返回隊列中的數(shù)據(jù)。否則知道時間

超時還沒有數(shù)據(jù)可取,返回失敗。

(3)take():取走blockingqueue里排在首位的對象,若blockingqueue為空,阻斷進(jìn)入等待狀態(tài)直到blockingqueue有新的數(shù)據(jù)被加入;

(4)drainto():一次性從blockingqueue獲取所有可用的數(shù)據(jù)對象(還可以指定獲取數(shù)據(jù)的個數(shù)),通過該方法,可以提升獲取數(shù)據(jù)效率;不需要多次分批加鎖或釋放鎖。

常見blockingqueue如下:

1.arrayblockingqueue

基于數(shù)組的阻塞隊列實現(xiàn),在arrayblockingqueue內(nèi)部,維護(hù)了一個定長數(shù)組,以便緩存隊列中的數(shù)據(jù)對象,這是一個常用的阻塞隊列,除了一個定長數(shù)組外,arrayblockingqueue內(nèi)部還保存著兩個整形變量,分別標(biāo)識著隊列的頭部和尾部在數(shù)組中的位置。

arrayblockingqueue在生產(chǎn)者放入數(shù)據(jù)和消費者獲取數(shù)據(jù),都是共用同一個鎖對象,由此也意味著兩者無法真正并行運行,這點尤其不同于linkedblockingqueue;按照實現(xiàn)原理來分析,arrayblockingqueue完全可以采用分離鎖,從而實現(xiàn)生產(chǎn)者和消費者操作的完全并行運行。douglea之所以沒這樣去做,也許是因為arrayblockingqueue的數(shù)據(jù)寫入和獲取操作已經(jīng)足夠輕巧,以至于引入獨立的鎖機(jī)制,除了給代碼帶來額外的復(fù)雜性外,其在性能上完全占不到任何便宜。arrayblockingqueue和linkedblockingqueue間還有一個明顯的不同之處在于,前者在插入或刪除元素時不會產(chǎn)生或銷毀任何額外的對象實例,而后者則會生成一個額外的node對象。這在長時間內(nèi)需要高效并發(fā)地處理大批量數(shù)據(jù)的系統(tǒng)中,其對于gc的影響還是存在一定的區(qū)別。而在創(chuàng)建arrayblockingqueue時,我們還可以控制對象的內(nèi)部鎖是否采用公平鎖,默認(rèn)采用非公平鎖。

2.linkedblockingqueue

基于鏈表的阻塞隊列,同arraylistblockingqueue類似,其內(nèi)部也維持著一個數(shù)據(jù)緩沖隊列(該隊列由一個鏈表構(gòu)成),當(dāng)生產(chǎn)者往隊列中放入一個數(shù)據(jù)時,隊列會從生產(chǎn)者手中獲取數(shù)據(jù),并緩存在隊列內(nèi)部,而生產(chǎn)者立即返回;只有當(dāng)隊列緩沖區(qū)達(dá)到最大值緩存容量時(linkedblockingqueue可以通過構(gòu)造函數(shù)指定該值),才會阻塞生產(chǎn)者隊列,直到消費者從隊列中消費掉一份數(shù)據(jù),生產(chǎn)者線程會被喚醒,反之對于消費者這端的處理也基于同樣的原理。而linkedblockingqueue之所以能夠高效的處理并發(fā)數(shù)據(jù),還因為其對于生產(chǎn)者端和消費者端分別采用了獨立的鎖來控制數(shù)據(jù)同步,這也意味著在高并發(fā)的情況下生產(chǎn)者和消費者可以并行地操作隊列中的數(shù)據(jù),以此來提高整個隊列的并發(fā)性能。

作為開發(fā)者,我們需要注意的是,如果構(gòu)造一個linkedblockingqueue對象,而沒有指定其容量大小,linkedblockingqueue會默認(rèn)一個類似無限大小的容量(integer.max_value),這樣的話,如果生產(chǎn)者的速度一旦大于消費者的速度,也許還沒有等到隊列滿阻塞產(chǎn)生,系統(tǒng)內(nèi)存就有可能已被消耗殆盡了。

arrayblockingqueue和linkedblockingqueue是兩個最普通也是最常用的阻塞隊列,一般情況下,在處理多線程間的生產(chǎn)者消費者問題,使用這兩個類足以。

3.delayqueue

delayqueue中的元素只有當(dāng)其指定的延遲時間到了,才能夠從隊列中獲取到該元素。delayqueue是一個沒有大小限制的隊列,因此往隊列中插入數(shù)據(jù)的操作(生產(chǎn)者)永遠(yuǎn)不會被阻塞,而只有獲取數(shù)據(jù)的操作(消費者)才會被阻塞。

使用場景:delayqueue使用場景較少,但都相當(dāng)巧妙,常見的例子比如使用一個delayqueue來管理一個超時未響應(yīng)的連接隊列。

4.priorityblockingqueue

基于優(yōu)先級的阻塞隊列(優(yōu)先級的判斷通過構(gòu)造函數(shù)傳入的compator對象來決定),但需要注意的是priorityblockingqueue并不會阻塞數(shù)據(jù)生產(chǎn)者,而只會在沒有可消費的數(shù)據(jù)時,阻塞數(shù)據(jù)的消費者。因此使用的時候要特別注意,生產(chǎn)者生產(chǎn)數(shù)據(jù)的速度絕對不能快于消費者消費數(shù)據(jù)的速度,否則時間一長,會最終耗盡所有的可用堆內(nèi)存空間。在實現(xiàn)priorityblockingqueue時,內(nèi)部控制線程同步的鎖采用的是公平鎖。

5.synchronousqueue

一種無緩沖的等待隊列,類似于無中介的直接交易,有點像原始社會中的生產(chǎn)者和消費者,生產(chǎn)者拿著產(chǎn)品去集市銷售給產(chǎn)品的最終消費者,而消費者必須親自去集市找到所要商品的直接生產(chǎn)者,如果一方?jīng)]有找到合適的目標(biāo),那么對不起,大家都在集市等待。相對于有緩沖的blockingqueue來說,少了一個中間經(jīng)銷商的環(huán)節(jié)(緩沖區(qū)),如果有經(jīng)銷商,生產(chǎn)者直接把產(chǎn)品批發(fā)給經(jīng)銷商,而無需在意經(jīng)銷商最終會將這些產(chǎn)品賣給那些消費者,由于經(jīng)銷商可以庫存一部分商品,因此相對于直接交易模式,總體來說采用中間經(jīng)銷商的模式會吞吐量高一些(可以批量買賣);但另一方面,又因為經(jīng)銷商的引入,使得產(chǎn)品從生產(chǎn)者到消費者中間增加了額外的交易環(huán)節(jié),單個產(chǎn)品的及時響應(yīng)性能可能會降低。

聲明一個synchronousqueue有兩種不同的方式,它們之間有著不太一樣的行為。公平模式和非公平模式的區(qū)別:如果采用公平模式:synchronousqueue會采用公平鎖,并配合一個fifo隊列來阻塞多余的生產(chǎn)者和消費者,從而體系整體的公平策略;但如果是非公平模式(synchronousqueue默認(rèn)):synchronousqueue采用非公平鎖,同時配合一個lifo隊列來管理多余的生產(chǎn)者和消費者,而后一種模式,如果生產(chǎn)者和消費者的處理速度有差距,則很容易出現(xiàn)饑渴的情況,即可能有某些生產(chǎn)者或者是消費者的數(shù)據(jù)永遠(yuǎn)都得不到處理。

blockingqueue不光實現(xiàn)了一個完整隊列所具有的基本功能,同時在多線程環(huán)境下,他還自動管理了多線間的自動等待于喚醒功能,從而使得可以忽略這些細(xì)節(jié),關(guān)注更高級的功能。

實施例3

此外,為實現(xiàn)上述目的,本發(fā)明還提供了一種計算機(jī)可讀存儲介質(zhì),所述計算機(jī)可讀存儲介質(zhì)上存儲有網(wǎng)絡(luò)用戶行為數(shù)據(jù)采集程序,所述網(wǎng)絡(luò)用戶行為數(shù)據(jù)采集被處理器執(zhí)行時實現(xiàn)上述的記錄網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)的方法的步驟:

s301、在獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)之前,在本地緩存預(yù)設(shè)一阻塞式隊列;

s302、獲取網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù),將所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)寫入本地緩存的阻塞式隊列;

s303、預(yù)設(shè)一監(jiān)控線程,并通過所述監(jiān)控線程實時監(jiān)控所述本地緩存中的阻塞式隊列的長度;預(yù)設(shè)所述本地緩存中的阻塞式隊列的最大長度閥值,當(dāng)所述阻塞式隊列的長度大于所述最大長度閥值時,增加所述線程數(shù)量;預(yù)設(shè)所述本地緩存中的阻塞式隊列的最小長度閥值,當(dāng)所述阻塞式隊列的長度小于所述最小長度閥值時,減少所述線程數(shù)量;

s304、通過至少一個線程異步操作將所述阻塞式隊列中的所述網(wǎng)絡(luò)(web)用戶行為數(shù)據(jù)進(jìn)行處理并持久化到非內(nèi)存型數(shù)據(jù)庫。

本發(fā)明提出的記錄網(wǎng)絡(luò)用戶行為數(shù)據(jù)的方法及其裝置、計算機(jī)可讀介質(zhì),實現(xiàn)記錄用戶操作行為數(shù)據(jù),通過本地緩存寫數(shù)據(jù)的高效性來提高用戶體驗,以及通過異步線程進(jìn)行對記錄數(shù)據(jù)的處理及記錄,同時為了防止高并發(fā)時,可能會導(dǎo)致用戶行為數(shù)據(jù)生成數(shù)量大于處理數(shù)量,從而導(dǎo)致本地緩存的隊列排滿產(chǎn)生阻塞,因此加入一個監(jiān)控線程能夠進(jìn)行智能控制,減少隊列阻塞的可能性。

需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個......”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。

上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。

通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實施例方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機(jī),計算機(jī),服務(wù)器,空調(diào)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。

以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
双柏县| 九寨沟县| 常熟市| 唐海县| 隆回县| 林西县| 芒康县| 四子王旗| 珠海市| 开鲁县| 靖安县| 吉木萨尔县| 蓬溪县| 柯坪县| 呼和浩特市| 瓦房店市| 泰宁县| 怀安县| 全南县| 永定县| 吉林市| 武陟县| 泗水县| 旅游| 潢川县| 武宁县| 龙井市| 饶平县| 阿拉善右旗| 稻城县| 三河市| 墨竹工卡县| 出国| 金塔县| 贺兰县| 陆川县| 二连浩特市| 甘德县| 新泰市| 长葛市| 浏阳市|