<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Kamlesh Kumar</title>
    <description>The latest articles on Forem by Kamlesh Kumar (@kamleshmmb45).</description>
    <link>https://forem.com/kamleshmmb45</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1016096%2F99c01812-09ed-470d-97be-aebf86ecccee.jpg</url>
      <title>Forem: Kamlesh Kumar</title>
      <link>https://forem.com/kamleshmmb45</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kamleshmmb45"/>
    <language>en</language>
    <item>
      <title>CSV File Format Guide for Cloud Express: Managing Nodes and Edges</title>
      <dc:creator>Kamlesh Kumar</dc:creator>
      <pubDate>Thu, 31 Aug 2023 15:34:53 +0000</pubDate>
      <link>https://forem.com/kamleshmmb45/csv-file-format-guide-for-cloud-express-managing-nodes-and-edges-1n8</link>
      <guid>https://forem.com/kamleshmmb45/csv-file-format-guide-for-cloud-express-managing-nodes-and-edges-1n8</guid>
      <description>&lt;p&gt;This guide is part of a series on Cloud Express – the web application that revolutionizes how you interact with Apache Age. If you haven't already, check out our &lt;a href="https://dev.to/kamleshmmb45/introducing-cloud-express-access-apache-age-with-ease-on-browser-dhn"&gt;previous blog&lt;/a&gt; for an introduction to Cloud Express and its user-friendly interface.&lt;/p&gt;

&lt;p&gt;In Cloud Express, managing your data becomes a breeze, especially with the ability to upload CSV files containing nodes and edges. These CSV files play a pivotal role in constructing and visualizing your projects seamlessly. When you log in using your existing account or Google credentials, you'll step into a world where data organization and project creation are at your fingertips.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating Projects and Uploading CSV Files&lt;/strong&gt;&lt;br&gt;
Upon login, you'll be directed to a dedicated page where the magic happens. Here, you can initiate projects and start uploading CSV files containing both nodes and edges. The beauty lies in the structure and naming conventions of these files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Distinguishing Between Nodes and Edges&lt;/strong&gt;&lt;br&gt;
Cloud Express effortlessly distinguishes between nodes and edges by analyzing the filenames. If your file's name contains 'eg_', it's recognized as an edge file. On the other hand, if it carries 'vt_', it's deemed a vertex (node) file. This intuitive separation streamlines your project setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Predefined Sample Projects&lt;/strong&gt;&lt;br&gt;
To make your journey even smoother, Cloud Express offers three predefined project templates you can choose from:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Car Specification&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cybersecurity&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;p2p (Graphs with Crypto-graphs)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These templates come preconfigured, granting you a head start in your project creation process. You can dive right into these sample projects and tailor them to your specific needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding CSV File Formats for Nodes and Edges&lt;/strong&gt;&lt;br&gt;
Now, let's explore the structure of the CSV files you'll be uploading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CSV Format for Nodes (Vertices)&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field Name&lt;/th&gt;
&lt;th&gt;Field Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;id&lt;/td&gt;
&lt;td&gt;Unique identifier for the node (optional if id_field_exists is set to false)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Properties&lt;/td&gt;
&lt;td&gt;Columns with node properties (header row with property names)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;CSV Format for Edges&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field Name&lt;/th&gt;
&lt;th&gt;Field Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;start_id&lt;/td&gt;
&lt;td&gt;Node ID where the edge originates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;start_vertex_type&lt;/td&gt;
&lt;td&gt;Class of the starting node&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;end_id&lt;/td&gt;
&lt;td&gt;Node ID where the edge concludes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;end_vertex_type&lt;/td&gt;
&lt;td&gt;Class of the ending node&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;properties&lt;/td&gt;
&lt;td&gt;Columns with edge properties (header row with property names)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Access Sample CSV Formats&lt;/strong&gt;&lt;br&gt;
For a hands-on experience, check out our &lt;a href="https://github.com/AGEDB-INC/Cloud-Express/tree/main/backend/uploads/SampleCSVs"&gt;Sample CSV Format&lt;/a&gt; that aligns with these guidelines. This will give you a tangible idea of how to structure your own CSV files for nodes and edges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clearing Up the CSV Format&lt;/strong&gt;&lt;br&gt;
In summary, when crafting your CSV files, ensure that the structure aligns with the guidelines provided above. For nodes, include an &lt;code&gt;id&lt;/code&gt; column and subsequent property columns. For edges, list the &lt;code&gt;start_id&lt;/code&gt;, &lt;code&gt;start_vertex_type&lt;/code&gt;, &lt;code&gt;end_id&lt;/code&gt;, &lt;code&gt;end_vertex_type&lt;/code&gt;, and the edge properties.&lt;/p&gt;

&lt;p&gt;Embrace the simplicity of CSV files in Cloud Express – they're your key to organizing nodes, defining edges, and bringing your projects to life. Whether you're an experienced data manager or just starting out, Cloud Express empowers you to effortlessly manage, visualize, and explore your data.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Introducing Cloud-express: Access Apache Age with ease on Browser</title>
      <dc:creator>Kamlesh Kumar</dc:creator>
      <pubDate>Thu, 31 Aug 2023 15:18:38 +0000</pubDate>
      <link>https://forem.com/kamleshmmb45/introducing-cloud-express-access-apache-age-with-ease-on-browser-dhn</link>
      <guid>https://forem.com/kamleshmmb45/introducing-cloud-express-access-apache-age-with-ease-on-browser-dhn</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introducing Cloud-express: Access Apache Age with Ease on Browser&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cloud-express is an exciting web application that brings Apache Age, an advanced database management system, right to your fingertips. This innovative tool bridges the gap between users and Apache Age, making database management more accessible than ever before. With Cloud-express, you can now harness the power of Apache Age through a user-friendly web interface, eliminating the need for offline access and complex setups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simplified Access&lt;/strong&gt;&lt;br&gt;
Gone are the days of intricate installations and offline access struggles. Cloud-express offers a seamless experience by providing direct access to Apache Age from your web browser. No more wrestling with software installations – Cloud-express simplifies your journey by enabling you to utilize Apache Age's potent capabilities online.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User-Friendly Interface:&lt;/strong&gt; Cloud-express welcomes users with an intuitive interface, making database management a breeze, even for newcomers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web-Based Access:&lt;/strong&gt; Say farewell to offline limitations. Access and manage your databases through Cloud-express from anywhere with an internet connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Effortless Setup:&lt;/strong&gt; With Cloud-express, there's no need to be a tech guru. The setup process is straightforward, getting you up and running in no time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Capabilities:&lt;/strong&gt; Leverage Apache Age's cutting-edge features directly from Cloud-express, enhancing your database management efficiency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node Version:&lt;/strong&gt; Ensure you have Node version ^14.16.0 installed for optimal performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node Module - pm2:&lt;/strong&gt; For production mode, install the pm2 module with &lt;code&gt;npm i pm2&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Running Cloud-express&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: Install required modules using &lt;code&gt;npm run setup&lt;/code&gt;. Run the frontend with &lt;code&gt;npm run start&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Backend: Navigate to the backend folder and use &lt;code&gt;node index.js&lt;/code&gt; to start the backend.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe9t45wxla7qo0619ramp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe9t45wxla7qo0619ramp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building the Project&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build Front-end: Generate the front-end build with &lt;code&gt;npm run build-front&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Build Back-end: Create the back-end build using &lt;code&gt;npm run build-back&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Production Mode&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stop existing instances: &lt;code&gt;pm2 stop ag-viewer-develop&lt;/code&gt;, &lt;code&gt;pm2 delete ag-viewer-develop&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Start in production: &lt;code&gt;pm2 start ecosystem.config.js&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Setting Up PostgreSQL with AGE Extension&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Docker: Install Docker compatible with your OS. Pull the AGE image with &lt;code&gt;docker pull apache/age&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create Docker Container: Run &lt;code&gt;docker run --name myPostgresDb -p 5455:5432 -e POSTGRES_USER=postgresUser -e POSTGRES_PASSWORD=postgresPW -e POSTGRES_DB=postgresDB -d apache/age&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Access PostgreSQL Shell: Use &lt;code&gt;docker exec -it myPostgresDb bash&lt;/code&gt; to enter the Docker shell, then &lt;code&gt;psql -U postgresUser postgresDB&lt;/code&gt; to access PostgreSQL shell.&lt;/li&gt;
&lt;li&gt;Alternatively, access directly: Use &lt;code&gt;psql -U postgresUser -d postgresDB -p 5455 -h localhost&lt;/code&gt; and enter &lt;code&gt;postgresPW&lt;/code&gt; when prompted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Connecting to Cloud-express&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server Details: Connect URL - &lt;code&gt;localhost&lt;/code&gt;, Port - &lt;code&gt;5455&lt;/code&gt;, Database Name - &lt;code&gt;postgresDB&lt;/code&gt;, User Name - &lt;code&gt;postgresUser&lt;/code&gt;, Password - &lt;code&gt;postgresPW&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr63ejradatvxh8w4af7g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr63ejradatvxh8w4af7g.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exploring Projects&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dive into predefined projects or create your own. Enjoy the flexibility to tailor your database management experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Experience the Difference&lt;/strong&gt;&lt;br&gt;
Cloud-express revolutionizes how you interact with Apache Age. Say hello to streamlined access, enhanced capabilities, and a user-centric approach. Whether you're a database enthusiast or a newcomer, Cloud-express empowers you to manage databases effortlessly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Licensed for Freedom&lt;/strong&gt;&lt;br&gt;
Just like Apache Age Viewer, Cloud-express operates under the Apache License, Version 2.0. Feel the freedom to explore, innovate, and manage databases with confidence.&lt;/p&gt;

&lt;p&gt;Embrace Cloud-express and unlock a new era of simplified database management. Access, manage, and thrive with the power of Apache Age at your fingertips.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Writing Regression Tests for Apache AGE High Availability (AGEHA) or pgpool-II- A Quick Guide</title>
      <dc:creator>Kamlesh Kumar</dc:creator>
      <pubDate>Fri, 12 May 2023 20:06:08 +0000</pubDate>
      <link>https://forem.com/kamleshmmb45/writing-regression-tests-for-apache-age-high-availability-ageha-a-quick-guide-3o9p</link>
      <guid>https://forem.com/kamleshmmb45/writing-regression-tests-for-apache-age-high-availability-ageha-a-quick-guide-3o9p</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;One of the key aspects of maintaining robust software is the consistent application of testing, and regression tests play a significant role in this process. They help ensure new changes don't disrupt existing functionality or introduce new bugs. In this blog post, we will guide you on writing regression tests for the AGEHA version of Pgpool-II (version 4.4.2), which is designed to boost the speed and provide high availability for Apache AGE queries.&lt;/p&gt;

&lt;p&gt;Before proceeding, if you are unfamiliar with how to run regression tests in Pgpool-II, please refer to our previous blog post: &lt;strong&gt;&lt;a href="https://dev.to/kamleshmmb45/running-regression-test-for-age-ageha-age-high-availability-and-in-pgpool-ii-version-442-am0"&gt;Running Regression Test for AGE-AGEHA (AGE High Availability) and in Pgpool-II version 4.4.2&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Regression Test Script
&lt;/h2&gt;

&lt;p&gt;First surface through the code avaliable &lt;a href="https://github.com/apache/age/pull/891/files"&gt;here&lt;/a&gt;.&lt;br&gt;
**&lt;br&gt;
An overview how these regression tests are working.**&lt;/p&gt;

&lt;p&gt;To write your own regression tests, it's crucial to understand how the existing test script works. Let's take a look at the structure of a regression test script for Pgpool-II (AGEHA):&lt;/p&gt;

&lt;p&gt;The script begins with setting up the test environment, which includes sourcing necessary libraries and setting up directories. Then, the test environment for Pgpool-II is created with the pgpool_setup command. After the setup, the script starts the Pgpool-II servers and sets up the necessary environment variables.&lt;/p&gt;

&lt;p&gt;Next, the script creates a new graph database in each PostgreSQL backend and initiates some data. After that, it executes various Cypher queries to interact with the database.&lt;/p&gt;

&lt;p&gt;The script then checks the pgpool logs to ensure the queries have been executed on the correct backend nodes, depending on the type of the query (read or write) and the weights of the backend nodes. If the queries haven't been executed as expected, the script exits with a failure message. Otherwise, it continues to the next set of queries.&lt;/p&gt;

&lt;p&gt;Finally, the script shuts down all servers and exits with a success message.&lt;/p&gt;
&lt;h2&gt;
  
  
  Example: Writing a Regression Test for Simple Load Balancing
&lt;/h2&gt;

&lt;p&gt;In this example, we will explain the process of writing a regression test for simple load balancing using Cypher queries. We will follow the pattern shown in the provided code snippet.&lt;/p&gt;

&lt;p&gt;The test is designed to check whether the load balancing works as expected when executing Cypher queries. Here's a breakdown of the test steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Execute Cypher queries to create vertices:&lt;/strong&gt; The following two queries are executed to create two vertices with different properties in the graph.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Follwoing code is taken from &lt;a href="https://github.com/apache/age/pull/891/files"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$PSQL template1 &amp;lt;&amp;lt;EOF
SELECT * FROM cypher('test_graph', \$\$ CREATE (:vertex1 {i: 123}) \$\$) as (v agtype);
SELECT * FROM cypher('test_graph', \$\$ CREATE (:vertex2 {i: 124}) \$\$) as (v agtype);
EOF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check if simple load balancing worked:&lt;/strong&gt; After executing the queries, the script checks the pgpool logs to ensure that the queries were executed on the correct backend node (in this case, DB node id: 1). This is done using the fgrep command, which searches for the expected log message in the log/pgpool.log file. If the message is found, the test proceeds; otherwise, the script exits with a failure message.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fgrep "SELECT * FROM cypher('test_graph', \$\$ MATCH (v) RETURN v \$\$) as (v agtype);" log/pgpool.log |grep "DB node id: 1"&amp;gt;/dev/null 2&amp;gt;&amp;amp;1
if [ $? != 0 ];then
# expected result not found
    echo fail: select is sent to zero-weight node.
    ./shutdownall
    exit 1
fi
echo ok: simple load balance works.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This example demonstrates a simple regression test for load balancing. You can follow this pattern to create your own tests by modifying the Cypher queries and the expected log messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  About the .sh File
&lt;/h2&gt;

&lt;p&gt;The .sh file is a shell script file that contains a series of commands to be executed by the shell interpreter. In the context of writing regression tests, the .sh file contains the test script, which sets up the test environment, executes the Cypher queries, checks the results, and cleans up the test environment after completion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing Your Own Regression Test
&lt;/h2&gt;

&lt;p&gt;Now that you understand the structure of an existing regression test, let's explore how you can write your own. Here are some steps to get started:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set Up the Test Environment:&lt;/strong&gt; At the beginning of your script, you should set up the test environment similar to the one in the existing test script.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Create Your Test Data:&lt;/strong&gt; Depending on the specific feature or functionality you're testing, you may need to create your own test data. This could involve creating a new graph database and populating it with data, or modifying existing data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Write Your Test Queries:&lt;/strong&gt; The core part of your regression test will be the Cypher queries you use to interact with the database. Try to cover as many edge cases as possible to ensure the feature or functionality is robust.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check the Results:&lt;/strong&gt; After executing your test queries, you should check whether the queries were executed as expected. You can do this by checking the pgpool logs, as in the existing test script, or by querying the database and comparing the results to the expected output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clean Up:&lt;/strong&gt; Finally, clean up the test environment by shutting down all servers and removing any temporary files or directories.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Remember, the key to writing a good regression test is to cover as many edge cases as possible and to check the results thoroughly to ensure the system behaves as expected. Happy testing!&lt;/p&gt;

&lt;p&gt;Further references:&lt;br&gt;
Apache-age AGEHA(Pgpool-II) repo: &lt;a href="https://github.com/apache/age/tree/AGEHA"&gt;https://github.com/apache/age/tree/AGEHA&lt;/a&gt;&lt;br&gt;
Apache-age-repo: &lt;a href="https://github.com/apache/age/"&gt;https://github.com/apache/age/&lt;/a&gt;&lt;br&gt;
Apache-age documentation: &lt;a href="https://age.apache.org/age-manual/master/intro/overview.html"&gt;https://age.apache.org/age-manual/master/intro/overview.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>apacheage</category>
      <category>postgres</category>
      <category>pgpoool</category>
      <category>loadbalancing</category>
    </item>
    <item>
      <title>Running Regression Test for AGE-AGEHA (AGE High Availability) and in Pgpool-II version 4.4.2.</title>
      <dc:creator>Kamlesh Kumar</dc:creator>
      <pubDate>Thu, 11 May 2023 14:30:19 +0000</pubDate>
      <link>https://forem.com/kamleshmmb45/running-regression-test-for-age-ageha-age-high-availability-and-in-pgpool-ii-version-442-am0</link>
      <guid>https://forem.com/kamleshmmb45/running-regression-test-for-age-ageha-age-high-availability-and-in-pgpool-ii-version-442-am0</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Apache AGE has brought about an innovative feature to the table - Pgpool-II, which is specially designed to boost the speed and provide high availability for Apache AGE queries. This feature is succinctly named AGEHA, an abbreviation for AGE High Availability. One of the key aspects of maintaining the robustness and reliability of AGEHA is regression testing. This blog post will guide you through the process of running regression tests in the AGEHA or Pgpool-II (version 4.4.2), along with the prerequisites required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before diving into the regression testing process, let's review the prerequisites and how to install them on Ubuntu.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL&lt;/strong&gt;: Pgpool-II requires PostgreSQL for operation.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
sudo apt install postgresql postgresql-contrib

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Perl&lt;/strong&gt;: Pgpool-II uses Perl for running its regression tests.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install perl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt;: Git is required to clone the source code.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Cloning and Installing AGEHA/Pgpool-II
&lt;/h2&gt;

&lt;p&gt;With the prerequisites in place, we can now clone and install AGEHA/Pgpool-II. Use the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/apache/age -b AGEHA 
cd age
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Compile and install Pgpool-II with:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./configure
make
sudo make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running Regression Test in Pgpool-II
&lt;/h2&gt;

&lt;p&gt;Having installed AGEHA/Pgpool-II, we can now proceed to the regression test. Regression testing checks the system's behavior and helps identify potential bugs or inconsistencies. Here's how you can perform the regression test in Pgpool-II:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the src/test/regression directory in the cloned repository.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd src/test/regression
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Execute the pgpool_setup script, which creates a fresh test environment.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./pgpool_setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run the regression tests with make check. This command runs a suite of regression tests to ensure the system behaves as expected after new changes or updates. "make check" command is designed to run all suite of regression tests.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;make check
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running Regression Test for  Cypher Queries individualy.
&lt;/h2&gt;

&lt;p&gt;In addition to the general regression tests, AGEHA also supports regression tests specifically for Cypher queries. To execute these tests:&lt;/p&gt;

&lt;p&gt;Navigate to the 01.Cypher_load_balance directory.&lt;/p&gt;

&lt;p&gt;01.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd tests/Cypher_load_balance 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the test.sh script.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./test.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This script will execute the regression test specifically for Cypher queries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Regression testing plays a vital role in ensuring that the system behaves as expected, and newly introduced changes do not disrupt the existing functionality. In the context of AGEHA/Pgpool-II for Apache AGE, regression testing contributes significantly to maintaining its high-speed and high-availability features. We hope this guide has provided you with a clear understanding of how to run regression tests in (AGEHA)/Pgpool-II version 4.4.2 . Happy testing!&lt;/p&gt;

&lt;p&gt;Further references:&lt;br&gt;
Apache-age AGEHA(Pgpool-II) repo: &lt;a href="https://github.com/apache/age/tree/AGEHA"&gt;https://github.com/apache/age/tree/AGEHA&lt;/a&gt;&lt;br&gt;
Apache-age-repo: &lt;a href="https://github.com/apache/age/"&gt;https://github.com/apache/age/&lt;/a&gt;&lt;br&gt;
Apache-age documentation: &lt;a href="https://age.apache.org/age-manual/master/intro/overview.html"&gt;https://age.apache.org/age-manual/master/intro/overview.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>apacheage</category>
      <category>postgres</category>
      <category>pgpoool</category>
      <category>loadbalancing</category>
    </item>
    <item>
      <title>Apache-age: A Powerful and Open Source Graph Database Solution. [Part # 2]</title>
      <dc:creator>Kamlesh Kumar</dc:creator>
      <pubDate>Sun, 19 Mar 2023 19:38:10 +0000</pubDate>
      <link>https://forem.com/kamleshmmb45/apache-age-a-powerful-and-open-source-graph-database-solution-part-2-c82</link>
      <guid>https://forem.com/kamleshmmb45/apache-age-a-powerful-and-open-source-graph-database-solution-part-2-c82</guid>
      <description>&lt;h2&gt;
  
  
  Querying the Data
&lt;/h2&gt;

&lt;p&gt;Welcome back to our series on building a social network app with apche-age! In our previous blog post, we covered the basics of data modeling, setting up Neo4j, creating the graph, and adding sample data. Now that we have our graph populated with users, posts, comments, and relationships, it's time to start querying the data. In this post, we'll explore some example queries for retrieving useful information from our social network app. If you haven't read our previous post yet, we recommend starting there to get caught up on the basics of building a social network app with apche-age &lt;a href="https://dev.to/kamleshmmb45/building-a-social-network-app-with-apache-age-a-beginners-guide-31fj"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Query to get all posts
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * from cypher('social_network', $$

        MATCH (p:Post)
        RETURN p.title, p.content

$$) as (V agtype, C agtype);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query returns the title and content of all posts in the graph.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DWBaUHzD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1clxatnem7ws8oxuz9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DWBaUHzD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1clxatnem7ws8oxuz9r.png" alt="Image description" width="880" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Get all posts and their comments
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * from cypher('social_network', $$
        MATCH (V)-[R:COMMENTED]-(V2)
        RETURN V,R,V2
$$) as (V agtype, R agtype, V2 agtype);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query returns the title of each post and the content of each comment on that post.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P_aGPl_D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mek5eehhymlrneq5bpdd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P_aGPl_D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mek5eehhymlrneq5bpdd.png" alt="Image description" width="880" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Get all posts and their likes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * from cypher('social_network', $$
       MATCH (p:Post)&amp;lt;-[:LIKED]-(u:User)
       RETURN p.title, COUNT(u) as likes
$$) as (V agtype, R agtype);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query returns the title of each post and the number of likes it has.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mlZQqduC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1epp4pxezbqcu9xwa3fk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mlZQqduC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1epp4pxezbqcu9xwa3fk.png" alt="Image description" width="871" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Get all posts and their authors
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * from cypher('social_network', $$

    MATCH (u:User)-[:POSTED]-&amp;gt;(p:Post)
    RETURN p.title, u.name

$$) as (V agtype, R agtype);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query returns the title of each post and the name of its author.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CfYdOS9o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/diemur8h3u4uroc9cezw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CfYdOS9o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/diemur8h3u4uroc9cezw.png" alt="Image description" width="840" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Get all users and the users they follow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * from cypher('social_network', $$
       MATCH (u:User)-[:FOLLOWS]-&amp;gt;(f:User)
       RETURN u.name, COLLECT(f.name) as following
$$) as (V agtype, R agtype);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query returns the name of each user and a list of the names of the users they follow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9Z5058Ql--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pbco1cdnipotp9henxj4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9Z5058Ql--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pbco1cdnipotp9henxj4.png" alt="Image description" width="840" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;For further help you can look though the documentation &lt;a href="https://age.apache.org/"&gt;here&lt;/a&gt; and Apache-age repo &lt;a href="https://github.com/apache/age"&gt;here&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>apacheage</category>
      <category>postgresqextension</category>
      <category>database</category>
      <category>opensource</category>
    </item>
    <item>
      <title>"Building a Social Network App with Apache-age: A Beginner's Guide"</title>
      <dc:creator>Kamlesh Kumar</dc:creator>
      <pubDate>Sun, 19 Mar 2023 19:30:24 +0000</pubDate>
      <link>https://forem.com/kamleshmmb45/building-a-social-network-app-with-apache-age-a-beginners-guide-31fj</link>
      <guid>https://forem.com/kamleshmmb45/building-a-social-network-app-with-apache-age-a-beginners-guide-31fj</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Apache-age is a popular graph database that is widely used for building applications that deal with highly interconnected data. In this blog post, we'll walk you through building a social network app using apache-age. We'll cover the data model, setting up apache-age, creating the graph, adding sample data, and querying the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data Model
&lt;/h2&gt;

&lt;p&gt;A social network app has many interconnected entities, such as users, posts, comments, and likes. In a graph database like apache-age, we can represent each of these entities as a node, and the relationships between them as edges. Here's an example data model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User: A user of the app&lt;/li&gt;
&lt;li&gt;Post: A post made by a user&lt;/li&gt;
&lt;li&gt;Comment: A comment made on a post&lt;/li&gt;
&lt;li&gt;Like: A like given to a post&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'll also have the following relationships between entities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FOLLOWS: A user follows another user&lt;/li&gt;
&lt;li&gt;POSTED_BY: A post is made by a user&lt;/li&gt;
&lt;li&gt;COMMENTED_ON: A comment is made on a post&lt;/li&gt;
&lt;li&gt;LIKED: A user likes a post&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a &lt;strong&gt;diagram&lt;/strong&gt; of the &lt;strong&gt;data model&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────┐ FOLLOWS ┌─────┐
│User │────────&amp;gt;│User │
└─────┘         └─────┘
    |             |
    | POSTED_BY   |
    v             v
┌─────┐       ┌─────┐
│Post │       │User │
└─────┘       └─────┘
    |             |
    | COMMENTED_ON|
    v             v
┌───────┐     ┌─────┐
│Comment│     │Post │
└───────┘     └─────┘
    |             |
    | LIKED       |
    v             v
┌─────┐       ┌─────┐
│User │       │Post │
└─────┘       └─────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In this data model, each node represents an entity in the social network, and each edge represents a relationship between them. For example, a User node might be connected to a Post node by a POSTED edge, indicating that the user created the post. Similarly, a User node might be connected to another User node by a FOLLOWS edge, indicating that the user is following the other user.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up Apache Age
&lt;/h2&gt;

&lt;p&gt;Before we can start building our social network app, we need to set up apache-age. Using the blog at &lt;a href="**https://theundersurfers.netlify.app/age-installation/**"&gt;link&lt;/a&gt;. Once installed, we can start the apache-age server and open the apache-age viewer in browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating the Graph
&lt;/h2&gt;

&lt;p&gt;Once we have apache-age set up, we can create the graph using Cypher&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;select create_graph('social_network');

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's some Cypher code to create the nodes and edges in our social network graph:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * from cypher('social_network', $$
        CREATE (Alice:User {name: 'Alice'})
CREATE (Bob:User {name: 'Bob'})
CREATE (Charlie:User {name: 'Charlie'})
CREATE (Dave:User {name: 'Dave'})

CREATE (Post1:Post {title: 'My First Post', content: 'Hello world!'})
CREATE (Post2:Post {title: 'My Second Post', content: 'This is my second post.'})
CREATE (Post3:Post {title: 'My Third Post', content: 'Just testing things out.'})

CREATE (Comment1:Comment {content: 'Nice post!'})
CREATE (Comment2:Comment {content: 'I agree.'})
CREATE (Comment3:Comment {content: 'Could use some work.'})

CREATE (Alice)-[:POSTED]-&amp;gt;(Post1)
CREATE (Bob)-[:POSTED]-&amp;gt;(Post2)
CREATE (Alice)-[:POSTED]-&amp;gt;(Post3)

CREATE (Charlie)-[:COMMENTED]-&amp;gt;(Comment1)
CREATE (Dave)-[:COMMENTED]-&amp;gt;(Comment2)
CREATE (Bob)-[:COMMENTED]-&amp;gt;(Comment3)

CREATE (Alice)-[:LIKED]-&amp;gt;(Post2)
CREATE (Bob)-[:LIKED]-&amp;gt;(Post1)
CREATE (Charlie)-[:LIKED]-&amp;gt;(Post2)
CREATE (Dave)-[:LIKED]-&amp;gt;(Post3)

CREATE (Alice)-[:FOLLOWS]-&amp;gt;(Bob)
CREATE (Alice)-[:FOLLOWS]-&amp;gt;(Charlie)
CREATE (Bob)-[:FOLLOWS]-&amp;gt;(Charlie)
CREATE (Charlie)-[:FOLLOWS]-&amp;gt;(Dave)


$$) as (V agtype);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code creates nodes for each user and post, comment, and edges to represent the relationships between them. For example, the CREATE (Alice)-[:POSTED]-&amp;gt;(Post1) statement creates a POSTED relationship between the Alice node and the Post1 node.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding more Sample Data
&lt;/h2&gt;

&lt;p&gt;Now that we have created our graph, we can add some sample data to it. Here's some Cypher code to add sample data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * from cypher('social_network', $$

        CREATE (Alice)-[:POSTED]-&amp;gt;(:Post {title: 'Hello World', content: 'My first post!'})
        CREATE (Bob)-[:POSTED]-&amp;gt;(:Post {title: 'Second Post', content: 'This is my second post.'})
        CREATE (Charlie)-[:POSTED]-&amp;gt;(:Post {title: 'Third Post', content: 'Just testing things out.'})
        CREATE (Dave)-[:POSTED]-&amp;gt;(:Post {title: 'Fourth Post', content: 'Hello everyone!'})

        CREATE (Charlie)-[:COMMENTED]-&amp;gt;(:Comment {content: 'Nice post!'})
        CREATE (Dave)-[:COMMENTED]-&amp;gt;(:Comment {content: 'I agree.'})
        CREATE (Bob)-[:COMMENTED]-&amp;gt;(:Comment {content: 'Could use some work.'})

        CREATE (Alice)-[:LIKED]-&amp;gt;(:Post {title: 'Second Post'})
        CREATE (Bob)-[:LIKED]-&amp;gt;(:Post {title: 'Hello World'})
        CREATE (Charlie)-[:LIKED]-&amp;gt;(:Post {title: 'Second Post'})
        CREATE (Dave)-[:LIKED]-&amp;gt;(:Post {title: 'Fourth Post'})

        CREATE (Alice)-[:FOLLOWS]-&amp;gt;(Bob)
        CREATE (Alice)-[:FOLLOWS]-&amp;gt;(Charlie)
        CREATE (Bob)-[:FOLLOWS]-&amp;gt;(Charlie)
        CREATE (Charlie)-[:FOLLOWS]-&amp;gt;(Dave)

$$) as (V agtype);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code adds more posts, comments, and edges to the graph.&lt;/p&gt;

&lt;p&gt;You can query to see the data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * from cypher('social_network', $$
        MATCH (V)-[R]-(V2)
        RETURN V,R,V2
$$) as (V agtype, R agtype, V2 agtype);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fC8XaAN0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f0opbt01gzdeir28yox7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fC8XaAN0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f0opbt01gzdeir28yox7.png" alt="Image description" width="880" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So at this point we have completed our data creation, now our  model is ready and we can query the data as per our requirements.&lt;/p&gt;

&lt;p&gt;To learn more about querying the data you can follow the part  2 of the blog at &lt;a href="https://dev.to/kamleshmmb45/apache-age-a-powerful-and-open-source-graph-database-solution-part-2-c82"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;References&lt;br&gt;
For further help you can look though the documentation &lt;a href="https://age.apache.org/"&gt;here&lt;/a&gt; and Apache-age repo &lt;a href="https://github.com/apache/age"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>apacheage</category>
      <category>postgresqextension</category>
      <category>database</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Apache-age: The best Open Source Graph Database Solution</title>
      <dc:creator>Kamlesh Kumar</dc:creator>
      <pubDate>Wed, 08 Mar 2023 13:30:38 +0000</pubDate>
      <link>https://forem.com/kamleshmmb45/apache-age-the-best-open-source-graph-database-solution-edb</link>
      <guid>https://forem.com/kamleshmmb45/apache-age-the-best-open-source-graph-database-solution-edb</guid>
      <description>&lt;p&gt;Are you looking for &lt;strong&gt;powerful&lt;/strong&gt; and open-source Graph database solution?&lt;/p&gt;




&lt;p&gt;Graph databases are becoming increasingly popular due to their ability to store and manage complex relationships between data points. They are commonly used in &lt;strong&gt;applications&lt;/strong&gt; such as social networks, recommendation systems, and fraud detection. However, finding the &lt;strong&gt;right graph database solution&lt;/strong&gt; can be a daunting task. There are some popular graph databases on the market, but they can be expensive to use. That's where "&lt;strong&gt;apache-age&lt;/strong&gt;" comes in - an open source, PostgreSQL-based graph database solution that offers a lot of the same functionality as the other graph databases do, but at &lt;strong&gt;no cost&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One of the key advantages of "apache-age" is its &lt;strong&gt;basis&lt;/strong&gt; on &lt;strong&gt;PostgreSQL&lt;/strong&gt;, which is one of the most powerful and widely used open source relational databases. This means that "apache-age" can leverage all of the features and benefits of PostgreSQL, including its &lt;strong&gt;robust transactional support, data integrity, and scalability&lt;/strong&gt;. Additionally, "apache-age" is able to take advantage of PostgreSQL's powerful &lt;strong&gt;query optimization engine&lt;/strong&gt;, which allows it to execute complex queries quickly and efficiently.&lt;/p&gt;

&lt;p&gt;One of the advantages of "apache-age" is its compatibility with the &lt;strong&gt;open Cypher&lt;/strong&gt; Query Language, which is a widely used and standardized language for querying graph databases and easy to use. which means that developers can use it to easily to interact with their graph database. Additionally, because Cypher is an open standard, developers can use it to query other graph databases as well, providing greater &lt;strong&gt;flexibility and interoperability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The "apache-age" extension also includes a number of features that make it easier to work with graph data. &lt;strong&gt;For example&lt;/strong&gt;, it includes a number of &lt;strong&gt;built-in functions&lt;/strong&gt; that allow you to easily traverse relationships between nodes, find shortest paths, and perform other common graph operations. &lt;/p&gt;

&lt;p&gt;One of the most compelling aspects of "apache-age" is that it is completely &lt;strong&gt;open source&lt;/strong&gt; and is backed by &lt;strong&gt;the Apache Software Foundation&lt;/strong&gt;. This means that it is free to use, and that it is actively maintained and supported by a community of developers. It also means that you have full &lt;strong&gt;control over the source code&lt;/strong&gt;, and can customize it to suit your specific needs.&lt;/p&gt;

&lt;p&gt;"Apache-age" is continuously improving with new features such as &lt;strong&gt;drivers for multiple programming languages&lt;/strong&gt; like Golang, &lt;strong&gt;high availability&lt;/strong&gt; support through &lt;strong&gt;pgpool-II&lt;/strong&gt;, and upcoming desktop management applications. These improvements will make it even easier to integrate, work with and visualize your graph data. The future looks bright for "apache-age" with continued development and innovation on the horizon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt; and &lt;strong&gt;documentation&lt;/strong&gt; for "apache-age" is straightforward and well-documented. You can find detailed instructions on how to install and use the &lt;strong&gt;extension&lt;/strong&gt; at this &lt;a href="https://theundersurfers.netlify.app/age-installation/"&gt;blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The offical &lt;a href="https://age.apache.org/age-manual/master/index.html"&gt;&lt;strong&gt;documentation&lt;/strong&gt;&lt;/a&gt; of apche-age includes a number of tutorials and examples that can help you get started with using "apache-age" in your own projects.&lt;/p&gt;

&lt;p&gt;In conclusion, if you're looking for a &lt;strong&gt;powerful&lt;/strong&gt; and &lt;strong&gt;open source&lt;/strong&gt; graph database solution, "apache-age" is definitely worth considering. It offers a lot of the functionality, but at no cost, and it leverages the power of &lt;strong&gt;PostgreSQL&lt;/strong&gt; to provide a scalable and efficient graph database. With its support for open-cypher and its built-in graph functions, it is also easy to work with and &lt;strong&gt;customize to suit your needs&lt;/strong&gt;. Give it a &lt;strong&gt;try&lt;/strong&gt; today and see how it can improve your graph database workflows.&lt;/p&gt;

&lt;p&gt;I hope this blog post helps to persuade you of the &lt;strong&gt;benefits&lt;/strong&gt; of using "&lt;strong&gt;apache-age&lt;/strong&gt;" as a graph database solution, and provides a useful introduction to its features and advantages. Don't hesitate to check out the official &lt;a href="https://age.apache.org/age-manual/master/index.html"&gt;&lt;strong&gt;documentation&lt;/strong&gt;&lt;/a&gt; and GitHub &lt;a href="https://github.com/apache/age/tree/master"&gt;repository&lt;/a&gt; for more information and resources.&lt;/p&gt;

&lt;p&gt;For more details visit apache-age official &lt;a href="https://age.apache.org/"&gt;website&lt;/a&gt;:&lt;/p&gt;

</description>
      <category>apacheage</category>
      <category>postgresqextension</category>
      <category>opensource</category>
      <category>database</category>
    </item>
  </channel>
</rss>
