日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

图数据库:AgensGraph

發(fā)布時(shí)間:2023/12/20 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图数据库:AgensGraph 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

AgensGraph簡介

AgensGraph 是一個(gè)基于 PostgreSQL 的新一代多模型圖數(shù)據(jù)庫。它提供圖形分析環(huán)境,用戶可以同時(shí)編寫、編輯和執(zhí)行 SQL 和 Cypher 查詢。AgensGraph 帶有 PostgreSQL 兼容性和 PostgreSQL擴(kuò)展,能夠幫助PostgreSQL用戶擺脫數(shù)據(jù)遷移的痛苦,輕松開發(fā)提供高級數(shù)據(jù)分析的服務(wù)。

官網(wǎng)及下載

AgensGraph的官方網(wǎng)站:http://bitnine.net/agensgraph/

Linux版本下載:http://bitnine.net/downloads/agensgraph-v-1-3-linux/

安裝AgensGraph

上傳并解壓

[root@master opt]# tar -xvf AgensGraph_v1.3.1_linux.tar.gz -C /usr/local/

添加agens用戶

因?yàn)榇藬?shù)據(jù)庫并不能在root下運(yùn)行,所以要先建好用戶。這里官方并沒有指明特定用戶,我是自己創(chuàng)建的用戶。選擇的事agens

groupadd -g 530 agens useradd -g 530 -u 530 -m -d /home/agens -s /bin/bash agens

創(chuàng)建/agdata目錄,并賦權(quán).數(shù)據(jù)目錄
將應(yīng)用目錄和數(shù)據(jù)目錄都得設(shè)為agens用戶權(quán)限

配置.bashrc

將安裝目錄的相關(guān)信息填進(jìn)去

export LD_LIBRARY_PATH=/usr/local/AgensGraph/lib:$LD_LIBRARY_PATH export PATH=/usr/local/AgensGraph/bin:$PATH export AGDATA=/agdata

初始化并啟動

初始化數(shù)據(jù)庫

使用initdb初始化此數(shù)據(jù)庫

[agens@sdw3 ~]$ initdb -D /agdata/ The files belonging to this database system will be owned by user "agens". This user must also own the server process.The database cluster will be initialized with locale "en_US.UTF-8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english".Data page checksums are disabled.fixing permissions on existing directory /agdata ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting dynamic shared memory implementation ... posix creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... okWARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.Success. You can now start the database server using:ag_ctl -D /agdata/ -l logfile start

啟動數(shù)據(jù)庫

[agens@sdw3 ~]$ ag_ctl -D /agdata/ -l logfile start server starting [agens@sdw3 ~]$ AgensGraph

執(zhí)行交互式終端

創(chuàng)建一個(gè)數(shù)據(jù)庫:

createdb [ dbname ]

如果未指定dbname,則會默認(rèn)創(chuàng)建與當(dāng)前用戶名稱相同的數(shù)據(jù)庫。這里我使用的是test02

[agens@sdw3 ~]$ agens test02 agens (AgensGraph 1.3.1, based on PostgreSQL 9.6.2) Type "help" for help.test02=#

圖數(shù)據(jù)庫基礎(chǔ)概念

配置服務(wù)器參數(shù)

為了獲得最佳性能,根據(jù)數(shù)據(jù)和機(jī)器資源的大小正確設(shè)置服務(wù)器參數(shù)非常重要。在許多服務(wù)器參數(shù)中,以下參數(shù)對AgensGraph圖形查詢性能至關(guān)重要。(您可以編輯$AGDATA/postgresql.conf文件來設(shè)置這些參數(shù)(需要重新啟動))。

shared_buffers:用于緩存數(shù)據(jù)對象的內(nèi)存大小。生產(chǎn)環(huán)境應(yīng)該增加此參數(shù)。當(dāng)它與數(shù)據(jù)大小一樣大時(shí),它是最優(yōu)的。但是,應(yīng)該仔細(xì)設(shè)置此參數(shù),以考慮為每個(gè)查詢分配的并發(fā)會話和內(nèi)存大小。建議的設(shè)置是物理內(nèi)存大小的一半。
work_mem:根據(jù)物理內(nèi)存的大小以及將仔細(xì)執(zhí)行的查詢屬性,這個(gè)值也會增加。
random_page_cost:此參數(shù)用于查詢優(yōu)化。對于圖形查詢,建議將此值減小到1或0.005(如果圖形數(shù)據(jù)完全緩存在內(nèi)存中)

AgensGraph數(shù)據(jù)模型

AgensGraph是一個(gè)多模型數(shù)據(jù)庫。AgensGraph同時(shí)支持屬性圖模型和關(guān)系模型。

屬性圖模型
標(biāo)記屬性圖模型

屬性圖模型包含連接的實(shí)體,其可以具有任意數(shù)量的屬性。在AgensGraph中,實(shí)體被稱為頂點(diǎn)。頂點(diǎn)可以具有任意數(shù)量的屬性,并可以用標(biāo)簽進(jìn)行分類。標(biāo)簽用于對頂點(diǎn)進(jìn)行分組以表示某些類別的頂點(diǎn); 即代表一個(gè)人的角色。

邊緣是兩個(gè)頂點(diǎn)之間的直接連接。邊也可以具有屬性和歸類標(biāo)簽,如頂點(diǎn)。在AgensGraph中,邊緣總是具有起始頂點(diǎn)和結(jié)束頂點(diǎn)。如果一個(gè)查詢試圖刪除一個(gè)頂點(diǎn),它必須先刪除它的所有邊。AgensGraph中不存在斷邊。

邊和頂點(diǎn)的屬性用JSON格式表示。JSON是用于半結(jié)構(gòu)化數(shù)據(jù)序列化的文本格式。JSON由六種數(shù)據(jù)類型組成:字符串,數(shù)字,布爾值,空值,對象和數(shù)組。AgensGraph對象充分利用JSON格式,將信息存儲為零個(gè)或多個(gè)名稱/值對的無序集合。名稱是一個(gè)字符串,值可以是任何上述類型,包括嵌套的JSON類型。AgensGraph特別使用JSONB格式。由于JSONB是一種分解的二進(jìn)制格式,它的處理速度比普通的JSON快得多,但代價(jià)是稍微慢一點(diǎn)的輸入時(shí)間。

AgensGraph中的數(shù)據(jù)對象

在AgensGraph中,可以創(chuàng)建幾個(gè)數(shù)據(jù)庫,每個(gè)數(shù)據(jù)庫可以包含一個(gè)或多個(gè)模式和圖形。模式適用于關(guān)系表,而圖形對象適用于圖形數(shù)據(jù)。架構(gòu)名稱和圖形名稱不能相同。頂點(diǎn)和邊被分組為標(biāo)簽。有兩種標(biāo)簽:頂點(diǎn)標(biāo)簽和邊緣標(biāo)簽。用戶可以在數(shù)據(jù)庫中創(chuàng)建多個(gè)圖形,但一次只能使用一個(gè)圖形。

label
label用于對頂點(diǎn)和邊進(jìn)行分組。用戶可以為給定label下的所有頂點(diǎn)創(chuàng)建屬性索引。可以使用label為不同類型的用戶提供訪問控制,并且可以創(chuàng)建label層次結(jié)構(gòu)以將繼承添加到label。有頂點(diǎn)的默認(rèn)label:ag_vertex。如果創(chuàng)建頂點(diǎn)而沒有指定其label,那么頂點(diǎn)將存儲在默認(rèn)label中。邊緣總是有一個(gè)label。

我們將頂點(diǎn)標(biāo)簽和邊緣標(biāo)簽分別稱為VLABEL和ELABEL。

VLABEL:頂點(diǎn)label。分類頂點(diǎn)來表示他們的角色。

頂點(diǎn):可以保存屬性的實(shí)體。

ELABEL:邊緣label。分類邊緣來表示他們的角色。

邊緣:連接實(shí)體的關(guān)系。

每個(gè)label都會繼承一個(gè)或多個(gè)label。上圖顯示了邊緣label的示例層次結(jié)構(gòu)。label層次類似于面向?qū)ο缶幊讨械念悓哟谓Y(jié)構(gòu)。每個(gè)父label都包含子label數(shù)據(jù)。例如,考慮到上述層次結(jié)構(gòu),如果查詢與邊緣“朋友”匹配,則結(jié)果包含“室友”label的數(shù)據(jù)。

數(shù)據(jù)定義語言

通過幾個(gè)示例介紹圖形對象的DDL。
快速描述
要創(chuàng)建圖形,請使用CREATE GRAPH命令。

CREATE

CREATE GRAPH graphname;

可以在數(shù)據(jù)庫中創(chuàng)建多個(gè)圖。為了指定要使用哪個(gè)圖形,會使用會話參數(shù)graph_path。

要顯示當(dāng)前圖形路徑,請使用以下命令。

SHOW graph_path;

當(dāng)使用圖創(chuàng)建時(shí)CREATE GRAPH,如果graph_path未設(shè)置,graph_path將被設(shè)置為創(chuàng)建的圖。您可以使用以下命令創(chuàng)建多個(gè)圖并將graph_path更改為另一個(gè)圖:

SET graph_path = graphname;

該graph_path是一個(gè)會話變量,所以每個(gè)客戶端必須設(shè)置graph_path查詢圖形之前。只能為graph_path指定一個(gè)圖形名稱。查詢多個(gè)圖是不允許的。

如果使用or 語句為每個(gè)用戶或數(shù)據(jù)庫設(shè)置graph_path,則只要連接數(shù)據(jù)庫就不需要運(yùn)行語句。
ALTER ROLEDATABASESET graph_path

ALTER ROLE user1 IN DATABASE gdb SET graph_path TO graphname; ALTER DATABASE gdb SET graph_path TO graphname;

DROP

DROP GRAPH graphname CASCADE;

圖形具有頂點(diǎn)和邊的初始標(biāo)簽。這些標(biāo)簽不能被刪除。要刪除圖表,用戶必須使用該CASCADE選項(xiàng)執(zhí)行此操作。如果當(dāng)前graph_path是已刪除的圖形,則graph_path將重置為null。

圖形
CREATE GRAPH

CREATE GRAPH [ IF NOT EXISTS ] graph_name [AUTHORIZATION role_name];

如果不存在
如果相同的名字已經(jīng)存在,什么也不做
授權(quán)role_name
將擁有新圖形的用戶的角色名稱
ALTER GRAPH

ALTER GRAPH graph_name RENAME TO new_name; ALTER GRAPH graph_name OWNER TO { new_owner | CURRENT_USER | SESSION_USER };

graph_name

現(xiàn)有圖形的名稱。

重命名為new_name

該表單將圖形的名稱更改為new_name。

擁有者為new_owner

這個(gè)表格改變了圖表的所有者。

創(chuàng)建label

VLABEL和ELABEL的概要是相同的。

CREATE [ UNLOGGED ] VLABEL [ IF NOT EXISTS ] label_name [DISABLE INDEX][ INHERITS ( parent_label_name [, ...] ) ][ WITH (storage_parameter)][ TABLESPACE tablespace_name ];
  • UNLOGGED
    寫入未記錄標(biāo)簽的數(shù)據(jù)不會記錄到預(yù)寫日志中,這會使未記錄的標(biāo)簽比記錄的標(biāo)簽快得多。但是,未記錄的標(biāo)簽不是安全的。
  • IF NOT EXISTS
    如果相同的名字已經(jīng)存在,什么也不做。
  • LABEL_NAME
    要創(chuàng)建的頂點(diǎn)/邊緣標(biāo)簽的名稱。
  • DISABLE INDEX
    創(chuàng)建帶有無效索引的標(biāo)簽。無效索引不能用于搜索或插入,直到重新編制索引。
  • INHERITS(parent_label [,...])
    可選的INHERITS子句指定頂點(diǎn)/邊緣標(biāo)簽的列表。如果它是空的,則新標(biāo)簽繼承初始標(biāo)簽。使用INHERITS會在新的子標(biāo)簽和其父標(biāo)簽之間創(chuàng)建一個(gè)持久邊緣。子標(biāo)簽的數(shù)據(jù)默認(rèn)包含在父級掃描中。
  • TABLESPACE tablespace_name
    新標(biāo)簽將在名稱為tablespace_name的表空間中創(chuàng)建。
  • AgensGraph查詢

    介紹

    為了檢索和操作圖形數(shù)據(jù),AgensGraph支持Cypher查詢語言。Cypher是一種類似于SQL的聲明性語言。Cypher很容易學(xué)習(xí),因?yàn)樗恼Z法直觀地描述了圖形中的模式。
    下文簡要說明如何使用示例圖編寫Cypher查詢。

    創(chuàng)建一個(gè)示例圖

    AgensGraph可以將多個(gè)圖存儲在單個(gè)數(shù)據(jù)庫中。但是,Cypher無法辨別多個(gè)圖表。因此,AgensGraph支持額外的數(shù)據(jù)定義語言和變量來使用Cypher創(chuàng)建和管理圖表。

    以下語句創(chuàng)建一個(gè)稱為網(wǎng)絡(luò)的圖形并將其設(shè)置為當(dāng)前圖形。

    CREATE GRAPH network; SET graph_path = network;

    在這個(gè)例子中,graph_path變量顯式設(shè)置為網(wǎng)絡(luò)。但是,如果在創(chuàng)建圖形之前沒有設(shè)置graph_path,則會在創(chuàng)建圖形后自動設(shè)置它。

    創(chuàng)建標(biāo)簽

    在創(chuàng)建圖形數(shù)據(jù)之前,生成一個(gè)標(biāo)簽是基本的。雖然這是默認(rèn)值,但當(dāng)在密碼的CREATE語句中指定標(biāo)簽時(shí),會自動生成標(biāo)簽(可同時(shí)創(chuàng)建VLABEL / ELABEL)。

    所有圖形元素都有一個(gè)標(biāo)簽。對于頂點(diǎn),如果沒有指定標(biāo)簽,則將ag_vertex作為默認(rèn)標(biāo)簽。對于邊緣,標(biāo)簽不能省略。ag_edge標(biāo)簽也存在,但用于其他目的。

    AgensGraph支持DDL創(chuàng)建這樣的標(biāo)簽。

    以下語句創(chuàng)建一個(gè)頂點(diǎn)標(biāo)簽人員和一個(gè)邊緣標(biāo)簽知道。

    CREATE VLABEL person;
    CREATE ELABEL knows;
    CREATE (n:movie {title:'Matrix'});

    Creating the Vertices and Edges

    現(xiàn)在,我們可以創(chuàng)建一個(gè)頂點(diǎn)的人對和邊緣知道使用Cypher支架的CREATE條款。該CREATE子句創(chuàng)建一個(gè)由頂點(diǎn)和邊組成的模式。頂點(diǎn)的形式為:(variable:label {property: value, ...}),邊有:-[variable:label {property: value, ...}]-。<最左側(cè)或>最右側(cè)的附加信息用于表示邊緣的方向。variable如果創(chuàng)建的頂點(diǎn)和邊不被引用,則可以省略。
    注意:AgensGraph不支持--模式中邊緣的語法,因?yàn)?-意味著對行尾進(jìn)行注釋。

    以下陳述創(chuàng)造了三種簡單的模式:“湯姆知道夏天”,“帕特知道尼基”和“橄欖知道托德”。

    CREATE (:person {name: 'Tom'})-[:knows {fromdate:'2011-11-24'}]->(:person {name: 'Summer'}); CREATE (:person {name: 'Pat'})-[:knows {fromdate:'2013-12-25'}]->(:person {name: 'Nikki'}); CREATE (:person {name: 'Olive'})-[:knows {fromdate:'2015-01-26'}]->(:person {name: 'Todd'}); MATCH (p:Person {name: 'Tom'}),(k:Person{name: 'Pat'}) CREATE (p)-[:KNOWS {fromdate:'2017-02-27'} ]->(k);

    為了存儲頂點(diǎn)和邊的屬性,AgensGraph使用PostgreSQL的jsonb類型。屬性可以嵌套JSON對象作為它們的值。由于AgensGraph使用PostgreSQL的類型系統(tǒng),因此PostgreSQL支持的任何數(shù)據(jù)類型都可以存儲到頂點(diǎn)和邊的屬性中。

    查詢圖表 Querying the Graph

    讓我們檢索我們上面創(chuàng)建的模式。Cypher有MATCH條款在圖表中查找模式。

    以下陳述發(fā)現(xiàn)了這樣的模式:“一個(gè)叫湯姆的人認(rèn)識一個(gè)人”。

    MATCH (n:person {name: 'Tom'})-[:knows]->(m:person) RETURN n.name AS n, m.name AS m;n | m -------+----------"Tom" | "Summer""Tom" | "Pat" (2 rows)

    由于屬性是jsonb類型的,我們需要方法來訪問它們的屬性值。PostgreSQL支持通過運(yùn)營商,如那些方法->,->>,#>,和#>>。如果用戶想要訪問頂點(diǎn)m的屬性名稱,可以寫入。AgensGraph提供了另一種訪問這些元素的方法。AgensGraph 在頂點(diǎn)和邊上使用點(diǎn)運(yùn)算符和括號運(yùn)算符來訪問JSON對象中的屬性值和JSON數(shù)組中的元素,如上所示。(m)->>name.[]

    該RETURN子句作為查詢的結(jié)果返回變量及其屬性。結(jié)果是在其行中具有多個(gè)匹配模式的表格。

    可變長度邊緣 Variable Length Edges

    讓我們考慮一個(gè)發(fā)現(xiàn)“湯姆”知道知道的查詢。我們可以使用UNION子句:

    MATCH (p:person {name: 'Tom'})-[:knows]->(f:person) RETURN f.name UNION ALL MATCH (p:person {name: 'Tom'})-[:knows]->()-[:knows]->(f:person) RETURN f.name;

    它也可以寫成:

    MATCH (p:person {name: 'Tom'})-[r:knows*1..2]->(f:person) RETURN f.name, r[1].fromdate;

    查找位于可變長度的邊緣頂點(diǎn)路徑之后的頂點(diǎn)的查詢在圖形數(shù)據(jù)庫中是典型的。*1..2用于邊緣表示這樣的可變長度的邊緣。1邊緣的最小長度在哪里,并且2是最大長度。如果您未指定值,則默認(rèn)范圍值為1且無窮大。

    以上就是我閑暇時(shí)間所看所學(xué)的一些關(guān)于AgensGraph的簡單知識

    總結(jié)

    以上是生活随笔為你收集整理的图数据库:AgensGraph的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。