DEV Community

Cover image for Apache AGE: Accelerate Query Performance by Adding Multiple Edges in a Single Query
Muhammad Farooq
Muhammad Farooq

Posted on

Apache AGE: Accelerate Query Performance by Adding Multiple Edges in a Single Query

Introduction:

Apache AGE (A Graph Extension) is inspired by Bitnine’s fork of PostgreSQL 10, AgensGraph, which is a multi-model database. By combining the power of graph data models with the versatility of SQL, Apache AGE provides a seamless and efficient approach to working with complex interconnected data.

In this blog post, we will explore one of the key features of Apache AGE: the ability to add multiple edges in a single query. We'll discuss the benefits of this feature and how it can significantly improve query performance when dealing with large-scale graph data.

Understanding Graph Data Modeling:

Before diving into Apache AGE's capabilities, it's essential to understand the basics of graph data modeling. In a graph database, data is represented as nodes and edges. Nodes represent entities (such as users, products, or locations), while edges define the relationships between these entities.

The power of graph databases lies in their ability to efficiently traverse these relationships and uncover patterns and insights that are otherwise challenging to discover using traditional relational databases. Graph databases excel at handling complex interconnections, making them ideal for use cases like social networks, recommendation engines, fraud detection, and more.

Adding Multiple Edges in a Single Query:

We can add multiple edges in single query by defining rule on between both node types

for example:

we have graph named demo_graph

Person Nodes

we have Person Nodes with fields mentioned in query

SELECT * FROM cypher('demo_graph', $$ CREATE (n:Person {name : "imran", bornIn : "Pakistan"}) $$) AS (a agtype);

Fields

  • name
  • bornIn

Country Nodes

and we have Country Nodes with fields mentioned in following query

SELECT * FROM cypher('demo_graph', $$ CREATE (n:Country{name : "Pakistan"}) $$) AS (a agtype);

Fields

  • name

Creating relationship between both Node Types

to create relationship between Person and Country run the following Query:

SELECT * FROM cypher('demo_graph', $$ MATCH (a:Person), (b:Country) WHERE a.bornIn = b.name CREATE (a)-[r:BORNIN]->(b) RETURN r $$) as (r agtype);

The relationship is based on the Country where the Person lives in now no matter how many nodes are this query will create relationship between all Person and Country Nodes

visualize the Graph

to visualize the graph run following query:

SELECT * from cypher('demo_graph', $$ MATCH (a:Person)-[r]-(b:Country) WHERE a.bornIn = b.name RETURN a, r, b $$) as (a agtype, r agtype, b agtype);

Output Graph would look something like this:

Image showing nodes and Edges

Visit Apache AGE:

Top comments (0)