JanusGraph初識
- 前言
- 一、 圖資料庫
- 圖資料庫是什么?
- 圖資料庫的作用?
- 圖資料庫應用背景
- 二、JanusGraph簡介
- JanusGraph簡介
- JanusGraph的發展歷史
- JanusGraph的架構圖
- 二、 JanusGraph的優勢及特點
- JanusGraph的優勢
- JanusGraph的特點
- 三、核心概念
- 四、應用使用JanusGraph的方法
- 參考【7】
前言
最近開始學習圖資料庫了,圖資料庫JanusGraph(janus讀音類:J+nes, jay 而不是je-nes),JanusGraph是一個分布式圖資料庫引擎,具有以下特性:
- 支持百億級別的頂點&邊的存盤及查詢
- 本身不負責存盤,而是借助其他存盤和索引組件配合達到圖形資料的查詢
- 支持事務,可并發執行復雜圖操作

JanusGraph是一個可擴展的圖資料庫,可以把包含數千億個頂點和邊的圖存盤在多機集群上,它支持事務,支持數千用戶實時、并發訪問存盤在其中的圖,(JanusGraph is a scalable graph database optimized for storing and querying graphs containing hundreds of billions of vertices and edges distributed across a multi-machine cluster. JanusGraph is a transactional database that can support thousands of concurrent users executing complex graph traversals in real time.)

一、 圖資料庫
圖資料庫是什么?
💬圖資料庫就是用來存盤圖結構的資料庫,圖資料庫也是屬于NoSQL一種,
-NoSQL資料庫大致可以分為以下幾類:
- 鍵值對(key-value)資料庫(遵循“鍵——值”模型,是最簡單的資料庫管理系統):如Memcache、Redis、Berkeley DB、SQLite…
- 列簇式資料庫(按照列(由“鍵——值”對組成的串列)在資料檔案中記錄資料,以獲得更好的請求及遍歷效率,一行中的列數允許動態變化,且列的數目可達數百萬,每條記錄的關鍵碼不同,支持多值列,):如HBase、hive、sybase IQ/SAPIQ、GreenPlum…
- 檔案型資料庫(無固定結構,不同的記錄允許有不同的列數和列型別,列允許包含多值,記錄允許嵌套):如Mongodb、Couchbase、Amazon DynamoDB、CouchDB、MarkLogic…
- 圖資料庫(以“點——邊”組成的網路(圖結構)來存盤資料):如Neo4j、JanusGraph、OrientDB、Titan、Virtuoso、ArangoDB …
- 搜索引擎(存盤的目的是為了搜索,主要功能是搜索):如Elasticsearch、Solr、Splunk、MarkLogic、Sphinx…
- 物件資料庫(受面向物件編程語言的啟發,把資料定義為物件并存盤在資料庫中,包括物件之問的關系,如繼承):如Caché、db4o、Versant Object Database、ObjcctStore、Matisse …
- 時序資料庫(存盤時間序列資料,每條記錄都帶有時間戳,如存盤從感應器采集到的資料):如InfluxDB、RRDtool、Graphite、OpcnTSDB、Kdb+ …
圖資料庫的作用?
💬圖資料庫主要處理的是拓撲關系的圖,善于處理大量、復雜、互聯、多變的網狀海量資料,其效率遠遠高于傳統的關系型資料庫,就比如下面的圖:

圖資料庫應用背景
💬圖資料庫所提供的關聯分析能力是金融反欺詐、威脅情報、黑產打擊和案件溯源等業務所需要的核心能力,圖資料庫的需求非常多,例如金融安全業務希望使用圖資料庫進行金融反欺詐關聯分析、威脅情報業務希望通過圖資料庫進行黑產研究和情報分析、還有社交關系分析、知識圖譜等需求場景,
二、JanusGraph簡介
JanusGraph簡介
💬JanusGraph是一個圖形資料庫引擎,其本身專注于緊湊圖序列化、豐富圖資料建模、高效的查詢執行,另外,JanusGraph利用Hadoop進行圖分析和批處理圖處理,JanusGraph為資料持久性、資料索引、客戶端訪問實作了強大的模塊化介面,JanusGraph的模塊化體系結構使其可以與多種存盤、索引、客戶端技術進行互操作,它還簡化了擴展JanusGraph以支持新的程序,
JanusGraph可以適配多種資料庫和索引,JanusGraph默認支持以下的適配,但是JanusGraph的模塊化架構使得也支持第三方的配接器,
資料庫:
- Apache Cassandra
- Apache HBase
- Oracle Berkeley DB Java版
索引:
- Elasticsearch
- Apache Solr
- Apache Lucene
JanusGraph的發展歷史
💬JanusGraph是2016年12月27日從Titan fork出來的一個分支,之后TiTan的開發團隊在2017年陸續發了0.1.0rc1、0.1.0rc2、0.1.1、0.2.0等四個版本,最新的版本是2017年10月12日, titan是從2012年開始開發,到2016年停止維護的一個分布式圖資料庫,最初在2012年啟動titan專案的公司是Aurelius,2015年此公司被 DataStax(DataStax是開發apache Cassandra 的公司)收購,DataStax公司吸收了TiTan的圖存盤能力,形成了自己的商業產品DataStax Enterprise Graph,
TiTan開發者們希望把TitTan放到Apache Software Foundation下,不過,DataStax不愿意這樣做(可能考慮到要保護自己的商業產品DataStax Enterprise Graph的技術優勢吧,其實這點優勢是從Titan來的),而且自從2015年9月DataStax收購了Titan的母公司后,TiTan一直處于停滯狀態(應該是DataStax收購之后,忙于推出自己的商業產品DataStax Enterprise Graph,忙于整合Titan進自己的商業產品吧,可是Titan本身沒有得到發展),鑒于此,2016年6月,TiTan的開發者們fork了一個TiTan的分支(因為Titan已經屬于DataStax了,所以他們必須另外弄一個商標),重命名為JanusGraph,并將其置于Linux Software Foundation下,
2017年4月6日發布了第一個版本0.1.0-rc1,目前最新版本是2017年10月12日發布的0.2.0版,
JanusGraph專案啟動的初衷是“通過為其增加新功能、改善性能和擴展性、增加后端存盤系統來增強分布式圖系統的功能,從而振興分布式圖系統的開發”,JanusGraph從Apahce TinkerPop中吸收了對屬性圖模型(Property Graph Model)的支持和對屬性圖模型進行遍歷的Gremlin遍歷語言,(“reinvigorate development of the distributed graph system to add new functionality, improve performance and scalability, and maintain a variety of storage backends,JanusGraph incorporates support for the property graph model with the open source graph computing framework Apache TinkerPop and its Gremlin graph traversal language”.)
JanusGraph的架構圖
💬它的整體架構,大致分為三部分:
- 圖計算框架(TinkerPop)
- 資料存盤(Cassandra,HBase,BerkeleyDB)
- 索引存盤(Elasticsearch,Solr,Lucene)
JanusGraph從其框架上來說,是起到一個橋梁的作用,將各種開源的軟體連接到一起,形成一個大型圖資料庫

二、 JanusGraph的優勢及特點
JanusGraph的優勢
💬來源General JanusGraph Benefits
- Support for very large graphs. JanusGraph graphs scale with the
number of machines in the cluster. - Support for very many concurrent transactions and operational graph
processing. JanusGraph’s transactional capacity scales with the
number of machines in the cluster and answers complex traversal
queries on huge graphs in milliseconds. - Support for global graph analytics and batch graph processing through
the Hadoop framework. - Support for geo, numeric range, and full text search for vertices and
edges on very large graphs. - Native support for the popular property graph data model exposed by
Apache TinkerPop. - Native support for the graph traversal language Gremlin.
- Numerous graph-level configurations provide knobs for tuning
performance. - Vertex-centric indices provide vertex-level querying to alleviate
issues with the infamous super node problem. - Provides an optimized disk representation to allow for efficient use
of storage and speed of access. - Open source under the liberal Apache 2 license.
百度翻譯版:
- 支持非常大的圖形,JanusGraph圖隨集群中的機器數量而擴展,
- 支持很多并發事務和操作圖處理,JanusGraph的事務處理能力隨著集群中機器的數量而擴展,并在毫秒內回答大型圖上的復雜遍歷查詢,
- 通過Hadoop框架支持全域圖分析和批處理圖處理,
- 支持對超大圖形上的頂點和邊進行地理、數字范圍和全文搜索,
- 對Apache TinkerPop公開的流行屬性圖資料模型的本機支持,
- 對圖遍歷語言Gremlin 的本機支持,
- 許多圖形級配置提供了用于調整性能的旋鈕,
- 以頂點為中心的索引提供頂點級查詢,以緩解臭名昭著的超級節點問題,
- 提供優化的磁盤表示形式,以便高效使用存盤和加快訪問速度,
- 開放源代碼,使用Apache2許可證,
JanusGraph的特點
- 后端資料存盤可以由多種選擇:Hbase、Cassandra、Google Bigtable等
- 滿足實時的復雜圖遍歷、滿足ACID一致性的OLTP
- 可以利用外部如ElasticSearch、Solr、Lucene軟體,實作全量檔案的搜索功能
- 基于spark+hadoop的OLAP
- 使用Gremlin語言查詢;與Apache TinkerPop 專案高度兼容
OLTP:
- OLTP (Online Transactional Processing,聯機事務處理)是專注于面向事務的任務的一類資料處理,通常涉及在資料庫中插入,更新或洗掉少量資料,主要是處理大量用戶下的大量事務,
- OLTP事務實體: 在線銀行、網上買一本書、預訂一張機票、發送一個文本訊息、電話推銷員輸入電話調查結果、呼叫中心員工查看和更新客戶的詳細資訊
ACID:
- ACID,指資料庫事務正確執行的四個基本要素的縮寫,包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability),一個支持事務的資料庫必須要支持這幾個特性,否則無法保證資料的正確性,
OLAP
- 聯機實時分析(OnlineAnalytical Processing, OLAP技術是快速回應多維分(Multidimensionalanalysis, MDA)的一種解決方案,它使分析人員能夠迅速、一致、互動地從各個方面觀察資訊,以達到深入理解資料的目的,
三、核心概念
💬JanusGraph有如下核心概念:
- Vertex:圖中的點
- Edge:圖中的邊
- Vertex Label:節點型別,每個節點只能有一個Label(不同于Neo4j)
- Edge Label:邊型別
- Property Key:屬性名稱(屬性名稱和邊型別不能重復)
- Property:屬性,key-value形式,janusgraph中屬性有Cardinality的概念,包括SINGLE、LIST、SET三種,即對于一個屬性key可以有單個值、串列值、集合值
四、應用使用JanusGraph的方法
(1)第一種方式:可以把JanusGraph嵌入到應用程式中去,JanusGraph和應用程式處在同一個JVM中,應用程式中的客戶代碼(相對JanusGraph來說是客戶)直接呼叫Gremlin去查詢JanusGraph中存盤的圖,這種情況下外部存盤系統可以是本地的,也可以處在遠程,
(2)第二種方式:應用程式和JanusGraph處在兩個不同JVM中,應用通過給JanusGraph提交Gremlin查詢給GremlinServer,來使用JanusGraph,因為JanusGraph原生是支持Gremlin Server的,(Gremlin Server是Apache Tinkerpop中的一個組件),

參考【7】
常用資料庫有哪些(附帶資料庫排名)?
JanusGraph
JanusGraph(一)–簡介
JanusGraph:圖資料庫系統簡介
JanusGraph學習之路:(1)概述
什么是OLTP?
OLAP基礎
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303345.html
標籤:其他
上一篇:Python中的字典介紹
