倪路
如何在海量數(shù)據(jù)之上將動(dòng)態(tài)的數(shù)據(jù)進(jìn)行關(guān)聯(lián)融合,同時(shí)滿足融合快速、融合無信息丟失等業(yè)務(wù)要求,并將新增的數(shù)據(jù)快速融入到當(dāng)前的圖譜中,不間斷提供知識(shí)服務(wù)是目前的業(yè)界難題。百分點(diǎn)利用動(dòng)態(tài)知識(shí)譜圖技術(shù),將模型與數(shù)據(jù)進(jìn)行解耦,采用靈活的元數(shù)據(jù)管理方式,即使元數(shù)據(jù)變更,已入庫數(shù)據(jù)也無需重新入庫。
百分點(diǎn)數(shù)據(jù)集成實(shí)現(xiàn)方案整體架構(gòu),包含五個(gè)部分:
數(shù)據(jù)源:原始數(shù)據(jù),支持各種類型的數(shù)據(jù),如結(jié)構(gòu)化數(shù)據(jù),也可能是各種半結(jié)構(gòu)化的數(shù)據(jù)。同時(shí),系統(tǒng)也支持配置URL,通過互聯(lián)網(wǎng)爬取的網(wǎng)頁數(shù)據(jù)。
知識(shí)管理:知識(shí)管理的核心在于對多源異構(gòu)的數(shù)據(jù)建立統(tǒng)一的模型。
知識(shí)存儲(chǔ):核心的知識(shí)庫,原始數(shù)據(jù)經(jīng)過離線或?qū)崟r(shí)ETL處理后的轉(zhuǎn)換為知識(shí),并與庫中存量數(shù)據(jù)按照模型的配置進(jìn)行知識(shí)拉通、融合、沖突解決后,供上游系統(tǒng)消費(fèi)。
后臺(tái)管理:實(shí)現(xiàn)對系統(tǒng)的監(jiān)控、告警、日志審計(jì)以及資源管理、調(diào)度管理,并對采集到的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,以改善整個(gè)動(dòng)態(tài)知識(shí)圖譜的運(yùn)作效率。
知識(shí)應(yīng)用:支持全局知識(shí)庫聯(lián)合搜索、圖譜分析、地圖分析、知識(shí)的多維度分析、多人多機(jī)協(xié)同分析以及戰(zhàn)法分析,除通用的各種分析手段外,還支持特定行業(yè)的定制化分析應(yīng)用。
以知識(shí)管理為核心的
知識(shí)圖譜建模
本體模型是數(shù)據(jù)世界對現(xiàn)實(shí)世界的映照,同時(shí)也是一種數(shù)據(jù)的分類、建模方式。在實(shí)際項(xiàng)目中,用戶面對著海量多源的、異構(gòu)的數(shù)據(jù),非常難以進(jìn)行數(shù)據(jù)分析。
為了解決這一問題,百分點(diǎn)引入了本體模型,對異構(gòu)數(shù)據(jù)進(jìn)行統(tǒng)一建模,并在字段級(jí)別進(jìn)行了歸一化,多源異構(gòu)數(shù)據(jù)源通過抽取、轉(zhuǎn)換、清洗變成統(tǒng)一的本體模型后,可為上層應(yīng)用或分析人員提供更加友好的接口,從而提供便利。值得注意的是,在本項(xiàng)目中,本體模型是由業(yè)務(wù)人員進(jìn)行配置的。
業(yè)務(wù)人員可以建立四種類型的本體,包括實(shí)體、事件、文檔、關(guān)系,具體解釋如下:
實(shí)體指能夠獨(dú)立存在的人或事物。事件指有時(shí)間屬性,視為一種特殊的關(guān)系,用于連接實(shí)體與實(shí)體,實(shí)體與文檔。
事件主要指現(xiàn)實(shí)生活中的內(nèi)容,如發(fā)郵件、發(fā)短信、轉(zhuǎn)發(fā)帖子、發(fā)表評論等。
文檔特指非結(jié)構(gòu)化文檔,如郵件中的各種格式的附件,包括但不限于PDF文檔、Word文檔,以及各種格式的視頻、音頻。
關(guān)系指用于連接實(shí)體之間,實(shí)體與事件、文檔等的相互關(guān)系,如人與人之間的親屬關(guān)系,人與物品之間的擁有關(guān)系,人與事件之間的主導(dǎo)關(guān)系。
以車管所數(shù)據(jù)為例,通過車管所的數(shù)據(jù)可以建立一種人-車-罰單的本體模型,人與車之間為擁有關(guān)系;人與罰單之間通過“闖紅燈”事件相連接,而罰單本身則以文檔的形式展現(xiàn)。完成本體模型后,就完成了對元數(shù)據(jù)的描述。接下來,就需要將真實(shí)的數(shù)據(jù)映射到本體模型上。同時(shí),要在字段級(jí)別上對多源異構(gòu)數(shù)據(jù)進(jìn)行歸一化。
通過以上建模過程,在應(yīng)用側(cè)就建立了一個(gè)多源數(shù)據(jù)的統(tǒng)一的邏輯視圖,即從分析人員的角度對所有數(shù)據(jù)構(gòu)建成了一個(gè)圖模型,分析人員無需關(guān)注底層數(shù)據(jù)源差異和存儲(chǔ)細(xì)節(jié),只需關(guān)注如何在此圖模型上進(jìn)行分析即可。對于知識(shí)庫的存儲(chǔ)設(shè)計(jì),由HBase核心存儲(chǔ)、Elasticsearch全文索引、neo4j關(guān)系索引組成。
四種數(shù)據(jù)集成架構(gòu)
以上內(nèi)容描述了整個(gè)數(shù)據(jù)模型構(gòu)建的過程,任何數(shù)據(jù)要集成進(jìn)來,必須先進(jìn)行以上過程,在元數(shù)據(jù)層面進(jìn)行拉通、融合。接下來的問題就是如何將客戶的數(shù)據(jù)快速接入知識(shí)庫的存儲(chǔ)中去,以提供統(tǒng)一的數(shù)據(jù)查詢服務(wù),也就是數(shù)據(jù)層面的集成。
百分點(diǎn)經(jīng)歷多個(gè)大型數(shù)據(jù)集成項(xiàng)目洗禮后發(fā)現(xiàn),通常高價(jià)值密度的數(shù)據(jù),數(shù)據(jù)規(guī)模都不會(huì)太大。比如公安領(lǐng)域的重點(diǎn)人員數(shù)據(jù)、卡口設(shè)備數(shù)據(jù)、網(wǎng)絡(luò)安全領(lǐng)域的高危IP、重點(diǎn)監(jiān)控網(wǎng)站等“實(shí)體”數(shù)據(jù),此類數(shù)據(jù)特征是數(shù)據(jù)量有限,價(jià)值密度高。
因此,針對不同的數(shù)據(jù)場景,百分點(diǎn)提供了不同的數(shù)據(jù)集成方法。整體數(shù)據(jù)集成架構(gòu)如下:
小規(guī)模數(shù)據(jù)集成:這類數(shù)據(jù)往往是客戶提供了小規(guī)模的樣本,通過前臺(tái)Import功能,直接上傳各種類型的文件,即可導(dǎo)入。
高價(jià)值密度數(shù)據(jù)集成:通常是客戶提供的關(guān)鍵數(shù)據(jù),這類數(shù)據(jù)首先需要業(yè)務(wù)人員根據(jù)需求進(jìn)行建模,然后通過后臺(tái)離線/實(shí)時(shí)數(shù)據(jù)流將數(shù)據(jù)接入到本體庫中。
低價(jià)值密度數(shù)據(jù)集成:通常是“事件”數(shù)據(jù),數(shù)據(jù)量極大,并有一定時(shí)效性,需要定期House Keeping。當(dāng)前的實(shí)現(xiàn)方式是通過存放在外部OLAP型數(shù)據(jù)庫中,應(yīng)用層通過直連的方式進(jìn)行adhoc查詢,將其中有價(jià)值的數(shù)據(jù)選擇性地導(dǎo)入到本體庫中。
互聯(lián)網(wǎng)半結(jié)構(gòu)化數(shù)據(jù)集成:通過給定URL,會(huì)啟動(dòng)后臺(tái)爬蟲,爬取對應(yīng)的網(wǎng)頁存入知識(shí)庫,跟存量知識(shí)進(jìn)行協(xié)同分析。
實(shí)現(xiàn)“動(dòng)態(tài)性”的核心邏輯
百分點(diǎn)動(dòng)態(tài)知識(shí)圖譜實(shí)現(xiàn)“動(dòng)態(tài)性”的核心邏輯在于,采用元數(shù)據(jù)與存儲(chǔ)分離查詢的方案,來賦予知識(shí)圖譜“動(dòng)態(tài)”特性,包含數(shù)據(jù)模型的動(dòng)態(tài)性、模型變更的動(dòng)態(tài)性、融合的動(dòng)態(tài)性和“事件”數(shù)據(jù)的動(dòng)態(tài)性。
數(shù)據(jù)模型的動(dòng)態(tài)性 ?由于數(shù)據(jù)模型有一個(gè)專門的后臺(tái)管理系統(tǒng)進(jìn)行配置管理,業(yè)務(wù)可以根據(jù)實(shí)際客戶需求進(jìn)行模型設(shè)計(jì)與數(shù)據(jù)源接入,節(jié)省了大量開發(fā)成本。
模型變更的動(dòng)態(tài)性 ?在新增字段、修改字段、刪除字段,以及模型修改的時(shí)候,在應(yīng)用端不用重新導(dǎo)入數(shù)據(jù)。本體庫中的數(shù)據(jù)元數(shù)據(jù)的存儲(chǔ)與物理數(shù)據(jù)的存儲(chǔ)是分離的,應(yīng)用層查詢MySQL獲取元數(shù)據(jù)并進(jìn)行緩存,然后在Elasticsearch中檢索到數(shù)據(jù)后,會(huì)在應(yīng)用層的內(nèi)存中進(jìn)行元數(shù)據(jù)與物理數(shù)據(jù)的拼裝。
因此,當(dāng)元數(shù)據(jù)變更后,只需要更新MySQL數(shù)據(jù)庫與應(yīng)用層的緩存,無需對實(shí)際的物理數(shù)據(jù)進(jìn)行變更。
融合的動(dòng)態(tài)性 ?當(dāng)融合規(guī)則變更后,只需要對特定表重建索引,無需重新導(dǎo)入用戶數(shù)據(jù)。這是因?yàn)?,在HBase中是按照每種本體類型一張表進(jìn)行存儲(chǔ)的,而需要融合的數(shù)據(jù)必然是多個(gè)源的數(shù)據(jù)寫到HBase的一張表中,HBase的rowkey設(shè)計(jì)為MD5(PK),而column設(shè)計(jì)為數(shù)據(jù)源ID,因此若多源數(shù)據(jù)存在相同的主鍵,則會(huì)存儲(chǔ)到HBase同一行的不同列中。而后續(xù)的ETL任務(wù),則會(huì)將多列的數(shù)據(jù)按照融合規(guī)則進(jìn)行融合后在Elasticsearch中建立索引。不同本體數(shù)據(jù)寫入互不影響,而同一本體新增數(shù)據(jù)源,若發(fā)生融合,會(huì)寫入到不同列中。此時(shí)下一次ETL任務(wù)就會(huì)用新的數(shù)據(jù)覆蓋Elasticsearch中舊的數(shù)據(jù),完成索引重建。
“事件”數(shù)據(jù)的動(dòng)態(tài)性 ?由于本體庫中的數(shù)據(jù),是固化的高價(jià)值密度數(shù)據(jù),而“事件”數(shù)據(jù)天然是低價(jià)值密度的,并且具有時(shí)效性。
因此,為了不“污染”本體庫,在實(shí)現(xiàn)中將事件數(shù)據(jù)存放到單獨(dú)的OLAP存儲(chǔ)中,用戶可以進(jìn)行預(yù)分析,然后將其中具有價(jià)值的部分導(dǎo)入到本體庫中。
受益于這種分離存儲(chǔ)的架構(gòu),無需對客戶數(shù)據(jù)提前進(jìn)行大量轉(zhuǎn)換、融合處理,單純的寫入OLAP存儲(chǔ)是十分高效的,對1KB數(shù)據(jù)能輕松達(dá)到10萬多 TPS。
在實(shí)際的場景中,客戶當(dāng)天提供的數(shù)TB數(shù)據(jù),第二天就能完成建模、接入,實(shí)現(xiàn)應(yīng)用端可見。