Neo4j 由 Neo4j Inc. 在 2007 年發表,目前有企業版及社群版兩種版本,主打支援 ACID 交易的開源 Graph Database,且具有高可擴展性。在資料儲存方面不是在其他資料庫上隔一層抽象將對圖的操作進行轉換,而是以真正的圖結構存放,為 Native Graph Database,因此在彈性和效能上相當優秀。
Neo4j 資料包含 Node (節點)、Relationship (關聯)、Property (屬性)和 Label (標籤)。節點為圖中的實體,關聯表是兩個節點間的關係,節點和關聯都可以各自有多個附屬的屬性。在節點或關聯上可以透過標記標籤來識別不同類型,例如這個節點是 Person 或是 Post,兩個節點間的關聯是 Fried 或 Family。
圖片取自 Neo4j 官網
使用 Neo4j 時,可透過 CQL (Cypher Query Language) 進行操作。CQL 的寫法則更符合對圖的操作需求,如下圖表示查詢 Dan 喜歡的人的語法。
圖片取自 Neo4j 官網
以前一篇的計算親等為例,如果要找出我的四等親(表弟),使用關聯式資料庫的話就要 Join 三次,且 Join 的成本會隨著 Join 的次數飆升。
CQL 在語意上比 SQL 使用大量 Join 更直觀,基本上就是描述在圖中,怎麼在節點間透過關聯走詢。
圖片取自 Neo4j 官網
跟前幾天 Cassandra Query Language 是不同的 CQL,不要弄混。