GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - JuliaComputing/SQLiteGraph.jl: A lightweight SQLite-based Graph Database for Julia.

BranchesTags
Open more actions menu

Latest commit

 

History

56 Commits
56 Commits

Folders and files

NameName
Last commit message
Last commit date
.github/workflows
.github/workflows
 
 
examples
examples
 
 
src
src
 
 
test
test
 
 
.gitignore
.gitignore
 
 
LICENSE
LICENSE
 
 
Project.toml
Project.toml
 
 
README.md
README.md
 
 

Repository files navigation

Build status Codecov

SQLiteGraph

A Graph Database for Julia, built on top of SQLite.jl.



Definitions

SQLiteGraph.jl uses the Property Graph Model of the Cypher Query Language (PDF).

  • A Node describes a discrete object in a domain.
  • Nodes can have 0+ labels that classify what kind of node they are.
  • An Edge describes a directional relationship between nodes.
  • An edge must have a type that classifies the relationship.
  • Both edges and nodes can have additional key-value properties that provide further information.



Edges and Nodes

  • Nodes and Edges have a simple representation:
struct Node
    id::Int
    labels::Vector{String}
    props::EasyConfig.Config
end

struct Edge
    source::Int
    target::Int
    type::String
    props::EasyConfig.Config
end
  • With simple constructors:
Node(id, labels...; props...)

Edge(source_id, target_id, type; props...)



Adding Elements to the Graph

using SQLiteGraph

db = DB()

insert!(db, Node(1, "Person", "Actor"; name="Tom Hanks"))

insert!(db, Node(2, "Movie"; title="Forest Gump"))

insert!(db, Edge(1, 2, "Acts In"; awards=["Best Actor in a Leading Role"]))



Editing Elements

insert! will not replace an existing node or edge. Instead, use replace!.

replace!(db, Node(2, "Movie"; title="Forest Gump", genre="Drama"))



Simple Queries

  • Use getindex to access elements.
  • If : is used as an index, an iterator is returned.
  • If s::String is used as an index, an iterator of nodes where s is one of the labels is returned.
db[1]  # Node(1, "Person", "Actor"; name="Tom Hanks")

for node in db[:]
    println(node)
end

only(db["Movie"])  # Node(2, "Movie"; title="Forest Gump", genre="Drama")

# (Pretend the graph is populated with many more items.  The following return iterators.)

db[1, :, "Acts In"]  # All movies that Tom Hanks acts in

db[:, 2, "Acts In"]  # All actors in "Forest Gump"

db[1, 2, :]  # All relationships between "Tom Hanks" and "Forest Gump"

db[:, :, :]  # All edges



✨ Attribution ✨

SQLiteGraph is STRONGLY influenced by https://github.com/dpapathanasiou/simple-graph.



Under the Hood Details

  • Nodes and edges are saved in the nodes and edges tables, respectively.
  • nodes
    • id (INTEGER): unique identifier of a node
    • labels (TEXT): stored as ;-delimited (thus ; cannot be used in a label)
    • props (TEXT): stored as JSON3.write(props)
  • edges
    • source (INTEGER): id of "from" node (nodes(id) is a foreign key)
    • target (INTEGER): id of "to" node (nodes(id) is a foreign key)
    • type (TEXT): the "class" of the edge/relationship
    • props (TEXT)

About

A lightweight SQLite-based Graph Database for Julia.

Topics

graph-databasejuliasqlite

Resources

Readme
MIT license
Activity
Custom properties

Stars

31 stars

Watchers

1 watching

Forks

2 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.