專利名稱:一種用于rfid中間件的冗余數(shù)據(jù)過濾方法
技術(shù)領(lǐng)域:
本發(fā)明涉及射頻通信領(lǐng)域數(shù)據(jù)處理方法,尤其是一種用于RFID中間件的冗余數(shù)據(jù)過濾方法。
背景技術(shù):
RFID (Radio Frequency Identification)是一種利用射頻信號(hào)和空間稱合技術(shù)實(shí)現(xiàn)無接觸的自動(dòng)識(shí)別的技木。RFID中間件通過屏蔽閱讀器的復(fù)雜性與種類,為上層系統(tǒng)提供統(tǒng)ー的調(diào)用接ロ及統(tǒng)ー的數(shù)據(jù)格式,同時(shí)為應(yīng)用系統(tǒng)提供數(shù)據(jù)的過濾,清洗,數(shù)據(jù)匯集統(tǒng)計(jì)等,為業(yè)務(wù)系統(tǒng)提供強(qiáng)大的支撐。在大規(guī)模的RFID應(yīng)用中,RFID閱讀器在每個(gè)讀寫周期中讀取的原始RFID數(shù)據(jù)量非常巨大,如EPC global標(biāo)準(zhǔn)規(guī)定的第二代(Gen2) RFID 閱讀器規(guī)范對(duì)閱讀器的閱讀速率做出了規(guī)定每秒鐘1800個(gè)電子標(biāo)簽。這意味著,ー個(gè)擁有30臺(tái)閱讀器的中型倉(cāng)庫在高峰期一秒鐘可以產(chǎn)生4. 8萬條數(shù)據(jù),數(shù)據(jù)包含閱讀器的Id, RFID數(shù)據(jù),讀取的時(shí)間等,其大小一般20字節(jié),則每天將會(huì)產(chǎn)生上百G的數(shù)據(jù),需要處理的數(shù)據(jù)量非常龐大。如何實(shí)時(shí)地對(duì)海量的RFID原始數(shù)據(jù)進(jìn)行處理及如何充分提取出RFID數(shù)據(jù)所包含的有價(jià)值信息已成為RFID中間件研究的重要內(nèi)容。而在這些從閱讀器收集的原始RFID數(shù)據(jù)中,存在著大量的重復(fù),在實(shí)際的應(yīng)用中,對(duì)業(yè)務(wù)系統(tǒng)真正有價(jià)值有意義的數(shù)據(jù)并不多,如果不加處理直接將原始的數(shù)據(jù)傳輸?shù)綐I(yè)務(wù)系統(tǒng)中,則會(huì)帶來巨大的帶寬浪費(fèi)并對(duì)系統(tǒng)的內(nèi)存及處理器造成沉重的數(shù)據(jù)處理負(fù)擔(dān)。當(dāng)前常用的處理冗余的RFID數(shù)據(jù)的方法主要有兩種,ー種主要通過在數(shù)據(jù)庫中創(chuàng)建ー張臨時(shí)表存儲(chǔ)原始的RFID數(shù)據(jù),然后通過在臨時(shí)表的增刪查改實(shí)現(xiàn)數(shù)據(jù)的過濾,該方法易于實(shí)現(xiàn),但處理大規(guī)模的RFID數(shù)據(jù)時(shí),涉及大量磁盤1/0,效率低下,并不具有實(shí)用價(jià)值。更為常用的方法是通過在中間件系統(tǒng)中開辟一大片內(nèi)存緩沖區(qū),儲(chǔ)存臨時(shí)的RFID數(shù)據(jù),進(jìn)行冗余過濾,由于內(nèi)存操作相比于磁盤I/O在處理效率上有幾個(gè)數(shù)量級(jí)的提升,而中間件需要實(shí)時(shí)處理大量的RFIDRFID數(shù)據(jù),因此要求其過濾算法具有較低的查找時(shí)間,同時(shí)要求算法對(duì)資源占用要低。傳統(tǒng)冗余數(shù)據(jù)過濾算法多以線性鏈表,樹,隊(duì)列等作為存儲(chǔ)數(shù)據(jù)結(jié)構(gòu),如線性鏈表在查找ー個(gè)RFID數(shù)據(jù)需遍歷整個(gè)鏈表,每次查詢都需要耗費(fèi)大量的查找時(shí)間,樹形結(jié)構(gòu)則需要維持一個(gè)相對(duì)穩(wěn)定的序列,操作復(fù)雜,時(shí)間復(fù)雜度理論上只能達(dá)到O(Ign),在大規(guī)?;蛘邔?shí)時(shí)的應(yīng)用,仍然無法滿足數(shù)據(jù)高速處理的需求,存在一定的效率缺陷。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供ー種應(yīng)用于RFID中間件的多階哈希表的過濾算法,以對(duì)來自閱讀器的RFID數(shù)據(jù)進(jìn)行高效的冗余數(shù)據(jù)過濾處理。為了解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是
一種用于RFID中間件的冗余數(shù)據(jù)過濾方法,包括以下步驟在內(nèi)存中創(chuàng)建用于存儲(chǔ)來自閱讀器的RFID數(shù)據(jù)的多階哈希表,所述多階哈希表內(nèi)創(chuàng)建有用于查詢、刪除該RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn);
判斷是否有RFID數(shù)據(jù)流,若否則結(jié)束進(jìn)程,若是則執(zhí)行下ー步驟;
根據(jù)RFID數(shù)據(jù)的標(biāo)簽ID查詢多階哈希表中的標(biāo)簽節(jié)點(diǎn),判斷RFID數(shù)據(jù)流中各RFID數(shù)據(jù)的狀態(tài);
根據(jù)各RFID數(shù)據(jù)的狀態(tài)對(duì)其進(jìn)行冗余數(shù)據(jù)過濾處理。進(jìn)ー步作為優(yōu)選的實(shí)施方式,所述標(biāo)簽ID為用于唯一標(biāo)識(shí)該RFID數(shù)據(jù)的ニ進(jìn)制序列,所述RFID數(shù)據(jù)在多階哈希表中的存儲(chǔ)位置為基于標(biāo)簽ID的映射函數(shù)。
進(jìn)ー步作為優(yōu)選的實(shí)施方式,所述多階哈希表中定義的標(biāo)簽節(jié)點(diǎn)包括標(biāo)簽ID、標(biāo)簽首次讀取時(shí)間、標(biāo)簽?zāi)┐巫x取時(shí)間及讀取次數(shù)。進(jìn)ー步作為優(yōu)選的實(shí)施方式,所述RFID數(shù)據(jù)的狀態(tài)包括未知、捕捉和已存在;所述未知狀態(tài)是指該RFID數(shù)據(jù)未存在多階哈希表中;所述捕捉狀態(tài)是指該RFID數(shù)據(jù)在多階哈希表中已存在但未被確認(rèn);所述已存在狀態(tài)是指該RFID數(shù)據(jù)在多階哈希表中已被確認(rèn)。進(jìn)ー步作為優(yōu)選的實(shí)施方式,所述根據(jù)各RFID數(shù)據(jù)的狀態(tài)對(duì)其進(jìn)行冗余數(shù)據(jù)過濾處理包括
在未知狀態(tài)下,將該RFID數(shù)據(jù)存儲(chǔ)到多階哈希表中,并為該RFID數(shù)據(jù)生成標(biāo)簽節(jié)點(diǎn),將該RFID數(shù)據(jù)在整個(gè)數(shù)據(jù)傳輸通道中作為冗余數(shù)據(jù)過濾掉,轉(zhuǎn)入捕捉狀態(tài);
在捕捉狀態(tài)下,判斷最近兩次RFID數(shù)據(jù)的讀取時(shí)間差是否超過時(shí)間閾值,若是則將該RFID數(shù)據(jù)從多階哈希表中移除并轉(zhuǎn)入未知狀態(tài),若否則更新該RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn)并判斷該RFID數(shù)據(jù)的讀取次數(shù)是否達(dá)到次數(shù)閾值,若未達(dá)到次數(shù)閾值則保持捕捉狀態(tài),將該RFID數(shù)據(jù)作為冗余數(shù)據(jù)過濾掉,若達(dá)到次數(shù)閾值則將該RFID數(shù)據(jù)加入輸出隊(duì)列,作為過濾后的干凈數(shù)據(jù)提供給上層系統(tǒng),并轉(zhuǎn)入已存在狀態(tài);
在已存在狀態(tài)下,判斷最近兩次RFID數(shù)據(jù)的讀取時(shí)間差是否超過時(shí)間閾值,若是則將該RFID數(shù)據(jù)從多階哈希表中移除并轉(zhuǎn)入未知狀態(tài),若否則更新該RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn)并直接將該RFID數(shù)據(jù)作為冗余數(shù)據(jù)過濾掉。進(jìn)ー步作為優(yōu)選的實(shí)施方式,所述多階哈希表的創(chuàng)建包括以下步驟
定義在多階哈希表中存儲(chǔ)RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn),所述標(biāo)簽節(jié)點(diǎn)包括標(biāo)簽ID、標(biāo)簽首次讀取時(shí)間、標(biāo)簽?zāi)┐巫x取時(shí)間及讀取次數(shù);
設(shè)定時(shí)間閾值、次數(shù)閾值及標(biāo)簽數(shù)據(jù)規(guī)模,所述時(shí)間閾值表征在該時(shí)間內(nèi)ー個(gè)RFID數(shù)據(jù)多次被讀取則認(rèn)定為重復(fù)數(shù)據(jù);所述次數(shù)閾值表征只有讀取次數(shù)達(dá)到該數(shù)值的RFID數(shù)據(jù)為穩(wěn)定數(shù)據(jù);所述標(biāo)簽數(shù)據(jù)規(guī)模表征該多階哈希表內(nèi)標(biāo)簽節(jié)點(diǎn)的容量;
設(shè)定多階哈希表的最大桶數(shù)M和階數(shù)N ;
在內(nèi)存中申請(qǐng)M*N個(gè)存儲(chǔ)空間,以ニ維數(shù)組HashTable [M] [N]表示,作為存儲(chǔ)RFID數(shù)據(jù)的哈希矩陣;
以基于標(biāo)簽ID的映射函數(shù)建立RFID數(shù)據(jù)與該RFID數(shù)據(jù)在多階哈希表中存儲(chǔ)位置的對(duì)應(yīng)關(guān)系。進(jìn)ー步作為優(yōu)選的實(shí)施方式,所述時(shí)間閾值、次數(shù)閾值及標(biāo)簽數(shù)據(jù)規(guī)??梢哉{(diào)整。本發(fā)明的有益效果是本發(fā)明通過在內(nèi)存中建立多階哈希表,將中間件接收的RFID數(shù)據(jù)分配到多階哈希表中,并通過判斷該RFID數(shù)據(jù)的狀態(tài)進(jìn)行冗余數(shù)據(jù)過濾處理,實(shí)現(xiàn)了海量冗余RFID數(shù)據(jù)的過濾,大大減少了網(wǎng)絡(luò)的傳輸量,從而為上層應(yīng)用提供了更為干凈、更有價(jià)值的RFID數(shù)據(jù),并且本發(fā)明方法通過利用多階哈希表的存儲(chǔ)結(jié)構(gòu),大大提升了RFID數(shù)據(jù)的過濾效率。
下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式
作進(jìn)ー步說明
圖I是本發(fā)明用于RFID中間件的冗余數(shù)據(jù)過濾方法的步驟流程 圖2是本發(fā)明RFID數(shù)據(jù)的狀態(tài)機(jī)結(jié)構(gòu)示意 圖3是本發(fā)明多階哈希表創(chuàng)建的流程 圖4是本發(fā)明多階哈希表的結(jié)構(gòu)示意圖;
圖5是本發(fā)明基于多階哈希表的冗余數(shù)據(jù)過濾方法優(yōu)選實(shí)施例的步驟流程 圖6是本發(fā)明優(yōu)選實(shí)施例中多階哈希表結(jié)構(gòu)的數(shù)據(jù)儲(chǔ)存示意圖。
具體實(shí)施例方式本發(fā)明采用在內(nèi)存中建立多階哈希表來存儲(chǔ)接收到的RFID數(shù)據(jù),并根據(jù)各RFID數(shù)據(jù)的狀態(tài)進(jìn)行冗余數(shù)據(jù)過濾處理,可以高效的過濾掉重復(fù)的RFID數(shù)據(jù)。參照?qǐng)D1,一種用于RFID中間件的冗余數(shù)據(jù)過濾方法,包括以下步驟
在內(nèi)存中創(chuàng)建用于存儲(chǔ)來自閱讀器的RFID數(shù)據(jù)的多階哈希表,所述多階哈希表內(nèi)創(chuàng)建有用于查詢、刪除該RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn);
判斷是否有RFID數(shù)據(jù)流,若否則結(jié)束進(jìn)程,若是則執(zhí)行下ー步驟;
根據(jù)RFID數(shù)據(jù)的標(biāo)簽ID查詢多階哈希表中的標(biāo)簽節(jié)點(diǎn),判斷RFID數(shù)據(jù)流中各RFID數(shù)據(jù)的狀態(tài);
根據(jù)各RFID數(shù)據(jù)的狀態(tài)對(duì)其進(jìn)行冗余數(shù)據(jù)過濾處理。進(jìn)ー步作為優(yōu)選的實(shí)施方式,所述多階哈希表中定義的標(biāo)簽節(jié)點(diǎn)包括標(biāo)簽ID、標(biāo)簽首次讀取時(shí)間tFirstRead、標(biāo)簽?zāi)┐巫x取時(shí)間tLastRead及讀取次數(shù)tagCnt。所述標(biāo)簽ID為用于唯一標(biāo)識(shí)該RFID數(shù)據(jù)的ニ進(jìn)制序列,所述RFID數(shù)據(jù)在多階哈希表中的存儲(chǔ)位置為基于標(biāo)簽ID的映射函數(shù)。參照?qǐng)D2,進(jìn)ー步作為優(yōu)選的實(shí)施方式,所述RFID數(shù)據(jù)的狀態(tài)包括未知(unknown)、捕捉(captured)和已存在(observed);所述未知狀態(tài)是指該RFID數(shù)據(jù)未存在多階哈希表中,;所述捕捉狀態(tài)是指該RFID數(shù)據(jù)在多階哈希表中已存在但未被確認(rèn);所述已存在狀態(tài)是指該RFID數(shù)據(jù)在多階哈希表中已被確認(rèn)。進(jìn)ー步作為優(yōu)選的實(shí)施方式,對(duì)本發(fā)明中從閱讀器獲取的RFID數(shù)據(jù)的格式進(jìn)行限定,所述RFID數(shù)據(jù)包括閱讀器ID、RFID數(shù)據(jù)編碼及RFID數(shù)據(jù)的時(shí)間戳。現(xiàn)舉例說明,假設(shè)RFID數(shù)據(jù)的格式均是以〈reader, epc, time)三元組作為元數(shù)據(jù)存在,reader表示閱讀器ID,epc表示RFID數(shù)據(jù)編碼,兩者都可以唯一標(biāo)識(shí),time則是表示閱讀器讀到的時(shí)間戳。閱讀器是以這樣的格式將RFID數(shù)據(jù)傳送到中間件。進(jìn)ー步作為優(yōu)選的實(shí)施方式,所述根據(jù)該RFID數(shù)據(jù)的狀態(tài)對(duì)其進(jìn)行冗余數(shù)據(jù)過濾處理包括
當(dāng)RFID數(shù)據(jù)被首次讀取之前,RFID數(shù)據(jù)處于未知狀態(tài);當(dāng)中間件接收到RFID數(shù)據(jù)〈reader,epc, time)吋,首先按映射函數(shù)從多階哈希表中查找該RFID數(shù)據(jù)是否存在,若找到則判定該RFID數(shù)據(jù)處于捕捉或者已存在狀態(tài),若未找到則判定該RFID數(shù)據(jù)處于未知狀態(tài);
在未知狀態(tài)下,將該RFID數(shù)據(jù)根據(jù)映射函數(shù)存儲(chǔ)到多階哈希表中,并為該RFID數(shù)據(jù)生成標(biāo)簽節(jié)點(diǎn),設(shè)定標(biāo)簽節(jié)點(diǎn)數(shù)據(jù)為tagCnt=l,更新tFirstRead和tLastRead為當(dāng)前的讀取時(shí)間currentTime。將該RFID數(shù)據(jù)在整個(gè)數(shù)據(jù)傳輸通道中作為冗余數(shù)據(jù)過濾掉,轉(zhuǎn)入捕捉狀態(tài);
在捕捉狀態(tài)下,判斷最近兩次RFID數(shù)據(jù)的讀取時(shí)間差是否超過時(shí)間閾值,若是則將該RFID數(shù)據(jù)從多階哈希表中移除并轉(zhuǎn)入未知狀態(tài),若否則更新該RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn)并判斷該RFID數(shù)據(jù)的讀取次數(shù)是否達(dá)到次數(shù)閾值,若未達(dá)到次數(shù)閾值則保持捕捉狀態(tài),將該RFID數(shù)據(jù)作為冗余數(shù)據(jù)過濾掉,若達(dá)到次數(shù)閾值則將該RFID數(shù)據(jù)加入輸出隊(duì)列Queue,作為過濾后的干凈數(shù)據(jù)提供給上層系統(tǒng),并轉(zhuǎn)入已存在狀態(tài);
在已存在狀態(tài)下,判斷最近兩次RFID數(shù)據(jù)的讀取時(shí)間差是否超過時(shí)間閾值,若是則將 該RFID數(shù)據(jù)從多階哈希表中移除并轉(zhuǎn)入未知狀態(tài),若否則更新該RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn)并直接將該RFID數(shù)據(jù)作為冗余數(shù)據(jù)過濾掉。進(jìn)ー步作為優(yōu)選的實(shí)施方式,參照?qǐng)D3,所述多階哈希表的創(chuàng)建包括以下步驟 定義在多階哈希表中存儲(chǔ)RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn),所述標(biāo)簽節(jié)點(diǎn)包括標(biāo)簽ID、標(biāo)簽首
次讀取時(shí)間tFirstRead、標(biāo)簽?zāi)┐巫x取時(shí)間tLastRead及讀取次數(shù)tagCnt ;
例如,在實(shí)際應(yīng)用中可以如下設(shè)置標(biāo)簽節(jié)點(diǎn)的格式 struct TagNode {
tagld : long //標(biāo)簽ID,也是哈希表的key
tFirstRead: time //表示標(biāo)簽節(jié)點(diǎn)首次讀到時(shí)間,作為時(shí)間閾值
T threshold
計(jì)時(shí)起始時(shí)刻
tLastRead: time //記錄標(biāo)簽節(jié)點(diǎn)最后一次讀取的時(shí)間
tagCnt: long //記錄標(biāo)簽節(jié)點(diǎn)在ー個(gè)時(shí)間閾值T threshaLd所讀取的次數(shù)
}
設(shè)定時(shí)間閾值T threshaLd、次數(shù)閾值TagCntttoestold及標(biāo)簽數(shù)據(jù)規(guī)模DataScaleSize,所述時(shí)間閾值T ttesh()ld表征在該時(shí)間內(nèi)ー個(gè)RFID數(shù)據(jù)多次被讀取則認(rèn)定為重復(fù)數(shù)據(jù),可以直
接過濾棹。如果連續(xù)兩次讀取到的時(shí)間差值超出該時(shí)間閾值T thMstold,則認(rèn)為是不同的事
件。該值可以根據(jù)實(shí)際的業(yè)務(wù)情況進(jìn)行調(diào)整,獲取靜態(tài)的數(shù)據(jù)如掃描庫存可以相應(yīng)増大其閾值,獲取動(dòng)態(tài)的數(shù)據(jù)如傳輸帶的RFID數(shù)據(jù)則需要調(diào)小該閾值。所述次數(shù)閾值TagCntttoestold表征只有讀取次數(shù)達(dá)到該數(shù)值的RFID數(shù)據(jù)為穩(wěn)定數(shù)據(jù),才確認(rèn)讀取到該RFID數(shù)據(jù),若低于該閾值則認(rèn)為誤讀的數(shù)據(jù),該閾值可以根據(jù)實(shí)際的業(yè)務(wù)進(jìn)行調(diào)整;所述標(biāo)簽數(shù)據(jù)規(guī)模DataScaleSize表征該多階哈希表內(nèi)標(biāo)簽節(jié)點(diǎn)的容量;設(shè)定多階哈希表的最大桶數(shù)M和階數(shù)N;所述最大桶數(shù)M根據(jù)標(biāo)簽數(shù)據(jù)規(guī)模DataScaleSize來設(shè)定,一般設(shè)置M=2*DataScaleSize,同時(shí)確定哈希表的階數(shù)N,一般不宜過大,若過大,多階哈希表則可能退化成多鏈表。在內(nèi)存中申請(qǐng)M*N個(gè)存儲(chǔ)空間,以ニ維數(shù)組HashTabIe[M] [N]表示,作為存儲(chǔ)RFID數(shù)據(jù)的哈希矩陣,其中N代表哈希表的階數(shù),M代表哈希表的最大桶數(shù);
以基于標(biāo)簽ID的映射函數(shù)建立RFID數(shù)據(jù)與該RFID數(shù)據(jù)在多階哈希表中存儲(chǔ)位置的對(duì)應(yīng)關(guān)系,由于RFID數(shù)據(jù)是唯一的,以標(biāo)簽ID作為其進(jìn)入多階哈希表的key,建立映射函數(shù)f,計(jì)算出f (tagld) = (tagld+M) % primTable [η],其中tagld為標(biāo)簽ID,M為哈希表的最
大桶數(shù),primTable[n]代表該階哈希表的桶數(shù),n=l, 2,3......N。參照?qǐng)D4,計(jì)算姆階哈希表
的桶數(shù)primTable[n],即取前η個(gè)小于最大桶數(shù)M的素?cái)?shù)作為每階的桶數(shù),從大到小依次作為各階的桶數(shù),并存于數(shù)組primTable中,本作法的目的在于提供較小的哈希沖突。計(jì)算得到的f (tagld)作為hash值,即為該RFID數(shù)據(jù)在該階哈希桶中的存儲(chǔ)地址。通過映射函數(shù)f,為多階哈希表提供了 RFID數(shù)據(jù)的查詢、修改、刪除及増加的方法。優(yōu)選的,所述時(shí)間閾值T threshold>次數(shù)閾值TagCntthreshtjld及標(biāo)簽數(shù)據(jù)規(guī)模DataScaleSize可以根據(jù)實(shí)際應(yīng)用情況而調(diào)整。圖5是本發(fā)明基于多階哈希表的冗余數(shù)據(jù)過濾方法優(yōu)選實(shí)實(shí)施例的步驟流程圖,參照?qǐng)D5
根據(jù)實(shí)際的RFID業(yè)務(wù)用途,確定預(yù)設(shè)的參數(shù),包括取有效讀取時(shí)間閾值T threstold,確認(rèn)
數(shù)據(jù)有效的次數(shù)閾值TagCntttoestold,以及標(biāo)簽數(shù)據(jù)規(guī)模DataScaleSize在內(nèi)存中創(chuàng)建多階哈希表,并創(chuàng)建對(duì)RFID數(shù)據(jù)進(jìn)行查詢、修改、刪除等操作的標(biāo)簽節(jié)點(diǎn)。如圖2所示,定義RFID數(shù)據(jù)的狀態(tài)轉(zhuǎn)換的狀態(tài)機(jī),確定RFID數(shù)據(jù)過濾的準(zhǔn)則。當(dāng)有RFID數(shù)據(jù)<readern, epcn, timen>到來時(shí),首先確認(rèn)該RFID數(shù)據(jù)的狀態(tài),通過查詢?cè)揜FID數(shù)據(jù)在哈希表中存不存在,以及讀取的時(shí)間,及以讀取次數(shù)來確認(rèn)。而在進(jìn)一步確認(rèn)RFID數(shù)據(jù)的狀態(tài)之前,需要先判斷該RFID數(shù)據(jù)是否處于有效的
讀取間隔內(nèi),即最新的讀取時(shí)間與最后一次的讀取間隔若超過時(shí)間閾值T threslTOld,若超過即則表示之前RFID數(shù)據(jù)的讀取記錄已失效,其作為首次讀取進(jìn)行處理。ij)該RFID數(shù)據(jù)不在哈希表中,則表示該RFID數(shù)據(jù)處于unknown狀態(tài);
:f.該RFID數(shù)據(jù)在哈希表中,但在有效讀取時(shí)間內(nèi)的讀取次數(shù)小于確認(rèn)數(shù)據(jù)有效的讀取次數(shù)閾值,則表示該RFID數(shù)據(jù)處于captured狀態(tài);
亥RFID數(shù)據(jù)在哈希表中,但在有效讀取時(shí)間內(nèi)的讀取次數(shù)大于確認(rèn)數(shù)據(jù)有效的讀取次數(shù)閾值,則表示該RFID數(shù)據(jù)處于observed狀態(tài)。確定RFID數(shù)據(jù)的狀態(tài)以后,對(duì)哈希表中該標(biāo)簽節(jié)點(diǎn)的最新讀取時(shí)間和讀取次數(shù)進(jìn)行更新,通過查看標(biāo)簽節(jié)點(diǎn)的總的讀寫次數(shù)及讀取的時(shí)間間隔,如圖2所示,確定RFID數(shù)據(jù)的狀態(tài)轉(zhuǎn)換過程。QJ當(dāng)RFID數(shù)據(jù)處于unknown狀態(tài)時(shí),則將其按應(yīng)設(shè)函數(shù)f計(jì)算出的存儲(chǔ)位置加
入多階哈希表中,設(shè)定其的讀取次數(shù)tagCnt為I次,更新tFirstRead和tLastRead為當(dāng)前的讀取時(shí)間currentTime,該RFID數(shù)據(jù)作為冗余數(shù)據(jù)被暫時(shí)過濾掉并轉(zhuǎn)入captured狀態(tài)。(f;當(dāng)RFID數(shù)據(jù)處于captured狀態(tài)時(shí),表明在多階哈希表中已存在該RFID 數(shù)據(jù),判斷讀取時(shí)間間隔是否在時(shí)間閾值T threshoid內(nèi),若currentTime_tLastRead> T
threshold 表明該rFID數(shù)據(jù)已失效,更新為unknown狀態(tài),并將數(shù)據(jù)過濾處理;若
currentTime-tLastRead ^ T tJireshold,更新讀取次數(shù) tagCnt=tagCnt+l, tLastRead 為
currentTime,再判斷讀取次數(shù)tagCnt是否剛好到達(dá)有效讀取的次數(shù)閾值TagCntthreshtjld,如若剛好,該RFID數(shù)據(jù)轉(zhuǎn)入observed狀態(tài),該RFID數(shù)據(jù)作為過濾后的干凈數(shù)據(jù)加入隊(duì)列Queue中,供上層業(yè)務(wù)系統(tǒng)調(diào)用;如若小于有效讀取的次數(shù)閾值TagCntthreshtjld,則該RFID數(shù)據(jù)仍然處于observed狀態(tài),此時(shí)該RFID數(shù)據(jù)仍然作為不穩(wěn)定數(shù)據(jù),被暫時(shí)過濾掉。φ當(dāng)RFID數(shù)據(jù)處于observed狀態(tài)時(shí),表明在多階哈希表中已存在該RFID數(shù)據(jù),且讀到的次數(shù)超過了次數(shù)閾值,此時(shí)再次讀到該RFID數(shù)據(jù),判斷讀取時(shí)間間隔是否在時(shí)間閾值T threshold 內(nèi),若 currentTime-tLastRead〉T threshoid,表明該 rFID 數(shù)據(jù)已失效,更新為
unknown狀態(tài),并將數(shù)據(jù)過濾處理;若currentTime-tLastRead threshold,更新讀取次數(shù)
tagCnt=tagCnt+l, tLastRead為currentTime,該RFID數(shù)據(jù)作為冗余數(shù)據(jù)過濾掉,在實(shí)際的應(yīng)用中,絕大多數(shù)的RFID數(shù)據(jù)均處于該狀態(tài)。本方法通過將多階哈希表作為RFID中間件的過濾通道,快速有效實(shí)現(xiàn)了海量冗余RFID數(shù)據(jù)的準(zhǔn)確過濾,大大減少了網(wǎng)絡(luò)的傳輸量,降低了業(yè)務(wù)的數(shù)據(jù)處理規(guī)模,節(jié)省了大量的處理時(shí)間。下面結(jié)合圖6說明ー下本發(fā)明的ー個(gè)具體實(shí)例。第一歩,對(duì)于本發(fā)明的ー些與RFID實(shí)際應(yīng)用規(guī)模跟場(chǎng)景等關(guān)系密切參數(shù)進(jìn)行配
置,本實(shí)例確定有效的讀取時(shí)間閾值T tlireshold為100s,有效讀取次數(shù)閾值TagCntth-設(shè)
置為5,哈希桶的階數(shù)為10,假定標(biāo)簽數(shù)據(jù)規(guī)模DataScaleSize為10000,則設(shè)最大的哈希桶數(shù)M為20000,則可以以ニ維數(shù)組HashTable [20000] [10]表示。計(jì)算每階的桶數(shù),在本實(shí)例中,以20000作為最大的桶數(shù),則每I階到第10階哈希桶的桶數(shù)依次設(shè)定為 19997,19993,19991,19979,19973,19963,19961,19949,19937,19927,存儲(chǔ)在primTable數(shù)組中。
假若在IOS同時(shí)有ー批RFID數(shù)據(jù)到來,如100個(gè)標(biāo)簽ID值為0000000100的RFID數(shù)據(jù),99個(gè)標(biāo)簽ID值為000000099的RFID數(shù)據(jù),98個(gè)標(biāo)簽ID值為00000000098的RFID數(shù)據(jù),……2個(gè)標(biāo)簽ID值為0000000002的RFID數(shù)據(jù),I個(gè)標(biāo)簽ID值為0000000001的RFID數(shù)據(jù),舉例對(duì)于標(biāo)簽ID值為0000000100的RFID數(shù)據(jù),按照f (tagld) = (tagld+M)%primTable [η],其在第一階哈希桶的索引位置index= (100+20000) % 19997,即是第一階哈
希桶位置 103,同理 0000000099 在位置 102,0000000098 在位置 101......,0000000001 在
位置4。因?yàn)樵O(shè)定讀取有效次數(shù)的閾值為5次,則5次以下的RFID數(shù)據(jù)均只存儲(chǔ)于哈希
表中,并不輸出。經(jīng)過過濾后輸出在隊(duì)列中,只有(0000000100,000000099......000000006, 000000005)共96個(gè)RFID數(shù)據(jù)值,數(shù)據(jù)的規(guī)模大大減低。標(biāo)簽ID值范圍為000000005-0000000100的RFID數(shù)據(jù)此時(shí)均處observed狀態(tài),若此時(shí)在該范圍的RFID數(shù)據(jù)到達(dá)中間件,其將均為冗余數(shù)據(jù)過濾棹。而標(biāo)簽ID值000000001-000000004的RFID數(shù)據(jù)則處于captured狀態(tài),假若此時(shí)標(biāo)簽ID值為0000000004的RFID數(shù)據(jù)傳到中間件,則其值剛好到達(dá)有效次數(shù)的閾值,其將作為干凈數(shù)據(jù)加入到隊(duì)列中,其RFID數(shù)據(jù)轉(zhuǎn)為observed狀態(tài)。若是有標(biāo)簽ID值為0000000003的RFID數(shù)據(jù)到來,總的讀寫次數(shù)只有4次,仍然處于captured狀態(tài),其仍然作為不穩(wěn)定數(shù)據(jù)被過濾掉。若此時(shí)有標(biāo)簽ID值為000000101的RFID數(shù)據(jù)到來,因?yàn)樵诠1碇袥]有該RFID數(shù)據(jù)的讀取記錄,所以在讀取前處于unknown狀態(tài),此時(shí)將其加入哈希表中,該RFID數(shù)據(jù)狀態(tài)也轉(zhuǎn)為captured。假若在IOOs有效讀取時(shí)間閾值T threshold內(nèi),均沒有標(biāo)簽ID值為0000000100的
RFID數(shù)據(jù)讀取記錄,IOls以后,當(dāng)標(biāo)簽ID值為0000000100的RFID數(shù)據(jù)再次被讀取到的時(shí)候,由于超過有效的讀取時(shí)間閾值,所以該RFID數(shù)據(jù)讀取記錄實(shí)際已經(jīng)失效,處于unknow狀態(tài),此時(shí)再次讀到,則作為首次讀到處理,其讀取次數(shù)設(shè)置為1,首次讀取時(shí)間,最新讀取時(shí)間均會(huì)設(shè)置為當(dāng)前的時(shí)間,該RFID數(shù)據(jù)將轉(zhuǎn)入captured狀態(tài)。若此時(shí)有標(biāo)簽ID值為000020097的RFID數(shù)據(jù)到來,從第一階哈希表開始計(jì)算,其index= (20097+20000) % 19997其值為103,因?yàn)樵谠撏耙延?000000100的RFID數(shù)據(jù),處于哈希沖突,接著計(jì)算第2階,其index= (20097+20000)% 19993,其值為111,所以該RFID數(shù)據(jù)存儲(chǔ)在第二階的索引位置為111的位置中。本發(fā)明通過構(gòu)造多階哈希表的數(shù)據(jù)結(jié)構(gòu)作為過濾的管道,實(shí)現(xiàn)了海量冗余RFID數(shù)據(jù)的過濾,大大減少了網(wǎng)絡(luò)的傳輸量,從而為上層應(yīng)用提供了更為干凈,有價(jià)值的RFID數(shù)據(jù)。本發(fā)明通過定義RFID數(shù)據(jù)的狀態(tài),通過設(shè)定時(shí)間閾值和讀取次數(shù)閾值,可以有效的過濾那些由于RFID技術(shù)的天生的不穩(wěn)定,不可靠所帶來的誤讀,多讀等情況,帶來更干凈的數(shù)據(jù)。根據(jù)算法的評(píng)價(jià)標(biāo)準(zhǔn),衡量ー個(gè)數(shù)據(jù)處理算法的優(yōu)劣主要有三個(gè)方面的參數(shù)吋間復(fù)雜度、空間復(fù)雜度和平均查找長(zhǎng)度。本發(fā)明的三個(gè)評(píng)價(jià)指標(biāo)如下;!;時(shí)間復(fù)雜度本發(fā)明采用多階哈希表,動(dòng)態(tài)匹配RFID數(shù)據(jù)的規(guī)模,有效利用RFID數(shù)據(jù)獨(dú)ー無ニ的特性,將其標(biāo)簽ID作為key,在設(shè)計(jì)多階哈希表的時(shí)候,使得每階的桶的個(gè)數(shù)是質(zhì)數(shù),這樣利用key%桶的個(gè)數(shù)得出在哈希桶的索引位置,使得每個(gè)RFID數(shù)據(jù)在哈希表的位置足夠散射,最大程度了減少?zèng)_突,實(shí)現(xiàn)簡(jiǎn)單,經(jīng)過測(cè)試對(duì)比,其查找效率在可維持在常數(shù)數(shù)量級(jí),即0(1)的時(shí)間復(fù)雜度,相比于線性鏈表的0(n),樹結(jié)構(gòu)的0(lgn),效率相比之下有質(zhì)的提升。(I)空間復(fù)雜度哈希函數(shù)的本質(zhì)在以空間換取時(shí)間,通過引進(jìn)多個(gè)哈希桶作為輔助空間,空間復(fù)雜度為0(n)
平均查找長(zhǎng)度平均查找長(zhǎng)度是指對(duì)一個(gè)結(jié)構(gòu)內(nèi)的所有節(jié)點(diǎn)的查找長(zhǎng)度按查找概
率的加權(quán)值。在一般的情況下,本發(fā)明在常數(shù)的時(shí)間內(nèi)均可以通過哈希映射找到目標(biāo)標(biāo)簽的存儲(chǔ)位置。最壞的情況是就是需要查找η次,η代表哈希表的階數(shù)。以上是對(duì)本發(fā)明的較佳實(shí)施進(jìn)行了具體說明,但本發(fā)明創(chuàng)造并不限于所述實(shí)施 例,熟悉本領(lǐng)域的技術(shù)人員在不違背本發(fā)明精神的前提下還可以作出種種的等同變形或替換,這些等同的變形或替換均包含在本申請(qǐng)權(quán)利要求所限定的范圍內(nèi)。
權(quán)利要求
1.一種用于RFID中間件的冗余數(shù)據(jù)過濾方法,其特征在于,包括以下步驟 在內(nèi)存中創(chuàng)建用于存儲(chǔ)來自閱讀器的RFID數(shù)據(jù)的多階哈希表,所述多階哈希表內(nèi)創(chuàng)建有用于查詢、刪除該RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn); 判斷是否有RFID數(shù)據(jù)流,若否則結(jié)束進(jìn)程,若是則執(zhí)行下ー步驟; 根據(jù)RFID數(shù)據(jù)的標(biāo)簽ID查詢多階哈希表中的標(biāo)簽節(jié)點(diǎn),判斷RFID數(shù)據(jù)流中各RFID數(shù)據(jù)的狀態(tài); 根據(jù)各RFID數(shù)據(jù)的狀態(tài)對(duì)其進(jìn)行冗余數(shù)據(jù)過濾處理。
2.根據(jù)權(quán)利要求I所述的ー種用于RFID中間件的冗余數(shù)據(jù)過濾方法,其特征在于所述標(biāo)簽ID為用于唯一標(biāo)識(shí)該RFID數(shù)據(jù)的ニ進(jìn)制序列,所述RFID數(shù)據(jù)在多階哈希表中的存儲(chǔ)位置為基于標(biāo)簽ID的映射函數(shù)。
3.根據(jù)權(quán)利要求I所述的ー種用于RFID中間件的冗余數(shù)據(jù)過濾方法,其特征在于所述多階哈希表中定義的標(biāo)簽節(jié)點(diǎn)包括標(biāo)簽ID、標(biāo)簽首次讀取時(shí)間、標(biāo)簽?zāi)┐巫x取時(shí)間及讀取次數(shù)。
4.根據(jù)權(quán)利要求I所述的ー種用于RFID中間件的冗余數(shù)據(jù)過濾方法,其特征在于所述RFID數(shù)據(jù)的狀態(tài)包括未知、捕捉和已存在;所述未知狀態(tài)是指該RFID數(shù)據(jù)未存在多階哈希表中;所述捕捉狀態(tài)是指該RFID數(shù)據(jù)在多階哈希表中已存在但未被確認(rèn);所述已存在狀態(tài)是指該RFID數(shù)據(jù)在多階哈希表中已被確認(rèn)。
5.根據(jù)權(quán)利要求4所述的ー種用于RFID中間件的冗余數(shù)據(jù)過濾方法,其特征在于,所述根據(jù)各RFID數(shù)據(jù)的狀態(tài)對(duì)其進(jìn)行冗余數(shù)據(jù)過濾處理包括 在未知狀態(tài)下,將該RFID數(shù)據(jù)存儲(chǔ)到多階哈希表中,并為該RFID數(shù)據(jù)生成標(biāo)簽節(jié)點(diǎn),將該RFID數(shù)據(jù)在整個(gè)數(shù)據(jù)傳輸通道中作為冗余數(shù)據(jù)過濾掉,轉(zhuǎn)入捕捉狀態(tài); 在捕捉狀態(tài)下,判斷最近兩次RFID數(shù)據(jù)的讀取時(shí)間差是否超過時(shí)間閾值,若是則將該RFID數(shù)據(jù)從多階哈希表中移除并轉(zhuǎn)入未知狀態(tài),若否則更新該RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn)并判斷該RFID數(shù)據(jù)的讀取次數(shù)是否達(dá)到次數(shù)閾值,若未達(dá)到次數(shù)閾值則保持捕捉狀態(tài),將該RFID數(shù)據(jù)作為冗余數(shù)據(jù)過濾掉,若達(dá)到次數(shù)閾值則將該RFID數(shù)據(jù)加入輸出隊(duì)列,作為過濾后的干凈數(shù)據(jù)提供給上層系統(tǒng),并轉(zhuǎn)入已存在狀態(tài); 在已存在狀態(tài)下,判斷最近兩次RFID數(shù)據(jù)的讀取時(shí)間差是否超過時(shí)間閾值,若是則將該RFID數(shù)據(jù)從多階哈希表中移除并轉(zhuǎn)入未知狀態(tài),若否則更新該RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn)并直接將該RFID數(shù)據(jù)作為冗余數(shù)據(jù)過濾掉。
6.根據(jù)權(quán)利要求I所述的ー種用于RFID中間件的冗余數(shù)據(jù)過濾方法,其特征在于所述多階哈希表的創(chuàng)建包括以下步驟 定義在多階哈希表中存儲(chǔ)RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn),所述標(biāo)簽節(jié)點(diǎn)包括標(biāo)簽ID、標(biāo)簽首次讀取時(shí)間、標(biāo)簽?zāi)┐巫x取時(shí)間及讀取次數(shù); 設(shè)定時(shí)間閾值、次數(shù)閾值及標(biāo)簽數(shù)據(jù)規(guī)模,所述時(shí)間閾值表征在該時(shí)間內(nèi)ー個(gè)RFID數(shù)據(jù)多次被讀取則認(rèn)定為重復(fù)數(shù)據(jù);所述次數(shù)閾值表征只有讀取次數(shù)達(dá)到該數(shù)值的RFID數(shù)據(jù)為穩(wěn)定數(shù)據(jù);所述標(biāo)簽數(shù)據(jù)規(guī)模表征該多階哈希表內(nèi)標(biāo)簽節(jié)點(diǎn)的容量; 設(shè)定多階哈希表的最大桶數(shù)M和階數(shù)N ; 在內(nèi)存中申請(qǐng)M*N個(gè)存儲(chǔ)空間,以ニ維數(shù)組HashTable [M] [N]表示,作為存儲(chǔ)RFID數(shù)據(jù)的多階哈希矩陣;以基于標(biāo)簽ID的映射函數(shù)建立RFID數(shù)據(jù)與該RFID數(shù)據(jù)在多階哈希表中存儲(chǔ)位置的對(duì)應(yīng)關(guān)系。
7.根據(jù)權(quán)利要求6所述的ー種用于RFID中間件的冗余數(shù)據(jù)過濾方法,其特征在于所述時(shí)間閾值、次數(shù)閾值及標(biāo)簽數(shù)據(jù)規(guī)??梢哉{(diào)整。
全文摘要
本發(fā)明公開了一種用于RFID中間件的冗余數(shù)據(jù)過濾方法,包括以下步驟在內(nèi)存中創(chuàng)建用于存儲(chǔ)RFID數(shù)據(jù)的多階哈希表,所述多階哈希表內(nèi)創(chuàng)建有該RFID數(shù)據(jù)的標(biāo)簽節(jié)點(diǎn);判斷是否有RFID數(shù)據(jù)流,若否則結(jié)束進(jìn)程,若是則執(zhí)行下一步驟;判斷RFID數(shù)據(jù)流中各RFID數(shù)據(jù)的狀態(tài);根據(jù)各RFID數(shù)據(jù)的狀態(tài)對(duì)其進(jìn)行冗余數(shù)據(jù)過濾處理。通過在內(nèi)存中建立多階哈希表,將中間件接收的RFID數(shù)據(jù)分配到多階哈希表中,并通過判斷該RFID數(shù)據(jù)的狀態(tài)進(jìn)行冗余數(shù)據(jù)過濾處理,實(shí)現(xiàn)了海量冗余RFID數(shù)據(jù)的過濾,大大減少了網(wǎng)絡(luò)的傳輸量,從而為上層應(yīng)用提供了更為干凈、更有價(jià)值的RFID數(shù)據(jù),并且本發(fā)明方法通過利用多階哈希表的存儲(chǔ)結(jié)構(gòu),大大提升了RFID數(shù)據(jù)的過濾效率。
文檔編號(hào)G06F17/30GK102662988SQ20121006665
公開日2012年9月12日 申請(qǐng)日期2012年3月14日 優(yōu)先權(quán)日2012年3月14日
發(fā)明者江煉鑫 申請(qǐng)人:中山大學(xué)