AgensGraph简介

AgensGraph 是一个基于 PostgreSQL 的新一代多模型图数据库。它提供图形分析环境,用户可以同时编写、编辑和执行 SQL 和 Cypher 查询。AgensGraph 带有 PostgreSQL 兼容性和 PostgreSQL扩展,能够帮助PostgreSQL用户摆脱数据迁移的痛苦,轻松开发提供高级数据分析的服务。

官网及下载

AgensGraph的官方网站: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用户

因为此数据库并不能在root下运行,所以要先建好用户。这里官方并没有指明特定用户,我是自己创建的用户。选择的是agens

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

创建/agdata目录,并赋权.数据目录

将应用目录和数据目录都得设为agens用户权限

配置.bashrc

将安装目录的相关信息填进去

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

初始化并启动

初始化数据库

使用initdb初始化此数据库

[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 ... ok WARNING: 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 <span class="hljs-keyword"><span class="hljs-keyword">logfile</span></span> <span class="hljs-keyword"><span class="hljs-keyword">start</span></span>

启动数据库

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

执行交互式终端

创建一个数据库:

createdb [ dbname ]

如果未指定dbname,则会默认创建与当前用户名称相同的数据库。这里我使用的是test02

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

图数据库基础概念

配置服务器参数

为了获得最佳性能,根据数据和机器资源的大小正确设置服务器参数非常重要。在许多服务器参数中,以下参数对AgensGraph图形查询性能至关重要。(您可以编辑$AGDATA/postgresql.conf文件来设置这些参数(需要重新启动))。

shared_buffers:用于缓存数据对象的内存大小。生产环境应该增加此参数。当它与数据大小一样大时,它是最优的。但是,应该仔细设置此参数,以考虑为每个查询分配的并发会话和内存大小。建议的设置是物理内存大小的一半。

work_mem:根据物理内存的大小以及将仔细执行的查询属性,这个值也会增加。

random_page_cost:此参数用于查询优化。对于图形查询,建议将此值减小到1或0.005(如果图形数据完全缓存在内存中)

AgensGraph数据模型

AgensGraph是一个多模型数据库。AgensGraph同时支持属性图模型和关系模型。

属性图模型

标记属性图模型



属性图模型包含连接的实体,其可以具有任意数量的属性。在AgensGraph中,实体被称为顶点。顶点可以具有任意数量的属性,并可以用标签进行分类。标签用于对顶点进行分组以表示某些类别的顶点; 即代表一个人的角色。

边缘是两个顶点之间的直接连接。边也可以具有属性和归类标签,如顶点。在AgensGraph中,边缘总是具有起始顶点和结束顶点。如果一个查询试图删除一个顶点,它必须先删除它的所有边。AgensGraph中不存在断边。

边和顶点的属性用JSON格式表示。JSON是用于半结构化数据序列化的文本格式。JSON由六种数据类型组成:字符串,数字,布尔值,空值,对象和数组。AgensGraph对象充分利用JSON格式,将信息存储为零个或多个名称/值对的无序集合。名称是一个字符串,值可以是任何上述类型,包括嵌套的JSON类型。AgensGraph特别使用JSONB格式。由于JSONB是一种分解的二进制格式,它的处理速度比普通的JSON快得多,但代价是稍微慢一点的输入时间。

AgensGraph中的数据对象

在AgensGraph中,可以创建几个数据库,每个数据库可以包含一个或多个模式和图形。模式适用于关系表,而图形对象适用于图形数据。架构名称和图形名称不能相同。顶点和边被分组为标签。有两种标签:顶点标签和边缘标签。用户可以在数据库中创建多个图形,但一次只能使用一个图形。

label

label用于对顶点和边进行分组。用户可以为给定label下的所有顶点创建属性索引。可以使用label为不同类型的用户提供访问控制,并且可以创建label层次结构以将继承添加到label。有顶点的默认label:ag_vertex。如果创建顶点而没有指定其label,那么顶点将存储在默认label中。边缘总是有一个label。

我们将顶点标签和边缘标签分别称为VLABEL和ELABEL。

VLABEL:顶点label。分类顶点来表示他们的角色。

顶点:可以保存属性的实体。

ELABEL:边缘label。分类边缘来表示他们的角色。

边缘:连接实体的关系。

每个label都会继承一个或多个label。上图显示了边缘label的示例层次结构。label层次类似于面向对象编程中的类层次结构。每个父label都包含子label数据。例如,考虑到上述层次结构,如果查询与边缘“朋友”匹配,则结果包含“室友”label的数据。

数据定义语言

通过几个示例介绍图形对象的DDL。

快速描述

要创建图形,请使用CREATE GRAPH命令。

CREATE

CREATE GRAPH graphname;        

可以在数据库中创建多个图。为了指定要使用哪个图形,会使用会话参数graph_path。

要显示当前图形路径,请使用以下命令。

SHOW graph_path;        

当使用图创建时CREATE GRAPH,如果graph_path未设置,graph_path将被设置为创建的图。您可以使用以下命令创建多个图并将graph_path更改为另一个图:

SET graph_path = graphname;        

该graph_path是一个会话变量,所以每个客户端必须设置graph_path查询图形之前。只能为graph_path指定一个图形名称。查询多个图是不允许的。

如果使用or 语句为每个用户或数据库设置graph_path,则只要连接数据库就不需要运行语句。

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;        

图形具有顶点和边的初始标签。这些标签不能被删除。要删除图表,用户必须使用该CASCADE选项执行此操作。如果当前graph_path是已删除的图形,则graph_path将重置为null。

图形

CREATE GRAPH

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

如果不存在

如果相同的名字已经存在,什么也不做

授权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

现有图形的名称。

重命名为new_name

该表单将图形的名称更改为new_name。

拥有者为new_owner

这个表格改变了图表的所有者。

创建label

VLABEL和ELABEL的概要是相同的。

CREATE [ UNLOGGED ] VLABEL [ IF NOT EXISTS ] label_name [DISABLE INDEX]
[ INHERITS ( parent_label_name [, ...] ) ]
[ WITH (storage_parameter)]
[ TABLESPACE tablespace_name ];
  1. UNLOGGED

    写入未记录标签的数据不会记录到预写日志中,这会使未记录的标签比记录的标签快得多。但是,未记录的标签不是安全的。
  2. IF NOT EXISTS

    如果相同的名字已经存在,什么也不做。
  3. LABEL_NAME

    要创建的顶点/边缘标签的名称。
  4. DISABLE INDEX

    创建带有无效索引的标签。无效索引不能用于搜索或插入,直到重新编制索引。
  5. INHERITS(parent_label [,…])

    可选的INHERITS子句指定顶点/边缘标签的列表。如果它是空的,则新标签继承初始标签。使用INHERITS会在新的子标签和其父标签之间创建一个持久边缘。子标签的数据默认包含在父级扫描中。
  6. TABLESPACE tablespace_name

    新标签将在名称为tablespace_name的表空间中创建。

AgensGraph查询

介绍

为了检索和操作图形数据,AgensGraph支持Cypher查询语言。Cypher是一种类似于SQL的声明性语言。Cypher很容易学习,因为它的语法直观地描述了图形中的模式。

下文简要说明如何使用示例图编写Cypher查询。

创建一个示例图

AgensGraph可以将多个图存储在单个数据库中。但是,Cypher无法辨别多个图表。因此,AgensGraph支持额外的数据定义语言和变量来使用Cypher创建和管理图表。

以下语句创建一个称为网络的图形并将其设置为当前图形。

CREATE GRAPH network;
SET graph_path = network;

在这个例子中,graph_path变量显式设置为网络。但是,如果在创建图形之前没有设置graph_path,则会在创建图形后自动设置它。

创建标签

在创建图形数据之前,生成一个标签是基本的。虽然这是默认值,但当在密码的CREATE语句中指定标签时,会自动生成标签(可同时创建VLABEL / ELABEL)。

所有图形元素都有一个标签。对于顶点,如果没有指定标签,则将ag_vertex作为默认标签。对于边缘,标签不能省略。ag_edge标签也存在,但用于其他目的。

AgensGraph支持DDL创建这样的标签。

以下语句创建一个顶点标签人员和一个边缘标签知道。

CREATE VLABEL person;

CREATE ELABEL knows;

CREATE (n:movie {title:‘Matrix’});

Creating the Vertices and Edges

现在,我们可以创建一个顶点的人对和边缘知道使用Cypher支架的CREATE条款。该CREATE子句创建一个由顶点和边组成的模式。顶点的形式为:(variable:label {property: value, …}),边有:-[variable:label {property: value, …}]-。<最左侧或>最右侧的附加信息用于表示边缘的方向。variable如果创建的顶点和边不被引用,则可以省略。

注意:AgensGraph不支持–模式中边缘的语法,因为–意味着对行尾进行注释。

以下陈述创造了三种简单的模式:“汤姆知道夏天”,“帕特知道尼基”和“橄榄知道托德”。

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);

为了存储顶点和边的属性,AgensGraph使用PostgreSQL的jsonb类型。属性可以嵌套JSON对象作为它们的值。由于AgensGraph使用PostgreSQL的类型系统,因此PostgreSQL支持的任何数据类型都可以存储到顶点和边的属性中。

查询图表 Querying the Graph

让我们检索我们上面创建的模式。Cypher有MATCH条款在图表中查找模式。

以下陈述发现了这样的模式:“一个叫汤姆的人认识一个人”。

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支持通过运营商,如那些方法->,->>,#>,和#>>。如果用户想要访问顶点m的属性名称,可以写入。AgensGraph提供了另一种访问这些元素的方法。AgensGraph 在顶点和边上使用点运算符和括号运算符来访问JSON对象中的属性值和JSON数组中的元素,如上所示。(m)->>name.[]

该RETURN子句作为查询的结果返回变量及其属性。结果是在其行中具有多个匹配模式的表格。

可变长度边缘 Variable Length Edges

让我们考虑一个发现“汤姆”知道知道的查询。我们可以使用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;

查找位于可变长度的边缘顶点路径之后的顶点的查询在图形数据库中是典型的。*1…2用于边缘表示这样的可变长度的边缘。1边缘的最小长度在哪里,并且2是最大长度。如果您未指定值,则默认范围值为1且无穷大。

以上就是我闲暇时间所看所学的一些关于AgensGraph的简单知识

               原文地址:https://blog.csdn.net/qq_43303221/article/details/83544083                 </div>

图数据库:AgensGraph的更多相关文章

  1. Neo4j图数据库管理系统开发笔记之一:Neo4j Java 工具包

    1 应用开发概述 基于数据传输效率以及接口自定义等特殊性需求,我们暂时放弃使用Neo4j服务器版本,而是在Neo4j嵌入式版本的基础上进行一些封装性的开发.封装的重点,是解决Neo4j嵌入式版本Emb ...

  2. 图数据库(graph database)资料收集和解析 - daily

    Motivation 图数据库中的高科技和高安全性中引用了一个关于图数据库(graph database)的应用前景的乐观估计: 预计到2017年,图数据库产业在数据库市场的份额将从2个百分点增长到2 ...

  3. Neo4j图数据库管理系统开发笔记之三:构建安全的RMI Service(Server)

    RMI Server(服务端)主要包括以下功能:远程用户权限验证管理.远程服务接口实现类.Neo4j实体映射转换等.项目目录结构如下图所示: 3.2.1 远程用户权限验证管理 3.2.1.1 用户权限 ...

  4. Neo4j图数据库管理系统开发笔记之二:管理系统Server端界面一览

    最近在neo4j java api和rmi的基础上,设计了一套neo4j管理工具,分为server端和client端,中间用rmi进行通信.基本功能包括图数据库基本信息维护管理(创建.编辑.删除.统计 ...

  5. Neo4j图数据库简介和底层原理

    现实中很多数据都是用图来表达的,比如社交网络中人与人的关系.地图数据.或是基因信息等等.RDBMS并不适合表达这类数据,而且由于海量数据的存在,让其显得捉襟见肘.NoSQL数据库的兴起,很好地解决了海 ...

  6. 图数据库 Titan 高速入门

    尤其在互联网世界,图计算越来越受到人们的关注,而图计算相关的软件也越来越丰富.本文将高速展示 Titan这个open source 的图数据库. 注:本文的操作主要基于Titan 官方的两篇文档: - ...

  7. Neo4j图数据库

    01. 图数据库 图数据库是专门存储和检索大量信息网络的存储引擎.它可以有效地将数据存储为节点和关系,并允许高性能检索和查询这些结构.属性可以添加到节点和关系.节点可以用零个或多个标签标注,关系总是定 ...

  8. 初识SQL Server2017 图数据库(一)

    背景: 图数据库对于表现和遍历复杂的实体之间关系是很有效果的.而这些在传统的关系型数据库中尤其是对于报表而言很难实现.如果把传统关系型数据库比做火车的话,那么到现在大数据时代,图数据库可比做高铁.它已 ...

  9. 开源软件:NoSql数据库 - 图数据库 Neo4j

    转载自原文地址:http://www.cnblogs.com/loveis715/p/5277051.html 最近我在用图形数据库来完成对一个初创项目的支持.在使用过程中觉得这种图形数据库实际上挺有 ...

随机推荐

  1. QtQtConcurrent 使用方式

    说明:QtConcurrent 的线程函数启动方式略述. 1) 全局函数或静态函 ,作为线程函数 void threadFunc() { //...add } QtConcurrent::run(th ...

  2. CodeForces 352C Jeff and Rounding

    题意 有一个含有\(2n(n \leqslant2000)\)个实数的数列,取出\(n\)个向上取整,另\(n\)个向下取整.问取整后数列的和与原数列的和的差的绝对值. 就是说,令\(a\)为原数列, ...

  3. python学习之路(15)

    map/reduce Python内建了map()和reduce()函数. 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on ...

  4. js将伪数组转换为标准数组的多种方法

    在js中,数组是特殊的对象,凡是对象有的性质,数组都有,数组表示有序数据的集合,而对象表示无序数据的集合. 那伪数组是什么呢,当然它也是对象,伪数组一般具有以下特点: 按索引方式存储数据: 具有len ...

  5. mysql5.6 varchar长度不同的情况下group by的效率

    varchar长度短的情况下,基于这个字段的group by效率更高.所以开发在设计表的时候要使该字段在满足业务需求的情况下尽可能的小. ps:本想找源码看看代码那是怎么处理的,直接用vim看文件太累 ...

  6. 【java多线程】volatile 关键字

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...

  7. EBS 页面影藏“个性化页”

    以R12.1.3为例 影藏“个性化页”的方法: 修改配置文件: 个性化自助定义        值 由“是”改成“否” 注:修改之后需要清一下高速缓存,如果要显示“个性化页”则做相反配置 修改前: 修改 ...

  8. 浏览器端-W3School-HTML:HTML DOM Area 对象

    ylbtech-浏览器端-W3School-HTML:HTML DOM Area 对象 1.返回顶部 1. HTML DOM Area 对象 Area 对象 Area 对象代表图像映射的一个区域(图像 ...

  9. 【7】解决:移动端点击a链接出现蓝色边框

    [1]_blank : 浏览器总在一个新打开.未命名的窗口中载入目标文档. [2]title :  鼠标悬浮显示的文字. [3]href : 跳转到哪个链接.     a{    border: no ...

  10. http详解之post 2

    -----------------------post请求示例----------------#请求行POST https://re.csdn.net/csdnbi HTTP/1.1 #请求头部开始H ...