Understand What is Knowledge Graph and how to implement it by Neo4j 什麼是知識圖譜 簡單的說就是透過給定的關係, 把不同種類的資料給連結在一起而得出的關係網路, 最後我們可以藉由查詢關係的方式來獲取更深一層的答案 目前已知的知識圖譜有Freebase, DBpedia, 以及Bio2RDF(如果有興趣的話可以去Google一下, 這邊就暫不作介紹) 那我們要如何實現知識圖譜? 要實現知識圖譜並不難, 首先要定義資料的關係, 再來就是要有個圖形資料庫來儲存資料以及關係 在接下來的篇幅裡會介紹如何使用Neo4j圖形資料庫來實作知識圖譜 為什麼要用知識圖譜與圖形資料庫 對於小型且關係不怎麼複雜的資料來說, 其時RDB就很夠用了, 但是當資料越長越大, 而且關係越來越複雜時, RDB就很難去處理這種情況 而圖形資料庫就是為了解決這問題存在的, 省去了用RDB時需要的反覆JOIN 但圖形資料庫也不是萬能的, 比如說, 他不適合大量的及時儲存, 他只適合讀取 一般而言, 資料庫可以大約分成三個特性CAP來討論 因為物理限制, 所以通常資料庫只能滿足其中兩項, 而另一項就可能被犧牲掉 CAP CAP = Consistency + Availability + Partition tolerance 一致性(Consistency) 拿資料的時候可以保證資料一致, 無論用戶端怎麼讀取,都要能夠正確讀取最新的資料 可用性(Availability ) 快速回應能力 分割容忍(Partition tolerance) 這個能力關係到資料庫好不好以及容不容易擴展 圖形資料庫Neo4j 基本概念 資料庫的結構 每筆資料在知識圖譜裡都表示成一個節點Node , 每個節點裡面可以自帶一些屬性Property(比如說年齡, 性別, 工作), 而我們也可以在節點上黏上數個標籤Label來表示資料的類別, 當我們在查詢資料時就可以用Label來過濾資料而更精準地獲得答案, 除此之外節點與節點之間可以建立有向關係, 關係中也可以自帶屬性