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.1.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.1-py3-none-any.whl (63.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fastgx-2.0.1.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.1.tar.gz
Algorithm Hash digest
SHA256 151e91c8348482359922119b2c37d4ed8294a0f0473f449df3f61914cdee3d7a
MD5 056c2014d1c955de845f2bd51dfe24ab
BLAKE2b-256 4b1ab03be79dceea9953c741685925ce682fa3500030853816e05744538ad428

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastgx-2.0.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cdcf16adf79bf48badbf4e08eb2c33e9de93d23c2e5906f6d907de3ed071458b
MD5 99266ce31f4f7755e889ff7650605cc6
BLAKE2b-256 5bc453d7bd04c8e1254da0e24f37b1fccb7b1d35987d62b2682e0c59c57ad73f

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