基於動態知識圖譜的大規模數據集成技術

編者按
數據煙囪、信息孤島已成爲政府、企業在數據應用中不可迴避的問題,都在尋求各種方案打破現狀,實現數據融合已成當務之急。百分點在經歷多個大型數據集成項目洗禮後,已經達到了業界領先水平,通過利用動態知識譜圖技術,將模型與數據進行解耦,在業務處於探索期或業務變化十分迅速的場景下,能夠極大地提升數據集成的效率,解決海量數據動態集成的難題,並且能支持千萬級、PB級的實時導入分析。

在信息高速變化的時代,企業、政府對數據的認知是一個不斷變化的過程。通常某個數據集成項目的初期,客戶與集成方對數據、業務的認知都是不全面的,比如今天提供了人口庫的數據,明天提供車輛數據、後天又提供了卡口數據……

在這種場景下,如果利用常規的數據集成實現手段,就要調整表結構、改寫ETL任務代碼、刪除已經集成過的數據,並重新進行數據集成。但這在大規模數據集成的場景下,幾乎是不能接受的,比如已經集成數百張表、入庫10PB數據,如果要重新進行一遍集成,可能需要數以月記。這時,具備數據動態集成的能力就十分重要了。

因此,如何在海量數據之上將動態的數據進行關聯融合,同時滿足融合快速、融合無信息丟失等業務要求,並將新增的數據快速融入到當前的圖譜中,不間斷提供知識服務是目前的業界難題。

基於動態知識圖譜的數據集成實現方案

常規的數據集成方案通常有以下痛點:

  1. 只能針對特定行業的數據進行集成,一旦存在多個行業數據交叉融合,需重新定製方案;
  2. 集成方案不靈活,一旦數據發生變更或有新的數據進入,就需下線業務重新集成,成本巨大。

對此,百分點利用動態知識譜圖技術,將模型與數據進行解耦,採用靈活的元數據管理方式,即使元數據變更,已入庫數據也無需重新入庫。

百分點數據集成實現方案整體架構,包含五個部分:

數據源: 原始數據,支持各種類型的數據,如結構化數據,RDBMS、NOSQL、MQ中的數據,也可能是各種半結構化的數據,如HTML、PDF、TEXT等各種文檔或音頻、視頻等多媒體數據。同時,系統也支持配置URL,通過互聯網爬取的網頁數據。

知識管理:知識管理的核心在於對多源異構的數據建立統一的模型,並將不同的源數據映射到統一的知識模型上,最後配置知識的融合規則與衝突解決規則,以形成統一的知識體系。

知識存儲: 核心的知識庫,原始數據經過離線或實時ETL處理後的轉換爲知識,並與庫中存量數據按照模型的配置進行知識拉通、融合、衝突解決後,供上游系統消費。

後臺管理: 實現對系統的監控、告警、日誌審計以及資源管理、調度管理,並對採集到的數據進行統計分析,以改善整個動態知識圖譜的運作效率。

知識應用: 支持全局知識庫聯合搜索、圖譜分析、地圖分析、知識的多維度分析、多人多機協同分析以及戰法分析,除通用的各種分析手段外,還支持特定行業的定製化分析應用。

由上可知,整個架構中最重要的部分爲以知識管理爲核心的知識圖譜建模方式,以及知識存儲爲核心的動態存儲設計,本文也將着重對以上兩點進行解讀。

以知識管理爲核心的知識圖譜建模

本體模型是數據世界對現實世界的映照,同時也是一種數據的分類、建模方式。在實際項目中,用戶面對着海量多源的、異構的數據,非常難以進行數據分析。

爲了解決這一問題,本項目引入了本體模型,對異構數據進行統一建模,並在字段級別進行了歸一化,多源異構數據源通過抽取、轉換、清洗變成統一的本體模型後,可爲上層應用或分析人員暴露更加友好的接口,從而提供便利。

值得注意的是,在本項目中,本體模型是由業務人員進行配置的。業務人員可以建立四種類型的本體,包括實體、事件、文檔、關係,具體解釋如下:

實體:能夠獨立存在的人或事物 ,例如:

  1. 人物: 凡是可以用於標識“人”的東西,都可以當作人物,包括虛擬的社交賬號,實際中的手機號,具體的人等;
  2. 物品: 包括真實的手機,電腦,各種真實物品;也包括IM工具,各類軟件等虛擬物品;
  3. 組織: 包括真實的各類組織,如ISIS組織,政府單位,慈善組織等各類真實的組織;也包括QQ羣,聊天室等各類虛擬組織;
  4. 位置: 包括某具體的地理位置,如政府大樓;也包括LAC地址,IP地址等虛擬空間。

事件:有時間屬性,視爲一種特殊的關係,用於連接實體與實體,實體與文檔。 本項目中,事件主要指現實生活中的內容,如發郵件、發短信、轉發帖子、發表評論等。

文檔:文檔特指非結構化文檔 ,如郵件中的各種格式的附件,包括但不限於PDF文檔、Word文檔,以及各種格式的視頻、音頻。

關係:用於連接實體之間,實體與事件、文檔等的相互關係 ,如人與人之間的親屬關係,人與物品之間的擁有關係,人與事件之間的主導關係。

在創建本體時,不光要指定本體的類型,還需要對本體所包含的字段與對應的字段類型進行配置,從而進行字段級別的歸一化。此項目支持的字段類型有date、long、int、double、string和geo。特殊字段還會進行數值的歸一化,如時間格式有多種表現形式,這裏會轉換爲統一的形式,方便後續處理。

以車管所數據爲例,通過車管所的數據可以建立一種人-車-罰單的本體模型,人與車之間爲擁有關係;人與罰單之間通過“闖紅燈”事件相連接,而罰單本身則以文檔的形式展現。完成本體模型後,就完成了對元數據的描述。

接下來,就需要將真實的數據映射到本體模型上。同時,要在字段級別上對多源異構數據進行歸一化。還以車管數據爲例,具體過程如下圖所示,可以看出,通過本體映射將車管所3張表的數據映射到了 7個本體上(2個實體、3個關係、1個事件和1個文檔),並將車主名稱和姓名進行了統一,將日期的不同表示方式進行了歸一化。

通過以上建模過程,在應用側就建立了一個多源數據的統一的邏輯視圖,即從分析人員的角度對所有數據構建成了一個圖模型,分析人員無需關注底層數據源差異和存儲細節,只需關注如何在此圖模型上進行分析即可。

對於知識庫的存儲設計,由HBase核心存儲、Elasticsearch全文索引、neo4j關係索引組成。HBase存儲了完整的數據,Elasticsearch建立全文索引方便用戶搜索,neo4j建立關係索引,以加速關係查詢。

四種數據集成架構

以上內容描述了整個數據模型構建的過程,任何數據要集成進來,必須先進行以上過程,在元數據層面進行拉通、融合。

接下來的問題就是如何將客戶的數據快速接入知識庫的存儲中去,以提供統一的數據查詢服務,也就是數據層面的集成。

由於數據具有多樣化特點:

數據類型 上看,存在結構化數據、半結構化數據、非結構化數據;

業務價值 上來看,又分爲高價值密度數據,如賬戶信息、轉賬信息、低價值密度數據,如日誌信息;

數據規模 上來看,有超大規模數據,如萬億級數據,大規模數據,如億級數據,小規模數據,如百萬級以下數據。

百分點經歷多個大型數據集成項目洗禮後發現,通常高價值密度的數據,數據規模都不會太大。比如公安領域的重點人員數據、卡口設備數據、網絡安全領域的高危IP、重點監控網站等“實體”數據,此類數據特徵是數據量有限,價值密度高。

而如果數據規模超過10億級,通常都是“事件”類型的數據,比如車輛通過卡口的事件、手機連wifi的事件和手機上網的HTTP日誌。這類數據還有一個典型特徵,就是數據量巨大且無限增長,但數據價值密度很低,通常也只關心最近一段時間的日誌。

因此,針對不同的數據場景,百分點提供了不同的數據集成方法,分別應對不同場景下的數據集成需求。

整體數據集成架構如下:

小規模數據集成: 這類數據往往是客戶提供了小規模的樣本,通過前臺Import功能,直接上傳各種類型的文件,即可導入。

高價值密度數據集成: 通常是客戶提供的關鍵數據,這類數據首先需要業務人員根據需求進行建模,然後通過後臺離線/實時數據流將數據接入到本體庫中。

低價值密度數據集成: 通常是“事件”數據,數據量極大,並有一定時效性,需要定期House Keeping。當前的實現方式是通過存放在外部OLAP型數據庫中,應用層通過直連的方式進行adhoc查詢,將其中有價值的數據選擇性地導入到本體庫中。

互聯網半結構化數據集成: 通過給定URL,會啓動後臺爬蟲,爬取對應的網頁進入知識庫,跟存量知識進行協同分析。

實現“動態性”的核心邏輯

百分點動態知識圖譜實現“動態性”的核心邏輯在於,採用元數據與存儲分離查詢的方案,來賦予知識圖譜“動態”特性,包含數據模型的動態性、模型變更的動態性、融合的動態性和“事件”數據的動態性。

1 數據模型的動態性

由於數據模型有一個專門的後臺管理系統進行配置管理,業務可以根據實際客戶需求進行模型設計與數據源接入,節省了大量開發成本。

2 模型變更的動態性

進行新增字段、修改字段、刪除字段,以及模型修改的時候,在應用端不用重新導入數據。

實現方式如下:

本體庫中的數據元數據的存儲與物理數據的存儲是分離的,應用層查詢MySQL獲取元數據並進行緩存,然後在Elasticsearch中檢索到數據後,會在應用層的內存中進行元數據與物理數據的拼裝。

因此,當元數據變更後,只需要更新MySQL數據庫與應用層的緩存,無需對實際的物理數據進行變更。

這裏需要注意的是,在Elasticsearch中存儲的是融合完成的數據。因此當融合規則變更後,需要重建索引。

3 融合的動態性

當融合規則變更後,只需要對特定表重建索引,無需重新導入用戶數據。

這是因爲,在HBase中是按照每種本體類型一張表進行存儲的,而需要融合的數據必然是多個源的數據寫到HBase的一張表中,HBase的rowkey設計爲MD5(PK),而column設計爲數據源ID,因此若多源數據存在相同的主鍵,則會存儲到HBase同一行的不同列中。而後續的ETL任務,則會將多列的數據按照融合規則進行融合後在Elasticsearch中建立索引。

由此可見,不同本體數據寫入互不影響,而同一本體新增數據源,若發生融合,會寫入到不同列中。此時下一次ETL任務就會用新的數據覆蓋Elasticsearch中舊的數據,完成索引重建。而當融合規則發生變更時,同樣不需要再從客戶數據源接入數據,只需要進行索引重建即可。

4 “事件”數據的動態性

由於本體庫中的數據,是固化的高價值密度數據,而“事件”數據天然是低價值密度的,並且具有時效性。

因此,爲了不“污染”本體庫,在實現中將事件數據存放到單獨的OLAP存儲中,用戶可以進行預分析,然後將其中具有價值的部分導入到本體庫中。

受益於這種分離存儲的架構,無需對客戶數據提前進行大量轉換、融合處理,單純的寫入OLAP存儲是十分高效的,對1KB數據能輕鬆達到10W+ TPS。在實際的場景中,客戶當天提供的數TB數據,第二天就能完成建模、接入到應用端可見。

總結與展望

在本文中,我們介紹瞭如何通過知識圖譜對多源異構的數據進行數據集成,以及百分點使用知識圖譜進行數據集成的幾種方案和如何通過元數據與存儲分離查詢的方案賦予知識圖譜“動態”的特性。

從實際項目的落地情況來看,這些特性和方案無疑能很好地助力客戶落地各種場景下的數據集成、分析需求。從另一個角度講,當前方案還是有很多進步空間的,比如目前應用層的開發還需要對底層知識庫的存儲方式有很深的認識,並且應用與底層存儲耦合嚴重,若底層架構需要升級往往會影響到所有的下游應用。

未來,可將底層知識庫進行邏輯抽象,封裝出統一查詢層API,應用層可以像使用圖數據庫一樣使用知識庫,簡化與解耦應用層開發,也可助力快速開發行業應用。另外,外部的“事件”庫如何更好的與本體庫進行協同、統一管理,也是目前百分點進一步探索的方向。

本文轉載自公衆號百分點(ID:baifendian_com)。

原文鏈接

https://mp.weixin.qq.com/s/kwt5uOIf93o8XoVrNZVLhw

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章