楊素花 楊 潔 祝 琴
(北京市智慧水務發展研究院,北京 100036)
北京市南水北調水進京后,形成了外調水、本地地表水、地下水、再生水、雨洪水五水共濟的水源保障和供水體系。截至2020年底,利用南水北調中線水累計超61億m3,直接受益人口1300多萬。在五水調度的業務工作中,通過北京市南水北調智能調度、水資源統一調度平臺等信息系統的建設,積累了大量的信息資源,形成了體系化的水資源調度業務數據,包括結構化數據:配置信息、調度水量信息、調度指令信息;非結構化數據:調度規程、調度方案,以及各實體對象的關系數據。為了更好地發揮數據價值,梳理分析水資源調度關系,構建基于圖數據庫的數據、關系存儲,實現調度信息的可視化展示及關系分析,為下一步水資源知識圖譜構建提供數據基礎。
業務信息存儲體系選擇時需考慮知識可靠、可融合、可應用等問題,為表示多樣性、復雜化的水資源調度業務,選用Neo4j圖數據庫作為存儲體系[1]。Neo4j圖數據庫是一種高性能的圖形數據庫,它是可以將結構化的數據保存在網絡中,而不是關系數據庫中的數據表中[2]。
1.1.1 靈活性和適用性
傳統的關系型數據庫通過多張數據庫表來存儲結構化數據,當數據的關系復雜時,需要關聯查詢多張數據庫表,數據應用服務較為繁瑣和低效。而Neo4j圖數據庫是通過圖結構的方式進行數據存儲,對于關聯數據的存儲優勢較為明顯,可以直接表現數據的關聯性,不需要進行復雜的關聯操作,提高了數據存儲和檢索性能[3]。而且隨著業務的調整,避免了傳統數據庫的重構導致建設成本增加等問題,因為Neo4j圖數據庫采用非結構化的圖數據格式,它具有很好的可擴展性,只需要根據需求的調整進行節點、關系以及屬性的調整,不會影響原有數據信息的正常使用[4]。
1.1.2 圖結構存儲
對于水資源調度業務,由于調度規程的復雜性,需要對調度工程、調度實施單位等實體對象進行關聯,因此選擇適合表示實體對象之間關系的數據庫,存儲相關的關系信息,更有利于多水源聯合調度的數據挖掘。傳統的關系型數據庫采用表結構的方式存儲數據,不能很好地存儲關系信息,Neo4j就很好地解決了這種問題,可以將數據存儲在靈活的網絡結構中而不是表格中,具備了完整的數據庫特性,實現了專業數據庫級別的圖數據模型存儲[5]。
1.1.3 圖遍歷式查詢
Neo4j存儲的是一種原生的圖數據,它使用圖遍歷的算法進行數據查詢,從一個節點開始,按照之間的關聯關系查詢所有與它有關系的節點和屬性。而在傳統的關系型數據庫中,數據庫的查詢會通過大量的數據進行檢索查詢,很多數據的檢索與結果并無關系,在復雜的水資源調度業務和數據量較大的水資源監測數據場景下,傳統數據庫的查詢性能不能很好地支撐應用。應用Neo4j圖數據庫可以極大地提高查詢效率,查詢速度是傳統關系型數據庫的數倍[6]。提高查詢效率的同時也可以對Neo4j圖數據庫的查詢語言進行擴展,使其可以進行模糊查詢,有效解決了水資源調度業務中的模糊查詢相關應用需求[7]。
1.1.4 圖論算法支持
由于Neo4j 是一個基于圖論算法,完全兼容ACID的圖形數據庫[8],在基于Neo4j的應用中,可以根據設計選擇相應的圖操作算法,為業務應用提供更深入的挖掘和操作,這些是傳統的關系型數據庫所不具有的優勢。
1.2.1 節點
節點(Node)即實體對象,可以分為起始節點和終止節點,并且兩個節點通過關系進行連接[9],節點相對于傳統數據庫中E-R圖中的實體,主要通過實體的標簽信息進行區別,節點可以包含屬性信息或者不包含屬性信息,屬性信息是描述實體的信息,例如:表示水利工程調度的圖數據庫中,水庫可以當作一個節點,可以包含多個屬性信息。節點在圖數據庫中用圓圈表示。
1.2.2 關系
關系(Relationship)用于表示實體與實體間的聯系,例如:調度實施單位與調度工程之間的關系是調度和被調度的關系。關系在圖數據庫中用箭頭表示,關系可以是單向關系,也可以使是雙向關系。
1.2.3 屬性
屬性(Property)用于表示節點或者關系的特征信息,屬性通過Key-Value (鍵值對)表示,節點可以設置節點屬性,關系可以設置關系屬性,但是不能共享屬性[10],屬性的鍵名是由字符串來表示,屬性值可以用一個原始值表示,也可以用原始的數組表示。
參照圖數據庫節點、關系及屬性構建方法,結合水資源調度業務信息,在水資源調度圖數據庫構建過程中,主要包括數據梳理、圖數據庫構建、圖數據庫查詢應用等流程,具體的流程見圖1。

圖1 水資源調度數據庫構建流程
a.數據梳理。數據梳理主要包括水資源調度業務流程梳理、節點梳理、關系梳理。節點主要包括調度參與人、調度工程對象等節點;關系主要包括調度參與人與調度工程之間的關系。
b.圖數據庫構建。圖數據庫構建主要包括節點構建和關系構建,在構建水資源調度節點和關系構建中進行屬性的定義。
c.圖數據庫查詢應用。根據構建的水資源調度業務信息圖數據庫按需查詢,實現查詢結構的可視化展示。
本文中水資源調度數據庫以北京市水資源調度相關規程為主要數據來源,包括調度參與人及其職責,調度工程對象以及調度實施單位與調度工程關系。
a.調度參與人梳理。調度參與人主要包括總調度長、調度長、副調度長、執行副調度長、調度實施單位。
b.調度工程對象梳理。調度工程對象主要包括自來水廠、再生水廠、管網、引水工程、輸水工程、水庫、河道、水利工程等。
c.調度實施單位與調度工程關系。指各單位涉及的工程調度管理權屬。調度實施單位工程調度管轄范圍見表1。

表1 調度實施單位與調度工程關系
2.3.1 節點構建
水資源調度業務流程主要包括的節點有總調度長、調度長、副調度長、執行調度長、調度實施單位、調度工程。
其中 “總調度長”節點的定義見表2。

表2 總調度長節點屬性
表2中“總調度長”節點定義了兩個屬性:總調度長名稱和總調度長主要職責。通過命令創建了一個“總調度長”節點,節點名稱為n,標簽為ZDDZ,節點包含屬性“name:總調度長”,“duty:負責決策重大水資源調度工作事項、年度用水計劃和調配方案等,簽發重要調度事項”。
create(n:ZDDZ{name:‘總調度長’, duty:‘負責決策重大水資源調度工作事項、年度用水計劃和調配方案等,簽發重要調度事項’})。
根據各節點屬性,應用上述create命令,定義調度長、副調度長、執行調度長。
2.3.2 關系構建
按照水資源調度業務數據挖掘及應用需求,根據調度業務現狀,創建了3種關系:調度、調度需求申請、調度通知單。
a.“調度”關系:實施單位與調度工程,總調度長與調度長、調度長與副調度長、副調度長與執行調度長的關系為“調度”關系。
b.“調度需求申請”關系:實施單位與執行副調度長調度中心的關系為“調度需求申請”關系。
c.“調度通知單”關系:執行副調度長調度中心與實施單位的關系為“調度通知單”的關系。
部分構建結果示例見圖2。

圖2 水資源調度圖數據庫構建結果示意圖
圖數據庫查詢具有較強的靈活性,對象關系查詢結果可視化相對于傳統數據庫具有很好的應用效果。
例如:應用構建的水資源調度圖數據庫,查詢京密引水管理處所調度的工程的方法如下。
查詢語句:
MATCH (a:SSDW{name:‘京密引水管理處‘})-[r:調度]-(b:DDGC) return a,b
查詢結果見圖3。

圖3 水資源調度關系可視化查詢結果示意圖
查詢結果導出見表3。

表3 關系查詢結構
查詢結果可以通過圖表的方式展示,為業務應用提供友好的可視化服務,同時為數據資源管理提供可視化的操作頁面。
Neo4j圖數據庫是目前挖掘實體關系較為優秀的圖數據庫,在實體關系挖掘方面及知識圖譜構建等方面有著廣泛的應用。本文采用Neo4j研究了水資源調度圖數據庫的構建方法,通過梳理業務信息,選取節點,定義關系及屬性,最后通過構建結果的查詢,非常便捷地實現了水資源調度業務信息的按需查詢及可視化展示,這為后續水資源調度知識圖譜的構建、調度預案的智能推薦以及調度智能問答提供了有效的數據支持及指導方法。