开始使用Apache Age:为简单数据库应用程序编写第一个查询
#postgres #database #graphdatabase #apacheage

在本教程中,我们将指导您使用PostgreSQL和Apache Age创建一个简单数据库的过程。 PostgreSQL是一种强大的关系数据库管理系统(RDBMS),由于其性能,可伸缩性和可靠性,该系统在行业中广泛使用。但是,当与Apache Age结合使用时,它添加了图形数据库功能,使其在各种应用程序中更有用。

随着Apache的年龄,您可以使用SQL和Cypher查询来访问和分析您的数据。 SQL是一种标准查询语言,可广泛用于关系数据库,而Cypher是一种图形查询语言,使您可以执行功能强大的图形遍历和模式匹配。通过学习两种查询语言,您将拥有一组强大的工具来以不同的方式使用数据。

在本教程中,您将学习创建表,插入数据并使用SQL和Cypher查询数据的基础知识。在教程结束时,您将对如何一起使用PostgreSQL和Apache Age一起有深入的了解,您将准备开始构建自己的应用程序,以利用这两种技术的力量。

先决条件

在启动本教程之前,您需要确保已安装了PostgreSQL版本11或12和Apache Age。如果您还没有安装它们,则可以按照本教程Step-by-Step Guide to Install PostgreSQL & Apache AGE on Windows.的步骤进行操作。

要可视化本教程中查询生成的图形,您可以使用AGE Viewer。这是一个有用的工具,可帮助您了解节点和边缘之间的图形结构和关系。它还可以帮助您确定查询和数据的任何问题。

年龄图基础:顶点和边缘

年龄,顶点代表图中的基本实体,可以独立存在。每个顶点都可以分配一个标签,并且可能具有零或更多的传出边缘,以及零或更多的传入边缘。

另一方面,年龄的边缘编码正好的两个节点之间的有向连接,即源节点和目标节点。从其源节点的角度来看,外向的边缘代表了定向关系,而传入的边缘从其目标节点的角度代表了指示关系。每个边缘都被分配了一个边缘类型。

了解顶点和边缘的基础知识对于使用年龄的图表至关重要。通过利用这些基本概念,用户可以有效地建模数据中各个实体之间的复杂关系和依赖关系,从而使他们能够提取有意义的见解和知识。

数据库实体

在本教程中,我们将创建一个基本的在线订购应用程序,该应用程序允许用户下放产品订单。该应用程序将使用两种主要类型的顶点,即UserProduct,以及一种边缘类型,即ORDERS。这意味着用户可以通过ORDERS Edge类型订购一个或多个产品。通过利用这些顶点和边缘,我们可以代表应用程序中各个实体之间的关系和相互作用。

创建应用程序

1。使用PostgreSQL配置年龄

要使用PostgreSQL配置Age,您需要加载年龄扩展名并将搜索路径设置为ag_catalog。这是正确的SQL查询:

LOAD 'age'
SET search_path to ag_catalog,"your_user_name",public;

第一个查询加载年龄扩展,而第二个查询将搜索路径设置为ag_catalog和public。确保用实际的postgresql用户名替换“ your_user_name”。

2。创建图形

要存储我们的数据,我们需要创建一个新图。这可以通过执行以下SQL查询来实现:

SELECT * FROM ag_catalog.create_graph('graph_name');

此查询将使用指定名称创建一个新图。

3。创建用户

首先,我们将创建一个“用户”顶点(节点)来代表图表中的用户。我们还可以在节点中添加一些属性,例如名称,电子邮件,电话和地址。

SELECT *
FROM cypher('online_orders', $$
    CREATE(:User{name:"user1" ,email : "test@test.com" , phone:"123456" , address : "Egypt"});
$$) AS (result agtype)

此查询将使用标签“用户”和指定属性创建一个新的顶点,并将结果返回“结果”列中。

agtype是代表抽象图对象的年龄数据类型。它可以存储图形,顶点,边缘和其他与图形相关的数据结构。它类似于PostgreSQL中的JSON数据类型,但针对图形数据进行了优化。 AGTYPE数据类型在年龄上广泛使用用于存储和查询图形数据。

添加更多用户...

SELECT *
FROM cypher('online_orders', $$
    CREATE(:User{name:"user2" ,email : "test2@test.com" , phone:"123488" , address : "USA"})
$$) AS (result agtype)

您可以使用以下查询来验证插入的用户:

SELECT * FROM cypher('online_orders' , $$
MATCH(u:User) RETURN u
$$) AS (result agtype);

此查询使用MATCH7pale检索online_orders图中的所有User节点,并在结果集中返回它们。 AS result子句将结果设置为结果。

4。创建产品

接下来,我们可以创建一个“产品”顶点(节点)来容纳所有与产品相关的数据,例如名称和价格(也可以添加其他属性)。

SELECT *
FROM cypher('online_orders', $$
    CREATE (:Product{name:"Product 1", price: 10.99}),
           (:Product{name:"Product 2", price: 5.99}),
           (:Product{name:"Product 3", price: 7.50})
$$) AS (result agtype);

此查询在我们的图中创建了三个产品。

您可以使用以下查询来验证插入的产品:

SELECT * FROM cypher('online_orders' , $$
MATCH(u:Product) RETURN u
$$) AS (result agtype);

此查询使用MATCH7plauess检索online_orders图中的所有Product节点。

5。创建边缘
在此步骤中,我们将创建订单关系(边缘)来表示用户与产品之间的关系。每当用户想要下订单时,我们都会在用户和所需产品之间建立这种关系。此外,我们可以像节点一样为边缘添加一些属性。在此示例中,我们将添加当前时间和边缘中的数量。

要为我们以前创建的用户1的产品1订单1,请执行以下查询:

SELECT * FROM cypher('online_orders' , $$
    MATCH (u:User{name:'user1'}) , (p:Product{name:"Product 1"})
    CREATE((u)-[o:ORDERS{time:timestamp() , quantity:5}]->(p))
    RETURN u,o,p
$$) AS (u agtype, o agtype, p agtype);

插入数据后,可以使用年龄查看器可视化图形及其关系。

Image description

基于年龄查看器中显示的数据,看来User1具有ORDERSRationship的Product 1

如果要在图中显示所有数据,则可以运行以下查询:

您可以运行以下查询以显示图表中的所有数据:

SELECT *
FROM cypher('online_orders', $$
    MATCH (u:User), (p:Product)
    OPTIONAL MATCH (u)-[o:ORDERS]->(p)
    RETURN u, o, p
$$) AS (u agtype, o agtype, p agtype);

Image description

请注意,这将返回所有用户,他们的订单和他们订购的产品。但是,对于具有许多节点和边缘的较大图形,此查询可能会缓慢且资源密集。建议使用过滤器并限制查询大图时返回的结果的数量。

注意:这是一个仅用于说明目的的简单示例。在现实世界中,节点和边缘之间的数据模型和关系将更加复杂。

太好了!您已经使用Age和PostgreSQL创建了一个简单的图表。这只是一个简单的示例,可以演示创建和查询图的基本步骤。您可以探索许多其他年龄的功能,以构建更复杂和复杂的图表以满足您的特定要求。我们希望本教程有助于使您从年龄开始和PostgreSql。

参考
AGE - Documentation

有助于Apache Age
Apache Age网站:https://age.apache.org/
Apache Age GitHub:https://github.com/apache/age