物聯網的圖模型
所謂“物聯網”是指規模巨大的設備,傳感器將實作聯網,通過這些聯網設備來收集資料,存盤和分析,并且和人員,應用軟體產生的資料相互關聯,實作處理復雜的事件的最優化,基于更快地使用更多資料來提供比以前更好的結果,
以滴滴打車為例,它是通過收集、整理、存盤和處理來自運行其應用程式的大量智能手機的資料而實作的“智能服務”, 這些手機充當物聯網設備,可以感知客戶和出租車司機的位置,并與交通流量、天氣和其他活動的資料混合在一起,提供了比傳統的出租車呼叫中心更佳的客戶服務,
摩根士丹利最近預測,在未來五年內,全球將有大約 750 億臺聯網設備投入使用,這個數字正在迅速接近人腦中估計的860億個神經元,正如人類智能不是由我們大腦中的神經元數量產生的,而是由它們之間 100 萬億個左右的連接產生的一樣,物聯網的價值主要體現在這些設備的連接關系和互動,
我們以一個學校的建筑管理系統為例,一個學校有教學樓,科研樓,學生宿舍,圖書館,食堂等許多的建筑,這些建筑中有許多的樓層和房間,在這些房間中有空調,燈具和教學實驗儀器,為了實作建筑自動化管理和能耗管理,學校會在許多的地方安裝計量電表,遙控開關,以及溫度,照度傳感器,這是一個十分復雜的物理設備網路,與此同時,從學校的行政管理的角度看,某一個大樓,或者實驗室,宿舍又可能屬于某一個系,某個班級,甚至某一個專案組,或者學生社團,
當我們著手來構建一個大學的建筑自動化能耗系統時,我們通常會在白板上畫出物理設備和建筑物的隸屬關系和網路連接方式,這是相對比較直觀和簡單的,進一步地,我們要搞清楚設備以及教室與學校部門,學生,教師之間的隸屬關系,于是,如果我們將設備,部門,學生,教師都抽象稱為一個圓圈(我們稱為節點node),而將兩個圓圈之間如果有直接的隸屬關系,就會發現,學校的建筑自動化、能耗管理物聯網變成了一個有圓圈和直線構成的圖,節點之間的關系在構建物聯網程序中非常重要,

另一方面,物聯網將會產生大量的實時資料,它們之間是存在相互關系的,我們稱資料之間的相互關系為“資料脈絡”(data context,我喜歡這個中文術語!),當物聯網中產生的資料存盤在抽象的圖節點中(下面我們指出,這些資料稱為該節點的屬性Property),圖能夠充分地反映資料的脈絡,
你可以自己去分析各自物聯網,能夠發現最后都能夠抽象成為一張類似與上面的圖,所以我們可以認為物聯網就是一個圖,如果我們采用圖模型來構建物聯網架構,存盤,分析資料,實作設備互動,能使物聯網的邏輯結構更加清晰,并且帶來如下好處,
- 反映應用場景的資料脈絡,適合資料分析和各種基于圖論的演算法,
- 資料查詢的效率要比普通資料表的方式更高,
在普通的資料庫中,如果資料是巨量的,那么查詢的時間會越來糟糕,而圖模型中,往往是通過鏈接關系,查詢關聯資料,所以它的查詢資料的時間基本是恒定的,
- 系統設計更加符合設計師的思維程序
根據應用場景中各種設備之間的邏輯關系構建,更新資料模型,使系統設計更符合基于模型的設計方式,事實上,人們稱圖資料模型是一種“白板友好”的模型,也就是說,它直接反映的設計師在白板上畫的結構圖,大大提高了系統設計的效率,
- 有助于實作物聯網的標準化
至少到目前為止,物聯網應用的標準化作業進展緩慢,
圖模型的幾個要素
- 節點(Nodes)
- 關系(Relationship)
- 屬性(Property)可以定義在節點和關系上
- 標簽(Label) 代表節點的類別,
圖資料庫(neo4J)
圖資料庫是圖模型資料的資料庫,它的資料建立,查詢和修改都是以圖的形式進行的,所以,要建立圖模型的物聯網需要使用圖資料庫,neo4j是目前最流行的開源圖資料庫,
neo4j 的架構如下圖所示:

從上圖可見,資料庫的管理,開發,應用程式介面,資料分析和商業使用都是基于圖的,其內部的存盤格式和演算法也是面向圖模型優化的,
圖資料庫與普通關系資料庫的區別
普通的資料庫大多數是所謂關系資料庫(relation database),為什么不能用關系資料庫來存盤”關系“呢?其中關系資料庫中的資料是通過大量的資料表格來存盤資料,每個資料表中都有主鍵和外鍵,關系資料庫通過主鍵-外鍵來建立資料之間的關系,
當主鍵和外鍵是一對多關系時,當模型中出現多對多關系時,必須引入一個JOIN表(或關聯物體表)來保存兩個參與表的外鍵,進一步增加了join操作成本,下圖顯示了通過創建一個 Person-Department 連接表將一個人(來自 Person 表)連接到一個部門(在 Department 表中)的概念,該連接表在一列中包含人的 ID 和在列中包含相關部門的 ID,

正如您可能看到的那樣,這使得理解連接非常麻煩,因為您必須知道人員 ID 和部門 ID 值(執行額外的查找以找到它們)才能知道哪個人連接到哪個部門,通常通過對資料進行非規范化以減少必要的連接數量來解決這些型別的成本高昂的連接操作,從而破壞關系資料庫的資料完整性,
可以試想,如果資料的關系很復雜,資料非常巨大時,這種基于表格的關系表的查詢是非常耗費計算時間和記憶體的,因此,圖資料庫的專家戲稱關系資料庫是”逆關系“的,”沒關系“的,

圖模型的建模方法
圖模型另一個重要的特點是可以實作面向物件的模型設計,實際上,在工業自動控制中 的OPC UA 協議中的資訊模型同樣采用了圖形的模型來描述程式設計中的物件,
比如一個傳輸系統中有兩個電機,每個電機有轉速,功率兩個引數,
那么我們可以定義兩個節點 -傳輸帶和電機,電機節點中帶有兩個屬性 轉速和功率,
節點的粒度
在實際建模程序中,我們可以在節點中定義許多的屬性,也可以將節點分解成功更小的節點構建而成,具有許多屬性的節點可能會造成資料的冗余,所以我們應該可能地將節點的存盤顆粒分解的很細,這樣表現力更強,支持更復雜的查詢,

在OPC UA 的資訊標準中,有8種型別的節點
- 物件節點
- 變數節點
- 方法節點
- 視圖節點
- 物件型別節點
- 參考型別節點
- 變數型別節點
- 資料型別節點
一個物件使用一個節點來表示,如果該物件中擁有兩個變數,那么就建立兩個變數物件,然后物件節點和這兩個變數型別節點之間建立了參考關系(reference relationship),同樣地,如果在一個物件中參考另一個物件,就需要定義被參考的物件,并與其建立參考關系,
OPC UA 的資訊模型的節點粒度是非常高的,
參考OPC UA 的資訊模型
我認為,在物聯網系統建模時,可以參照OPC UA 的資訊模型,一方面,OPC UA 資訊模型基于面向物件程式設計概念,具有很強的物理設備建模能力,另一方面,OPC UA 已經提出了許多年,大量工業軟體都支持OPC UA 協議,并且為許多物理設備建立了OPC UA 資訊模塊,在構建物聯網資訊模型是我們可以使用OPC UA 協議豐富的技術和模型經驗,同時,也促進物聯網技術的標準化,
事實上,我們完全可以將物聯網看作一個巨大的OPC UA 服務器,而各種應用軟體成為OPC UA 的Client 訪問這個巨大的物聯網,在這個巨大的物聯網OPC UA 服務器內部采用圖資料庫建立巨大的OPC UA 資訊模型,個人覺得這是一個大膽的想法,能夠解決物聯網標準缺失的問題,
利用neo4j建立OPC UA 的資料模型
neo4j 節點中,沒有節點型別的屬性,不過,標簽起到了節點型別的作用,我們可以通過標簽來區分不同的節點,
下面是一個例子,其中黃色的節點是物件型別,紅色的型別是變數型別,REF 是節點之間的關系,我們建立了一個水泵的節點,它具有兩個物件型別的屬性,分別是位置(location) 和電機(motor1),物件location節點具有兩個變數節點(variable node),它們是latitude和longitude,而電機具有兩個變數節點(variable node),它們是speed和power,
這些節點通過參考關系REF 連接,

neo4j 的操作
節點的屬性
基礎屬性(Basic property)
所有節點的都具有的屬性,
名稱 name
顯示名稱 dispayname
描述 Description
變數節點附加屬性 (Variable)
value 值
dataType 資料型別
accessLevel
userAccessLevel
dataPointer 時間序列資料庫指標
方法(Method)節點的附加屬性
argument 方法的引數
實體
下面我們通過一個實體來研究資料模型的描述方式,在這里我們定義的一個水泵,水泵的特征包括位置,電機,而位置又包括了經緯度,電機包括轉速和功率,
1 建立一個物件(pump)
2 建立motor和location 物件節點,
3 建立 pump-REF-motor和pump-REF-location 的關系
4 建立變數節點 speed,power,longitude,latitude 四個變數節點
5 建立 motor1-REF-speed,motor1-REF-power ,locattion-REF-longitude,location-REF-latitude 四個關系,
于是形成了的圖如下:

訪問資料庫的常用方法
neo4j 圖資料庫使用一種查詢語言Cypher (Cypher Query Language CQL)來操控資料庫,Cypher 使我們更容易地操控圖資料庫,
例如:建立兩個節點 羅密歐 和朱麗葉(Person node),它們之間的關系(LOVES)是羅密歐愛朱麗葉,
CREATE (remeo:Person {name:"Remeo"})-[:LOVEE]->(juliet:Person(name:Juliet})
下面我們來建立水泵的圖模型,它具有樹形圖結構
pump
motor
speed
power
location
longitude
latitude
1 獲取 pump1 的所有子節點
MATCH (:object {name: 'pump1'})-[REF]-(p)
RETURN p
2 獲取 motor 的所有子節點
MATCH (:object {name: 'motor1'})-[REF]-(p)
RETURN p
3 獲取location 的所有子節點
MATCH (:object {name: 'location'})-[REF]-(p)
RETURN p
4 如果節點的label 是variable 就不再有進一步的子節點,
資料模型的構建工具
開發一種基于圖模型的構建工具十分重要,它既要考慮構建的效率,有要考慮使用者的習慣和方便,大致有下面幾種方式
- 樹形目錄結構,
- 圖方式
- 文本方式(XML,JSON,CSV)
結束語
本文探討圖資料在物聯網中應用的可能性,并且提出了使用OPC UA 資訊模型來構建物聯網資訊模型,解決物聯網標準缺失的問題,作者本人正在構建一個實驗性小系統,感興趣的讀者可以一起交流,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286470.html
標籤:其他
上一篇:RTOS概述
