當前位置:首頁 » 操作系統 » 圖資料庫neo4j

圖資料庫neo4j

發布時間: 2022-05-27 13:04:59

① Neo4j的介紹

Neo4j是一個高性能的,NOsql圖形資料庫,它將結構化數據存儲在網路上而不是表中。它是一個嵌入式的、基於磁碟的、具備完全的事務特性的Java持久化引擎,但是它將結構化數據存儲在網路(從數學角度叫做圖)上而不是表中。Neo4j也可以被看作是一個高性能的圖引擎,該引擎具有成熟資料庫的所有特性。程序員工作在一個面向對象的、靈活的網路結構下而不是嚴格、靜態的表中——但是他們可以享受到具備完全的事務特性、企業級的資料庫的所有好處。Neo4j因其嵌入式、高性能、輕量級等優勢,越來越受到關注.

python怎麼與neo4j圖資料庫連接

一個快速的REST例子

首先來看些基本知識。如果沒有服務API,Neo4j就不能支持其他語言。該介面提供一組基於JSON消息格式的RESTful Web服務和一個全面的發現機制。使用中使用這個介面的最快和最容易的方法是通過使用cURL:

1234567891011121314$ curl http://localhost:7474/db/data/{"extensions" : {},"node" : "http://localhost:7474/db/data/node","node_index" : "http://localhost:7474/db/data/index/node","relationship_index" : "http://localhost:7474/db/data/index/relationship","extensions_info" : "http://localhost:7474/db/data/ext","relationship_types" : "http://localhost:7474/db/data/relationship/types","batch" : "http://localhost:7474/db/data/batch","cypher" : "http://localhost:7474/db/data/cypher","transaction" : "http://localhost:7474/db/data/transaction","neo4j_version" : "2.0.0-M03"}

從這個端點返回JSON對象包含一組資源名稱和URI下可以找到的Cypher端點。在消息載荷中接受傳送來的Cyper請求並執行這些查詢,在HTTP響應中返回結果。

正是這種REST API介面,使得現在已有的各種Neo4j驅動得以建立。py2neo提供了這些REST資源的簡單封裝,這使Python應用程序開發者可以放心使用Neo4j而不用考慮底層的客戶機-伺服器協議。

一個簡單的應用

為實際驗證py2neo,我們將著眼於建立一個簡單的用於存儲姓名和電子郵件地址的通訊錄管理系統。我們自然會使用節點來模擬每一個獨立實體,但它是要記住,Neo4j沒有類型的概念。類型是從周圍的關系和屬性推斷來的。

下面的關系圖中人顯示為紅色、電子郵件地址節點顯示為藍色。這些當然是純粹的邏輯演示節點,但數據本身並沒有區別。

我們的應用程序將完成兩個功能:添加新的聯系人信息和檢索聯系人的完整列表。為此,我們將創建一個Person類包裝Py2neoNodeobject,這使我們有一個底層處理的實現且留出用戶級的功能。上圖中的ROOT節點是指上圖中一個固定的參考點,我們沿著這個點開始。

讓我們直接看看代碼。下面是一個完整的小型應用。這個程序允許添加新的名字與一個或者更多email地址相連接的以及提供了一個容易的方式來顯示這些連接信息的一個命令行工具。沒有參數的運行是顯示使用模式,而且這個唯一的依賴只是需要一個本地未修改的Neo4j實例(instance)而已。

#!/usr/bin/env python# -*- coding: utf-8 -*-from __future__ import print_functionimport sysfrom py2neo import neo4j, node, relgraph_db = neo4j.GraphDatabaseService()class Person(object):_root = graph_db.get_or_create_indexed_node("reference","contacts", "root")@classmethoddef create(cls, name, *emails):person_node, _ = graph_db.create(node(name=name),rel(cls._root, "PERSON", 0))for email in emails:graph_db.create(node(email=email), rel(cls._root, "EMAIL", 0),rel(person_node, "EMAIL", 0))return Person(person_node)@classmethoddef get_all(cls):return [Person(person.end_node) for person incls._root.match("PERSON")]def __init__(self, node):self._node = nodedef __str__(self):return self.name + " " + " ".join(" <{0}>".format(email) for email in self.emails)@propertydef name(self):return self._node["name"]@propertydef emails(self):return [rel.end_node["email"] for rel inself._node.match("EMAIL")]if __name__ == "__main__":if len(sys.argv) < 2:app = sys.argv[0]print("Usage: {0} add <name> <email>[<email>...]".format(app))print(" {0} list".format(app))sys.exit()method = sys.argv[1]if method == "add":print(Person.create(*sys.argv[2:]))elif method == "list":for person in Person.get_all():print(person)else:print("Unknown command")

在第09行上是第一行Py2neo代碼,用來創建了一個GraphDatabaseService對象。通過這個,我們就可以訪問使用Neo4j server的大多數功能。可選一個URI傳遞到這個構造器里,盡管如果什麼都沒有提供,代而取之的是使用默認的本地參數。也就是說下面兩行是完全相等的:

123graph_db = neo4j.GraphDatabaseService()graph_db = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")

第13行介紹了調用了get_or_create_indexed_node,它提供一種在圖形里創建固定引用點的漂亮方式。傳統的Neo4j索引允許節點和關系通過鍵值對訪問,而在這個代碼里我們使用了帶連接的關鍵字和root值的引用索引實例。在第一次執行時,會創建一個新的節點,而且在隨後的執行中,這個節點(即root)會復用(reused)。

在第17行,我們看見了推薦的節點和關系抽象的標記,以及接受和使用節點和關系抽象的create方法。任意多的抽象都可以被傳遞到這個方法中,並且在單個批處理轉換中創建實體並以指定它們的順序作為一個列表返回。抽象節點用節點函數表示並帶有一些屬性,然而抽象關系使用rel函數接受一個起始節點,類型和終止節點。上下文中,其他節點,關系起始和終止節點可能整合引用到在其他批處理中其他節點。在我們的例子中,我們把根節點連接到新創建的person節點,否則就作為項目0(item 0)了。


這次我們在第24行和38行上以match方法形式和關系見面[@Lesus 註: oschina代碼行數有問題。對應於本文的第28和44行]。它試圖使用一個特殊的條件集合(set)標識關系,然後使用列表(list)返回它們。這這些示例中,這個關系和PERSON關系相匹配,從root節點和EMAIL關系開始到所給定的person節點。和Cypher很相似,用來查詢包含MATCH關鍵字的場景。

最後值得注意的一點是在上面的代碼中訪問節點屬性的方式只是其中一種簡單的方式。Py2neo重寫了標准python的__getitem__和 __setitem__方法,通過方括弧標識來方便訪問任何屬性。這點在第34和38行上可以看到。[@Lesus 註:對應於本文的第39和44行]

總結

在那裡(代碼行34和38)我們這樣做了,這顯示了它是如何快速簡易地在JAVA環境之外拼湊出一個Neo4j應用程序,也顯示了Py2neo是如何通過REST API來抽象出大多數沉重的負擔。這里的例子並沒有解決唯一性,盡管功能上提供了唯一索引和CypherCREATE UNIQUE語句。Django開發者可能也想要考慮一個層,如Neomodel,它在Py2neo頂層上表示了一個Djangoesque ORM-style 層。

③ neo4j是什麼怎麼配置能單獨使用嗎

Neo4j是一個嵌入式,基於磁碟的,支持完整事務的Java持久化引擎,它在圖像中而不是表中存儲數據。Neo4j提供了大規模可擴展性,在一台機器上可以處理數十億節點/關系/屬性的圖像,可以擴展到多台機器並行運行。相對於關系資料庫來說,圖形資料庫善於處理大量復雜、互連接、低結構化的數據,這些數據變化迅速,需要頻繁的查詢——在關系資料庫中,這些查詢會導致大量的表連接,因此會產生性能上的問題。Neo4j重點解決了擁有大量連接的傳統RDBMS在查詢時出現的性能衰退問題。通過圍繞圖形進行數據建模,Neo4j會以相同的速度遍歷節點與邊,其遍歷速度與構成圖形的數據量沒有任何關系。此外,Neo4j還提供了非常快的圖形演算法、推薦系統和OLAP風格的分析,而這一切在目前的RDBMS系統中都是無法實現的。

④ 如何快速導入網路數據到圖資料庫Neo4j

1.將選中的數據快兒拷貝到一個TXT文本文件中(記得把後面的空格消掉。。否則導入資料庫後會有對應的空行),假如存到「D:\data.txt」這個位置里。
2.根據要導入的數據快兒建立MySql資料庫和表,然後進入命令提示符里使用命令
load
data
local
infile
'D:/data.txt'
into
table
exceltomysql
fields
terminated
by
'\t';
注意:盤符我使用的「/」才成功,否則提示找不到文件
下面文章中是用的「\」!
進行導入操作手動進行Excel數據和MySql數據轉換!

⑤ 想問一下圖資料庫neo4j和spark下面的graphx有什麼區別

Neo4j就是一個資料庫(可以理解成一個類似HBASE的東西,不過Neo4j是幾乎是單機資料庫,於HBASE不同,HBASE的數據時存儲在
HDFS上,由HDFS進行維護,HDFS將數據存儲在exfat等單機文件系統上。Neo4j直接將數據格式化到單機文件系統)
每一個伺服器保存完整的圖數據。
GraphX是一個計算引擎(類似於maprece的東西),它的數據是從SHARK中使用SQL讀取數據,或者RDD運算符從文件中讀取,然後直接進行計算
另外資料庫和計算引擎都可以進行計算任務,不過資料庫的介面比較弱,只支持簡單的查詢
計算引擎提供了強大的計算介面,方便了編程,可以很容易的實現pagerank等圖演算法
GraphX做數據挖掘應該更方便,有通用的編程幾口
Neo4j就需要自己寫代碼了 編程比較麻煩,不過性能上或許有優勢

⑥ python使用neo4j圖資料庫

test_node_1=Node(label="Person",name="test_node_1")
test_node_2=Node(label="Person",name="test_node_2")
test_graph.create(test_node_1)
test_graph.create(test_node_2)

⑦ 圖計算引擎Neo4j和Graphscope有什麼區別

Neo4j是單機系統,主要做圖資料庫。GraphScope是由阿里巴巴達摩院智能計算實驗室研發的圖計算平台,是全球首個一站式超大規模分布式圖計算平台,並且還入選了中 國科學技術協會「科創中 國」平台。Graphscope的代碼在github.com/alibaba/graphscope上開源。SSSP演算法上,GraphScope單機模式下平均要比Neo4j快176.38倍,最快在datagen-9.2_zf數據集上快了292.2倍。

⑧ 關於圖資料庫neo4j的關系建立

Neo4J的安裝使用非常簡單。下載一個穩定版本,解壓,運行Neo4j.bat(windows版本) 即可。下載地址http://www.neo4j.org/download , 目前比較好用的穩定版本是1.9.1。
然後可以訪問WEB管理界面,地址:http://localhost:7474/webadmin

Neo4J的使用方式包括:
1)可以寫程序,添加,更新,用JAVA,Python,PHP, .NET等語言都可以實現。
2)可以用命令行,添加,更新,查看,Neo4J提供基於WEB的執行界面,提供類SQL語言執行,這些語言包括Cypher,Gremlin等。
如下圖:

3)可以基於Neo4J提供的WEB UI界面添加,更新節點和關系,如下:

4) 可以使用附加工具(ETL)導入數據。也可以從關系資料庫中導入數據。

⑨ 大數據常用哪些資料庫

通常資料庫分為關系型資料庫和非關系型資料庫,關系型資料庫的優勢到現在也是無可替代的,比如MySQL、SQL Server、Oracle、DB2、SyBase、Informix、PostgreSQL以及比較小型的Access等等資料庫,這些資料庫支持復雜的SQL操作和事務機制,適合小量數據讀寫場景;但是到了大數據時代,人們更多的數據和物聯網加入的數據已經超出了關系資料庫的承載范圍。

大數據時代初期,隨著數據請求並發量大不斷增大,一般都是採用的集群同步數據的方式處理,就是將資料庫分成了很多的小庫,每個資料庫的數據內容是不變的,都是保存了源資料庫的數據副本,通過同步或者非同步方式保證數據的一致性,每個庫設定特定的讀寫方式,比如主資料庫負責寫操作,從資料庫是負責讀操作,等等根據業務復雜程度以此類推,將業務在物理層面上進行了分離,但是這種方式依舊存在一定的負載壓力的問題,企業數據在不斷的擴增中,後面就採用分庫分表的方式解決,對讀寫負載進行分離,但是這種實現依舊存在不足,且需要不斷進行資料庫伺服器擴容。
NoSQL資料庫大致分為5種類型

1、列族資料庫:BigTable、HBase、Cassandra、Amazon SimpleDB、HadoopDB等,下面簡單介紹幾個

(1)Cassandra:Cassandra是一個列存儲資料庫,支持跨數據中心的數據復制。它的數據模型提供列索引,log-structured修改,支持反規范化,實體化視圖和嵌入超高速緩存

(2)HBase:Apache Hbase源於Google的Bigtable,是一個開源、分布式、面向列存儲的模型。在Hadoop和HDFS之上提供了像Bigtable一樣的功能。

(3)Amazon SimpleDB:Amazon SimpleDB是一個非關系型數據存儲,它卸下資料庫管理的工作。開發者使用Web服務請求存儲和查詢數據項

(4)Apache Accumulo:Apache Accumulo的有序的、分布式鍵值數據存儲,基於Google的BigTable設計,建立在Apache Hadoop、Zookeeper和Thrift技術之上。

(5)Hypertable:Hypertable是一個開源、可擴展的資料庫,模仿Bigtable,支持分片。

(6)Azure Tables:Windows Azure Table Storage Service為要求大量非結構化數據存儲的應用提供NoSQL性能。表能夠自動擴展到TB級別,能通過REST和Managed API訪問。

2、鍵值資料庫:Redis、SimpleDB、Scalaris、Memcached等,下面簡單介紹幾個

(1)Riak:Riak是一個開源,分布式鍵值資料庫,支持數據復制和容錯。(2)Redis:Redis是一個開源的鍵值存儲。支持主從式復制、事務,Pub/Sub、Lua腳本,還支持給Key添加時限。

(3)Dynamo:Dynamo是一個鍵值分布式數據存儲。它直接由亞馬遜Dynamo資料庫實現;在亞馬遜S3產品中使用。

(4)Oracle NoSQL Database:來自Oracle的鍵值NoSQL資料庫。它支持事務ACID(原子性、一致性、持久性和獨立性)和JSON。

(5)Oracle NoSQL Database:具備數據備份和分布式鍵值存儲系統。

(6)Voldemort:具備數據備份和分布式鍵值存儲系統。

(7)Aerospike:Aerospike資料庫是一個鍵值存儲,支持混合內存架構,通過強一致性和可調一致性保證數據的完整性。

3、文檔資料庫:MongoDB、CouchDB、Perservere、Terrastore、RavenDB等,下面簡單介紹幾個

(1)MongoDB:開源、面向文檔,也是當下最人氣的NoSQL資料庫。

(2)CounchDB:Apache CounchDB是一個使用JSON的文檔資料庫,使用Javascript做MapRece查詢,以及一個使用HTTP的API。

(3)Couchbase:NoSQL文檔資料庫基於JSON模型。

(4)RavenDB:RavenDB是一個基於.NET語言的面向文檔資料庫。

(5)MarkLogic:MarkLogic NoSQL資料庫用來存儲基於XML和以文檔為中心的信息,支持靈活的模式。

4、圖資料庫:Neo4J、InfoGrid、OrientDB、GraphDB,下面簡單介紹幾個

(1)Neo4j:Neo4j是一個圖資料庫;支持ACID事務(原子性、獨立性、持久性和一致性)。

(2)InfiniteGraph:一個圖資料庫用來維持和遍歷對象間的關系,支持分布式數據存儲。

(3)AllegroGraph:AllegroGraph是結合使用了內存和磁碟,提供了高可擴展性,支持SPARQ、RDFS++和Prolog推理。

5、內存數據網格:Hazelcast、Oracle Coherence、Terracotta BigMemorry、GemFire、Infinispan、GridGain、GigaSpaces,下面簡單介紹幾個

(1)Hazelcast:Hazelcast CE是一個開源數據分布平台,它允許開發者在資料庫集群之上共享和分割數據。

(2)Oracle Coherence:Oracle的內存數據網格解決方案提供了常用數據的快速訪問能力,一致性支持事務處理能力和數據的動態劃分。

(3)Terracotta BigMemory:來自Terracotta的分布式內存管理解決方案。這項產品包括一個Ehcache界面、Terracotta管理控制台和BigMemory-Hadoop連接器。

(4)GemFire:Vmware vFabric GemFire是一個分布式數據管理平台,也是一個分布式的數據網格平台,支持內存數據管理、復制、劃分、數據識別路由和連續查詢。

(5)Infinispan:Infinispan是一個基於Java的開源鍵值NoSQL數據存儲,和分布式數據節點平台,支持事務,peer-to-peer 及client/server 架構。

(6)GridGain:分布式、面向對象、基於內存、SQL+NoSQL鍵值資料庫。支持ACID事務。

(7)GigaSpaces:GigaSpaces內存數據網格能夠充當應用的記錄系統,並支持各種各樣的高速緩存場景。

⑩ 為什麼選擇圖形資料庫,為什麼選擇Neo4j

先簡要介紹一下Neo4j。Neo4j是由Java和Scala寫成的一個NoSql資料庫,專門用於網路圖的存儲。更詳細的內容可見官網。作為一個圖形資料庫,Neo4j有以下優點:
更快的資料庫操作。當然,有一個前提條件,那就是數據量較大,在MySql中存儲的話需要許多表,並且表之間聯系較多(即有不少的操作需要join表)。
數據更直觀,相應的SQL語句也更好寫(Neo4j使用Cypher語言,與傳統SQL有很大不同)。
更靈活。不管有什麼新的數據需要存儲,都是一律的節點和邊,只需要考慮節點屬性和邊屬性。而MySql中即意味著新的表,還要考慮和其他表的關系。
資料庫操作的速度並不會隨著資料庫的增大有明顯的降低。這得益於Neo4j特殊的數據存儲結構和專門優化的圖演算法。

熱點內容
安卓手機漲價怎麼辦 發布:2025-01-11 23:27:17 瀏覽:711
三消游戲伺服器搭建 發布:2025-01-11 23:20:01 瀏覽:246
c語言的函數不可單獨進行編譯 發布:2025-01-11 23:12:33 瀏覽:17
怎麼查信用卡查詢密碼 發布:2025-01-11 23:11:08 瀏覽:572
javaexcel源碼 發布:2025-01-11 23:11:04 瀏覽:557
討論會腳本 發布:2025-01-11 23:09:27 瀏覽:574
test伺服器搭建 發布:2025-01-11 23:03:22 瀏覽:421
微信里的密碼和賬號在哪裡 發布:2025-01-11 22:46:04 瀏覽:752
java字元串個數統計 發布:2025-01-11 22:45:05 瀏覽:543
完美國際2捏臉資料庫 發布:2025-01-11 22:45:04 瀏覽:281