Skip to main content

Track and visualize changes in a Neo4j database schema

Project description

neo4j-meta-logger

A python module to log and track your neo4j graph schema transformations.

call db.schema.visualization + ⏲️ a time machine + some helpful 🔧 tools and 📈 statistics

Works fast with neo4j graphs of any size 💪

Maintainer: Tim Bleimehl
Status: Pre-alpha

Example

Lets create a sample graph with python and Neo4J

import py2neo
from NeoMetaTracker import NeoMetaTracker

g = py2neo.Graph(name="test_graph")

g.run(
    "CREATE p = (:Human{name:'Amina Okujewa'})-[:LIVES_ON]->(:World {name: 'Earth'})"
)
g.run(
    "CREATE p = (:Cat{name:'Grumpy Cat'})-[:LIVES_ON]->(:World {name: 'Internet'})"
)
g.run(
    "MATCH (wI:World{name:'Internet'}),(wE:World{name:'Earth'}) CREATE (wI)-[:EXISTS_ON]->(wE)"
)

Our graph looks like this:

"docs/01_test_base_graph.png"

and the schema will look like this:

"docs/03_schema.png"

Lets capture the current status to analyse the changes later.

meta_logger = NeoMetaTracker(test_graph)
meta_logger.capture()

Now lets do some changes to our Graphs content

g.run(
    "MATCH (wI:World{name:'Internet'}),(wE:World{name:'Earth'}) CREATE (as:Human{name:'Aaron Swartz'})-[:LIVES_ON]->(wI), (as)-[:LIVES_ON]->(wE)"
)

Our graph now looks like this

"docs/docs/02_graph_extended.png"

The schema still looks the same. We wont be able to recognize changes without any help:

call db.schema.visualization

"docs/03_schema.png"

Here come NeoMetaTracker for the rescue

Lets do another capture to compare the changes we did:

meta_logger.capture()

Now we can analyze the changes in the graph:

meta_logger.get_numeric_last_changes()

This outputs:

{'labels': {'Human': 1}, 'relations': {'LIVES_ON': 2}}

We can see we created one new Node with the Label Human and 2 new relations named LIVES_ON.
This allready can be a valuable meta information, but wait there is more...

Lets visualize the schema changes in another graph.

changes_subgraph = meta_logger.get_schemagraph_last_changes()
schema_g = py2neo.Graph(name="test_graph")
schema_g.merge(changes_subgraph)

Now we only see the part of our schema that changed:

"docs/04_schema_changes.png"

We can also recall any old state of our schema on any point in time where we did a capture

meta_logger.capture_points[0].schema

This will return a py2neo.Subgraph of the schema from the beginning of our script. Same as call db.schema.visualization but with a timemachine :)

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

NeoMetaTracker-0.0.11.tar.gz (139.2 kB view details)

Uploaded Source

Built Distribution

NeoMetaTracker-0.0.11-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file NeoMetaTracker-0.0.11.tar.gz.

File metadata

  • Download URL: NeoMetaTracker-0.0.11.tar.gz
  • Upload date:
  • Size: 139.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.4

File hashes

Hashes for NeoMetaTracker-0.0.11.tar.gz
Algorithm Hash digest
SHA256 776c173ff4f3e6e46d91cfafa1898b84da9ada612215ca9ee0abdb01fe4d7a18
MD5 9e39a4d6ae898aca8f72c8dc917ce00b
BLAKE2b-256 13421d47effef1c436598fe824806afdb1f6e6ca031728993fdf0ef0593ae93e

See more details on using hashes here.

File details

Details for the file NeoMetaTracker-0.0.11-py3-none-any.whl.

File metadata

File hashes

Hashes for NeoMetaTracker-0.0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 c31d2239e239f6d09633920721d939d005b78d4d3d2d35b9f941da8c2600163d
MD5 4eaf3172a729b7b1d8d612812a38eba3
BLAKE2b-256 8ee37283ffdef6233034ad496862a95b823223e80d46594f196ca30c789ead16

See more details on using hashes here.

Supported by

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