DEV Community

Muhammad Awais Bin Adil
Muhammad Awais Bin Adil

Posted on

building a simple social network application using Apache Age

Overview
In this tutorial, we'll build a simple social network application using Apache Age, a graph database extension for PostgreSQL. We'll start by setting up our environment and importing data into Apache Age, then we'll use SQL and Cypher queries to analyze the data and build our social network.

Prerequisites
Before we get started, make sure you have the following software installed:

PostgreSQL (version 13 or higher)
Apache Age (version 0.4.4 or higher)
You can install PostgreSQL and Apache Age using your operating system's package manager, or by downloading them from their respective websites.

Setting up the environment
To get started, create a new PostgreSQL database and install Apache Age by running the following commands in your terminal:



createdb social_network
psql social_network -c 'CREATE EXTENSION age;'

Enter fullscreen mode Exit fullscreen mode

Next, let's import some sample data into Apache Age. We'll use a CSV file with information about users and their relationships:

id,name,age,location
1,Alice,25,New York
2,Bob,30,San Francisco
3,Charlie,20,Los Angeles
4,David,35,Boston
5,Eve,40,Chicago

from_user,to_user,relationship_type
1,2,friends
1,3,friends
2,3,friends
2,4,follows
3,5,follows
Enter fullscreen mode Exit fullscreen mode

Save this data as a file named social_network.csv.

To import this data into Apache Age, we'll create a new table with the appropriate columns and import the CSV data using the COPY command:

CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  name VARCHAR(50),
  age INTEGER,
  location VARCHAR(50)
);

CREATE TABLE relationships (
  from_user INTEGER REFERENCES users(id),
  to_user INTEGER REFERENCES users(id),
  relationship_type VARCHAR(50)
);

COPY users FROM 'social_network.csv' WITH (FORMAT csv, HEADER true);
COPY relationships FROM 'social_network.csv' WITH (FORMAT csv, HEADER true);
Enter fullscreen mode Exit fullscreen mode

Now we're ready to start working with our data!

Analyzing the data
Let's start by using SQL queries to analyze our data. For example, we can find all users who are located in New York:

SELECT * FROM users WHERE location = 'New York';

Enter fullscreen mode Exit fullscreen mode

We can also find all users who are friends with Alice:

SELECT u.* FROM users u
JOIN relationships r ON r.to_user = u.id
WHERE r.from_user = 1 AND r.relationship_type = 'friends';
Enter fullscreen mode Exit fullscreen mode

Next, let's use Cypher queries to analyze our data in a graph context. For example, we can find all users who are friends with Alice:

MATCH (u:users)-[r:friends]->(a:users)
WHERE a.name = 'Alice'
RETURN u.name, r.relationship_type;
Enter fullscreen mode Exit fullscreen mode

We can also find all users who are followed by more than one person:

MATCH (u:users)<-[r:follows]-(f:users)
WITH u, count(r) AS num_followers
WHERE num_followers > 1
RETURN u.name, num_followers;
Enter fullscreen mode Exit fullscreen mode

Building the social network
Now that we've analyzed our data, let's build our social network! We'll start by creating a new table to store posts:

CREATE TABLE posts (
  id SERIAL PRIMARY KEY,
  user_id INTEGER REFERENCES users(id),
  content TEXT,
  created_at TIMESTAMP DEFAULT NOW()
);
Enter fullscreen mode Exit fullscreen mode

Next, we'll add some sample posts

INSERT INTO posts (user_id, content) VALUES
  (1, 'Hello, world!'),
  (2, 'This is my first post.'),
  (3, 'I love living in LA!'),
  (4, 'Boston is a great city.'),
  (5, 'Just visited Chicago for the first time!');
Enter fullscreen mode Exit fullscreen mode

Now let's use Cypher queries to find posts by friends of a given user. For example, we can find all posts by friends of Alice:

MATCH (u:users)-[:friends]->(f:users)-[:wrote]->(p:posts)
WHERE u.name = 'Alice'
RETURN f.name, p.content, p.created_at;
Enter fullscreen mode Exit fullscreen mode

We can also find all posts by users who are followed by more than one person:

MATCH (u:users)<-[:follows]-(f:users)-[:wrote]->(p:posts)
WITH u, count(*) AS num_followers
WHERE num_followers > 1
RETURN u.name, p.content, p.created_at, num_followers;
Enter fullscreen mode Exit fullscreen mode

Finally, let's create a new post by a user:

INSERT INTO posts (user_id, content) VALUES (1, 'Just had a great day in Central Park!');
Enter fullscreen mode Exit fullscreen mode

Conclusion

In this tutorial, we've built a simple social network application using Apache Age, a graph database extension for PostgreSQL. We've imported data into Apache Age, analyzed the data using SQL and Cypher queries, and built our social network by creating a new table for posts and adding sample data. Apache Age is a powerful tool for working with graph data, and we've only scratched the surface of what it can do.

Top comments (0)