黨玉龍 河南省公安廳科技信息化處
近年來,各省、各地公安機(jī)關(guān)都接入或采集了各種內(nèi)外部信息,這些信息種類數(shù)以千計,并灌入到公安資源服務(wù)平臺(以下簡稱“平臺”)中,用以向客戶提供單表的請求服務(wù)和全文檢索。隨著大數(shù)據(jù)時代的到來,給平臺管理者就如何進(jìn)行大數(shù)據(jù)挖掘和綜合利用,提出了更高要求。雖有全文檢索,但因其先天特性,無法滿足深度分析研判需求,同樣面對紛繁復(fù)雜、各式各樣的結(jié)構(gòu)化數(shù)據(jù),擺在管理者面前的問題依然很多:
(1)各行業(yè)數(shù)據(jù)種類越來越多,一些數(shù)據(jù)沒有標(biāo)準(zhǔn),導(dǎo)致無法立即入庫,不能發(fā)揮作用。
(2)因數(shù)據(jù)種類太多,字段數(shù)量更是數(shù)以萬計,字段類型也千差萬別,必然導(dǎo)致數(shù)據(jù)分析師無法記住這些龐大復(fù)雜的數(shù)據(jù)表及其字段,進(jìn)而在應(yīng)急事件中,不能很快地分析現(xiàn)有數(shù)據(jù),錯失戰(zhàn)機(jī)。
(3)對數(shù)據(jù)種類不同但相似的信息,數(shù)據(jù)分析師往往要用近似程序?qū)Σ煌瑪?shù)據(jù)進(jìn)行多次程序開發(fā)與分析。
(4)數(shù)據(jù)分析師不能橫向?qū)⑼环秶攸c的不同數(shù)據(jù),或同一范圍時間的不同數(shù)據(jù),一次性簡單地查找、統(tǒng)計、分析出結(jié)果。如某犯罪分子1月在北京作案,2月在鄭州作案,3月在上海作案,破案方法是要碰撞這3地相應(yīng)時間的活動軌跡,但犯罪分子一定不會告訴警察,他會出現(xiàn)在哪個數(shù)據(jù)表中,是旅店還是交水費(fèi),亦或租車。所以,再好的程序員也難以寫出精確的碰撞程序。
在長期的偵查和服務(wù)實踐中,我們總結(jié)出公安信息化的查詢或分析,最重要的是找到3樣?xùn)|西:軌跡、關(guān)系、屬性。而所有各式各樣的信息種類歸納起來,無非也是上述3樣?xùn)|西。
既然是軌跡,核心必然是什么人物,在什么時間,在什么地點,做了什么事情,可以簡稱為4W,即Who(誰)、When(時間)、Where(地點)、What(什么事)。上述中的“人物”,并非一定是人,也可能是物,還有可能既包含人還包含物。需要說明的是,一個表中的4W除了What外,其他的3種W都不一定只有1個字段。如一個人的住店軌跡,時間就會有2個,一個是開房時間,另一個是退房時間(2個時間);一個人的乘車軌跡,地點也必然存在著出發(fā)地和目的地(2個地點);一輛車在車管所登記后,它除了有登記時間外,還關(guān)聯(lián)著車主的身份證號(2個人/物);而在通話記錄中,則會同時包含主叫號被叫號(2個人物),開始結(jié)束時間(2個時間),主叫地被叫地(2個地點)。
這3樣?xùn)|西看似各不相干,實則有內(nèi)在聯(lián)系。
1. 軌跡和關(guān)系的關(guān)聯(lián)
關(guān)系的產(chǎn)生不是憑空的,而是有依據(jù)的。如①某二人有通話記錄,說明他們有關(guān)系,但通話記錄是有時間、地點的;②車主信息中,車和人在車輛登記的那一刻產(chǎn)生了關(guān)系;③某人在某天替他人代繳了一次違章罰款,于是此人在與此車產(chǎn)生關(guān)系的同時,與他人也間接產(chǎn)生了關(guān)系。
綜上,關(guān)系的產(chǎn)生也是有時間、地點、人物的,所以關(guān)系也是一種特殊的軌跡,只不過關(guān)系是必然含有2個以上人物的軌跡。
2. 屬性與關(guān)系、軌跡的錯綜關(guān)聯(lián)
無論是人,或者車、手機(jī)等物體,都有各自的屬性。如人有身份證號、住址、出生日期、國籍等基本屬性,也有包含關(guān)系的戶號、手機(jī)號、擁有車輛等關(guān)系屬性。
(1) 有時屬性分不清是基本屬性還是關(guān)聯(lián)屬性
比較直觀的是戶號,這個戶號可以關(guān)聯(lián)到全家人;擁有的手機(jī)號也比較直觀,因為手機(jī)號可以關(guān)聯(lián)到其他打給這個電話的人,還包括其他具有唯一意義的號碼。這些號碼屬性可以說既是人物的屬性,也是一種關(guān)系,這個屬性維系了他和其他人物的關(guān)系。
但其他不是號碼的屬性,如國籍、是否聾啞人、種族、學(xué)歷、職業(yè)等,看似與關(guān)系不搭邊,實則在特定條件下也是一種關(guān)系。如果一個房間中有5個人,其中3個中國人,2個美國人,則我們第一印象就是把他們分成了2撥,每一撥之間的關(guān)聯(lián)關(guān)系,靠的就是國籍;同理,房間中有4個人,2個博士,2個文盲,我們同樣也會以此屬性作為關(guān)聯(lián)依據(jù)。
在現(xiàn)實生活中,人與人之間通常用姓名作為稱呼,而不是通過喊身份證號作為區(qū)別,是因為在某個朋友圈中,姓名重復(fù)的很少;而當(dāng)數(shù)據(jù)量極大時,則只能用某個具有唯一標(biāo)識的號碼來替代某個具體的人物。
綜上,屬性也是一種關(guān)系的維系依據(jù),只是有些用號碼來替代,有些用文字來替代。
(2) 有時屬性分不清僅是附屬性質(zhì)還是軌跡
一個人有一個戶籍信息,是基本屬性信息表,但必然有其何時在何地辦理戶籍的軌跡。一條110接警信息,我們通常認(rèn)為是基本信息,不屬于軌跡信息,但這條信息中,一定含有某個手機(jī)號在什么時間什么地點打了110電話,這樣一個軌跡信息。某個人的學(xué)歷,一定隱藏了什么時間在哪個學(xué)校畢業(yè)的信息;某個人的已婚婚姻狀況,一定包含了什么時間在哪里辦理結(jié)婚登記。
所以,屬性還是一種軌跡。
綜上所述,筆者認(rèn)為軌跡、關(guān)系、屬性三者之間的關(guān)聯(lián)如下圖:
如圖所示,屬性是一種特殊的關(guān)系,關(guān)系是一種特殊的軌跡,歸根到底,所有的信息都是一種軌跡。
因為軌跡一定包含人物(號碼)、時間、地點,而關(guān)系一定包含2個以上的人物(號碼),所以可以設(shè)計一種萬能表,用以容納所有各種信息表。該表結(jié)構(gòu)如下所示(含非真實示例數(shù)據(jù)):
可以看到,雖然該表能夠容納各類信息,但并非一個“大寬表”,而是除了UUID字段外,僅有10個字段的表(注: UUID唯一標(biāo)識字段,用以關(guān)聯(lián)其他表中的詳細(xì)內(nèi)容)。
假設(shè)這個萬能表叫z,則可以實現(xiàn)以下功能:
1. 可以實現(xiàn)任何種類的數(shù)據(jù)快速入庫
如上面提到的火車、旅店等軌跡信息,???、放射源等基本信息,以及無法避開的關(guān)系信息。應(yīng)急解決了標(biāo)準(zhǔn)未制訂前的入庫難題。
2. 解決“記不住”問題
因為只有1個表、10個字段,所以不存在字段記不住的情況,幫助快速實現(xiàn)大數(shù)據(jù)結(jié)構(gòu)化分析統(tǒng)計、號碼關(guān)聯(lián)碰撞等需求,舉例:
(1)2018年3月4日至5日到南陽的火車記錄
Select 名稱,號碼1,地點代碼1 as 出發(fā)地,地點代碼2 as 目 的 地 from z where類 型 ='火 車 ' and 時 間1>'20180304' and 時間1<'20180306' and 目的地 like'4113%'
(2)多地串并案件碰撞(鄭州和南陽碰撞)
select 號碼1 from (select 號碼1 from z where 類型='旅館' and 地點代碼1 like '4101%') a
join
select 號碼1 from (select 號碼1 from z where 類型='旅館' and 地點代碼1 like '4113%') b
on a.號碼1=b.號碼1
3. 解決多數(shù)據(jù)表名記不全、結(jié)果合不攏問題
可以實現(xiàn)任何種類號碼合攏(均在號碼1、號碼2內(nèi)),時間合攏(時間1、時間2),地點合攏(地點1、地點2)。如找到3月以來無論乘坐任何交通工具去北京的人:
Select * from z where 時間1>'20180301'and地點2 like '%北京%'
還可以不分類型按時間排序,直接排序(order b y)。
4. 實現(xiàn)號碼兩兩關(guān)聯(lián)的圖數(shù)據(jù)庫
因為設(shè)計有2個號碼字段,這和圖數(shù)據(jù)庫的原理是一樣的,所以可以通過迭代的方式,實現(xiàn)人員、車輛、手機(jī)號等唯一號碼的無限關(guān)聯(lián),形成關(guān)聯(lián)關(guān)系圖。
5. 基于SQL的大數(shù)據(jù)深度挖掘
因為所有數(shù)據(jù)都在這張表中,所以用戶只要會寫SQL語句,就能夠很方便地實現(xiàn)任何統(tǒng)計、分析、數(shù)據(jù)挖掘。
資源服務(wù)平臺的各類數(shù)據(jù),通常都放置在傳統(tǒng)ORACLE等事務(wù)型數(shù)據(jù)庫中,并且對車輛卡口通過信息等極速生成數(shù)據(jù)的信息,常常還會按年或季度進(jìn)行分表或表分區(qū),用以提高速度。本文所述將所有數(shù)據(jù)都放在一張表中的設(shè)計,一定不能存放在傳統(tǒng)數(shù)據(jù)庫中,否則必然導(dǎo)致檢索假死。
解決方案為:使用分布式列式數(shù)據(jù)庫。列式數(shù)據(jù)庫在數(shù)據(jù)分析、海量存儲、BI等領(lǐng)域有著顯著的優(yōu)勢[1]。列式數(shù)據(jù)庫與行式數(shù)據(jù)庫的區(qū)別如圖2所示。
這里的列式數(shù)據(jù)庫,不是指只能實現(xiàn)對一列rowkey快速檢索的Hbase數(shù)據(jù)庫,而是至少需要具備以下特點的數(shù)據(jù)庫:
1. 每一列在物理上都是列式存儲
只有這樣,才能實現(xiàn):①相同值的列壓縮,減少空間占用,更重要的是減少磁盤IO次數(shù),提高檢索速度;②在僅查詢其中1列或少數(shù)列時,數(shù)據(jù)庫只訪問涉及到的數(shù)據(jù)列,降低磁盤IO。
2. 能自動建立粗粒度索引
對每列的多個數(shù)據(jù)包均自動建有粗粒度索引,此索引記錄了該數(shù)據(jù)包的最大值、最小值、平均值、總數(shù)等。如某日期列的數(shù)據(jù)包,系統(tǒng)自動記錄最大值(2018-5-4)、最小值(2018-4-20)、總數(shù)(6.5萬行)。
3. 建立哈希索引(Hash)功能
數(shù)據(jù)庫中最常用的索引類型為B樹索引,但因其建立速度緩慢,影響數(shù)據(jù)導(dǎo)入、插入速度,所以在大數(shù)據(jù)類型的數(shù)據(jù)庫中使用較少。而哈希索引因為使用哈希函數(shù)建立,所以創(chuàng)建速度很快。哈希索引只能處理等于比較,當(dāng)使用“=”操作符進(jìn)行比較時,查詢規(guī)劃器會使用哈希索引[2]。
1. 必須在2個號碼字段上建立哈希索引
本設(shè)計中的萬能表共有2個號碼字段,用戶輸入號碼就是從這2個字段中檢索到的所有信息種類的號碼。因為用戶絕大多數(shù)輸入的都是全號碼,所以使用哈希索引是檢索最快,也是建立索引效率最高的方式。這種方式速度極快,并且避免了使用純內(nèi)存數(shù)據(jù)庫時量太大,導(dǎo)致內(nèi)存溢出的情形。
2. 將所有表中時間字段的各種數(shù)據(jù)類型,均治理為日期時間型(DateTime)
目前各地各種數(shù)據(jù)表中,日期數(shù)據(jù)格式可謂五花八門,有的是8位字符型,有的是14位字符型,有的是6位,甚至是含有漢字的字符型;有的是數(shù)字型,有的是日期型,有的是日期時間型。為便于用戶記憶,本設(shè)計中的時間格式統(tǒng)一為日期時間型。該數(shù)據(jù)類型可以兼容日期型和日期時間型,對不含時間的,可以默認(rèn)為“00:00:00”。數(shù)據(jù)庫會對日期時間型數(shù)據(jù)做優(yōu)化,檢索效率比字符型高。在實際治理過程中,必然會遇到各種莫名其妙的錯誤與失敗,但治理就是為了發(fā)現(xiàn)錯誤,提高效率。
3. 時間1字段在第一次入庫時,要基本按月導(dǎo)入,以后要準(zhǔn)實時導(dǎo)入
實踐中,除第一次導(dǎo)入外,以后不必刻意準(zhǔn)備,各類數(shù)據(jù)的時間均能大致按順序排列,不存在今天導(dǎo)入的數(shù)據(jù)會有1個月前數(shù)據(jù)的情況。這種情況,加上列式數(shù)據(jù)庫具備每個數(shù)據(jù)包頭都含有最大、最小值粗粒度索引的特性,數(shù)據(jù)庫即可快速篩選到比較精確的、很少的數(shù)據(jù)包,從而極大提高檢索速度,實現(xiàn)無索引勝似有索引的情況。
4. 在地點代碼字段上,如果數(shù)據(jù)庫有條件,要建立B樹索引
因為單位的地點代碼常常前6位都是行政區(qū)劃代碼,所以在檢索時,常常會用到like'地點代碼前4(前6)位%'。因此可以在此字段上建立具備排序功能的B樹索引。
速度:目前,河南已經(jīng)將所有類型的數(shù)據(jù)都放到了一張表中,只用了4臺2U服務(wù)器,相同內(nèi)容數(shù)據(jù)體積是存放在ORACLE數(shù)據(jù)庫中的1/6左右。單號碼檢索速度是毫秒級,百萬碰撞百萬的速度約為4秒,各類實際統(tǒng)計均未超過20秒。
效果:達(dá)到了非標(biāo)數(shù)據(jù)按此標(biāo)準(zhǔn)入庫、異類數(shù)據(jù)融合、號碼極速檢索、時間地點貫通、關(guān)系無窮迭代(圖數(shù)據(jù)庫功能)、字段容易記憶、數(shù)據(jù)容易分析的效果。在軟件實現(xiàn)上,有“表鏈圖”、“數(shù)據(jù)魔方”等具體應(yīng)用。
本設(shè)計已經(jīng)申請國家專利[3],并在河南得到了實踐,為公安信息資源平臺匯聚各地數(shù)據(jù)、治理數(shù)據(jù),并使數(shù)據(jù)快速發(fā)揮實戰(zhàn)功效,起到了很大的助推作用。在河南“吸毒人員大收戒”活動中,利用此方法自動關(guān)聯(lián)出吸毒人員1100多人,得到了公安部領(lǐng)導(dǎo)的表揚(yáng)。目前,利用此方法研發(fā)出的“表鏈圖”軟件日均使用量達(dá)3.4萬次,已經(jīng)成為各警種日常偵查破案、人員預(yù)警、重大安保工作中必備的工具。