Skip to content

Testing Environment

Detailed specifications for the hardware and software used in benchmark testing.


Overview

All benchmarks are run in a controlled, reproducible environment using GitHub Actions. This ensures consistency across runs and allows anyone to reproduce the results.


Hardware

GitHub Actions Runner

Component Specification
Platform Ubuntu 22.04.4 LTS (Jammy Jellyfish)
CPU 2-core Intel Xeon CPU @ 2.20GHz
Memory 7 GB RAM
Storage 14 GB SSD (ephemeral)
Network 1 Gbps (for Neo4j connection)

CPU Details

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Address sizes:                   46 bits physical, 48 bits virtual
Byte Order:                      Little Endian
CPU(s):                          2
On-line CPU(s) list:             0,1
Vendor ID:                       GenuineIntel
Model name:                      Intel Xeon Processor (Cascadelake)
CPU family:                      6
Model:                           85
Thread(s) per core:              1
Core(s) per socket:              2
Socket(s):                       1

Software

Operating System

Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy
Kernel:         5.15.0-1058-gke

Runtime Environment

Component Version
Node.js v20.11.1
npm 10.2.4
Python 3.10.12 (for MkDocs)

Database Versions

Benchmark Engines

Engine Version Installation Date
CongraphDB 0.1.0 (local) 2026-03-16
Neo4j 5.15.0 Community 2026-03-16
Kuzu 0.4.0 (placeholder) -
SQLite 3.45.1 (via better-sqlite3 9.2.2) 2026-03-16
Graphology 0.25.4 2026-03-16

Neo4j Configuration

# Basic configuration
dbms.default_listen_address=0.0.0.0
dbms.connector.bolt.listen_address=:7687
dbms.connector.http.listen_address=:7474

# Memory settings (for consistency)
dbms.memory.heap.initial_size=512m
dbms.memory.heap.max_size=1g
dbms.memory.pagecache.size=1g

# Performance settings
dbms.connector.bolt.thread_pool_max_size=10
dbms.connector.bolt.thread_pool_min_size=5

Build Tools

TypeScript Configuration

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
}

Dependencies

Key production dependencies:

{
  "congraphdb": "^0.1.6",
  "neo4j-driver": "^5.15.0",
  "graphology": "^0.25.4",
  "better-sqlite3": "^9.2.2"
}


GitHub Actions Workflow

Benchmark Job Configuration

runs-on: ubuntu-latest

steps:
  - uses: actions/checkout@v4

  - name: Setup Node.js
    uses: actions/setup-node@v4
    with:
      node-version: '20'

  - name: Install dependencies
    run: npm ci

  - name: Build
    run: npm run build

  - name: Run benchmarks
    run: npm run benchmark:all

  - name: Upload results
    uses: actions/upload-artifact@v3
    with:
      name: benchmark-results
      path: results/*.json

Local Reproduction

Docker Environment

To replicate the GitHub Actions environment locally:

# Run in Ubuntu container
docker run -it --cpus=2 --memory=7g ubuntu:22.04

# Inside container
apt-get update
apt-get install -y curl git python3

# Install Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs

# Clone and run
git clone https://github.com/congraph-ai/congraphdb-benchmark.git
cd congraphdb-benchmark
npm install
npm run benchmark

Direct Reproduction

On Ubuntu 22.04+:

# Install dependencies
sudo apt-get update
sudo apt-get install -y build-essential python3

# Install Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

# Run benchmarks
git clone https://github.com/congraph-ai/congraphdb-benchmark.git
cd congraphdb-benchmark
npm install
npm run build
npm run benchmark

Performance Variability

Expected Variation

Due to GitHub Actions environment variability, expect: - Ingestion: ±5% variation between runs - Traversal: ±10% variation (sensitive to CPU cache) - PageRank: ±8% variation - Memory: ±3% variation

Mitigation Strategies

  • Multiple Runs: Each test runs 3+ times
  • Median Reporting: Outliers excluded from final results
  • Warm-up Period: 10 runs before measurement
  • Consistent Timing: Runs scheduled at off-peak times

System Monitoring

Metrics Collected

During benchmark execution, we collect:

const metrics = {
  // Memory
  heapUsed: process.memoryUsage().heapUsed,
  heapTotal: process.memoryUsage().heapTotal,
  rss: process.memoryUsage().rss,
  external: process.memoryUsage().external,

  // CPU (where available)
  cpuUsage: process.cpuUsage(),

  // Timing
  timestamp: Date.now(),
  userTime: process.cpuUsage().user,
  systemTime: process.cpuUsage().system
};

Environment Comparison

GitHub Actions vs Local

Factor GitHub Actions Typical Local
CPU 2-core Xeon @ 2.2GHz 4-8 core @ 3-4GHz
Memory 7 GB 16-32 GB
Storage SSD (shared) SSD/NVMe (dedicated)
Consistency High Variable

Note: Local results may be 20-50% faster due to better hardware. Relative performance between engines should remain consistent.


Troubleshooting

Neo4j Connection Issues

If Neo4j fails to connect:

# Check if Neo4j is running
sudo systemctl status neo4j

# Check ports
netstat -tulpn | grep 7687

# View logs
sudo tail -f /var/log/neo4j/neo4j.log

Memory Errors

If encountering out-of-memory errors:

# Increase Node.js memory limit
export NODE_OPTIONS="--max-old-space-size=4096"

# Or run specific scale
npm run benchmark:small  # instead of large

References


← Back to Methodology