Skip to main content

High-performance in-memory graph database

Project description

FastGraph

Python Version License PyPI Version

FastGraph is a high-performance, in-memory graph database engineered for Python applications that demand speed, low latency, and zero nonsense. Built for developers who want graph operations that actually keep up.

Created by BRAHMAI with ❤️ & ☕.


Key Features

  • High-performance adjacency-list engine with O(1) edge lookups
  • Memory-efficient internals and lightweight subgraph views
  • Automatic and manual indexes for ultra-fast queries
  • JSON/YAML configuration system with sensible defaults
  • Powerful CLI for common graph management tasks
  • Persistence support across msgpack, pickle, and JSON
  • Full thread safety for concurrent read/write workloads
  • Integrated performance monitoring and instrumentation

Quick Start

Installation

pip install fastgraph

Basic Usage

from fastgraph import FastGraph

graph = FastGraph("my_graph")

graph.add_node("alice", name="Alice", age=30, type="Person")
graph.add_node("bob", name="Bob", age=25, type="Person")
graph.add_node("company", name="TechCorp", type="Company")

graph.add_edge("alice", "bob", "friends", since=2021)
graph.add_edge("alice", "company", "works_at", role="Engineer")
graph.add_edge("bob", "company", "works_at", role="Manager")

people = graph.find_nodes(type="Person")
print(len(people))

friends = graph.neighbors_out("alice", rel="friends")
print([n for n, edge in friends])

graph.save("my_graph.msgpack")

Configuration

FastGraph supports JSON/YAML configs for repeatable setups.

Example default configuration:

engine:
  name: "FastGraph"
  version: "2.0.0"

storage:
  data_dir: "~/.cache/fastgraph/data"
  default_format: "msgpack"

memory:
  query_cache_size: 128
  cache_ttl: 3600

indexing:
  auto_index: true
  default_indexes: ["id", "type", "name"]

performance:
  thread_pool_size: 4
  batch_threshold: 100

cli:
  default_output_format: "table"
  verbose: false

Usage:

from fastgraph import FastGraph
from fastgraph.config import ConfigManager

config = ConfigManager("my_config.yaml")
graph = FastGraph("my_graph", config=config)

CLI Tools

fastgraph create --name "social_network"
fastgraph import data.json --format json --save social.msgpack
fastgraph export social.msgpack --format json --output export.json
fastgraph stats social.msgpack --detailed --components
fastgraph config --show
fastgraph config --set storage.default_format=json

Advanced Capabilities

Indexing

graph.build_node_index("type")
graph.build_node_index("age")

people = graph.find_nodes(type="Person")
engineers = graph.find_nodes(role="Engineer")

stats = graph.get_index_stats()
print(stats["global"]["index_hits"])

Batch Operations

graph.add_nodes_batch([
    ("user1", {"name": "John", "age": 28}),
    ("user2", {"name": "Jane", "age": 32}),
    ("user3", {"name": "Bob",  "age": 25})
])

graph.add_edges_batch([
    ("user1", "user2", "friends"),
    ("user2", "user3", "colleagues"),
    ("user1", "user3", "acquaintances")
])

Subgraph Views

view = graph.create_subgraph_view(
    "people",
    lambda nid, attrs: attrs.get("type") == "Person"
)

print(view.node_count)
components = graph.traversal_ops.connected_components()

Traversal Algorithms

bfs = graph.traversal_ops.bfs("alice", max_depth=2)
path = graph.traversal_ops.shortest_path("alice", "bob")

for p in graph.traversal_ops.find_paths("alice", "bob", max_length=3):
    print(p)

Performance Monitoring

from fastgraph.utils.performance import performance_monitor

@performance_monitor("query_op")
def q():
    return graph.find_nodes(type="Person", age__gte=25)

monitor = graph.get_performance_monitor()
print(monitor.get_stats()["query_op"].avg_duration)

Testing

pip install fastgraph[dev]
pytest
pytest --cov=fastgraph --cov-report=html

Development

Setup

git clone https://github.com/fastgraph/fastgraph.git
cd fastgraph
pip install -e ".[dev]"
pre-commit install

Quality

black fastgraph tests examples
flake8 fastgraph tests examples
mypy fastgraph
pre-commit run --all-files

Benchmarks

FastGraph is tuned for high throughput and low latency.

Operation Complexity
Node lookup O(1)
Edge lookup O(1)
Neighbor query O(degree)
Indexed search O(log n)
Batch inserts O(n)

Detailed benchmarks live in benchmarks/.


Contributing

  1. Fork the repo
  2. Create a branch
  3. Commit your changes
  4. Push and open a PR

We keep contributions simple and frictionless.


License

MIT. See the LICENSE file.


Acknowledgments

FastGraph builds on proven graph database principles and a relentless focus on performance and developer experience. Thanks to all contributors and the Python ecosystem that made it possible.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastgx-2.0.0.tar.gz (69.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastgx-2.0.0-py3-none-any.whl (63.0 kB view details)

Uploaded Python 3

File details

Details for the file fastgx-2.0.0.tar.gz.

File metadata

  • Download URL: fastgx-2.0.0.tar.gz
  • Upload date:
  • Size: 69.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for fastgx-2.0.0.tar.gz
Algorithm Hash digest
SHA256 f5a76e5617cc165957cc78d1dc998531cf9138297f5f4fd708613feaf10bdea3
MD5 9675308ab67a2abc1678ee08fc0c4086
BLAKE2b-256 e0342db8091fde3c97bcf047b4043ed13396e546e4d00a5ae42c86b06e9bc126

See more details on using hashes here.

File details

Details for the file fastgx-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: fastgx-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 63.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for fastgx-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7fb3919c109ac7797de86a4c2c466d0be60fb81ada85387ee23b51eb6dfdbc99
MD5 7b4a6b473fc55a88497f16410cacc1df
BLAKE2b-256 7aae4d9f6d06d50371acd72f2ea5a8647fd89b6bee164907fb4e3e16b4ae84e8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page