GithubHelp home page GithubHelp logo

gephi / graphstore Goto Github PK

View Code? Open in Web Editor NEW
69.0 8.0 26.0 2.29 MB

Fast in-memory graph structure, powering Gephi

License: Apache License 2.0

Java 99.98% HTML 0.02%
java graph network analysis graphviz gephi

graphstore's Introduction

GraphStore

build Apache License, Version 2.0, January 2004 Maven Central Coverage Status

GraphStore is an in-memory graph structure implementation written in Java. It's designed to be powerful, efficient and robust. It's powering the Gephi software and supports large graphs in intensive applications.

Features Highlight

  • Blazing fast graph data structure optimized for reading and writing
  • Comprehensive APIs to read and modify the graph structure
  • Low memory footprint - reduced usage of Java objects and collections optimized for caching
  • Supports directed, undirected and mixed graphs
  • Supports parallel edges (i.e. edges can have a label)
  • Any number of attributes can be associated with nodes or edges
  • Thread-safe - Implements read-write locking mechanism to allow multiple reading threads
  • Supports dynamic graphs (graphs over time)
  • Built-in index on attribute values
  • Fast and compact binary serialization
  • Spatial indexing based on a quadtree

Download

Stable releases can be found on Maven central.

Development builds can be found on Sonatype's Snapshot Repository.

Documentation

API Documentation is available here.

Follow this QuickStart to get started.

Usage

From a Maven project

<dependency>
    <groupId>org.gephi</groupId>
    <artifactId>graphstore</artifactId>
    <version>0.7.2</version>
</dependency>

From a Gradle project

compile 'org.gephi:graphstore:0.7.2'

Dependencies

GraphStore is built for JRE 11+ and depends on FastUtil and Colt.

For a complete list of dependencies, consult the pom.xml file.

Developers

How to build

GraphStore uses Maven for building.

> mvn clean install

Note that code formatting is automatically applied at that time.

How to test

> mvn test

How to obtain code coverage report

> mvn jacoco:report

Contribute

The source code is available under the Apache 2.0 license. Contributions are welcome.

graphstore's People

Contributors

dependabot[bot] avatar eduramiba avatar gerwinjansen avatar mbastian avatar trajar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

graphstore's Issues

Graphstore currently can't be used with the graph-streaming plugin

Hi,

I've been working on some software that constructs graphs using graphstore. I also want to
use the graph-streaming plugin/libraries in my software, to be able to stream the graphs I'm building to Gephi clients. It seems like it is possible for me to swap out graphstore with the org.graph packages in gephi-toolkit. However, it still seems to be an issue that there are naming conflicts by having duplicate "org.graph" package names in projects from the gephi group. It also feels like it is the intention to have graphstore 'replace' org.graph in the toolkit, but hasn't been finished yet. I'm just generally confused because I don't know how efficient org.graph from the toolkit might be compared to graphstore and so on and so forth; there are differences, such as not having GraphListener and GraphEvent, which made me unable to use it in my project.

Remove timestamp index indirection in TimestampSet and TimestampMap

This system should be kept in the Timestamp indices so keys can remain array indices but it adds to much overhead in the TimestampSet and TimestampMap classes. We shall directly use the (double) timestamp instead of the timestamp index. This will simplify the implementation and remove the index lookup in many places. It will also allow to keep the set/map sorted by timestamp rather than sorted by index, which will speed up some operations (e.g. estimators). Using double keys instead of integers will use twice more memory but I think it's worth for the speed and simplicity gain.

Introduce deepEquals/deepHashCode paradigm to guarantee immutability

Multiple internal implementations (TableImpl, NodeStore, GraphViewImpl) override equals() and hashcode() but shouldn't as these objects aren't immutable and could potentially be used as keys in hash tables. In most cases, this is only needed for testing purposes (e.g. serialization tests) and could easily be replaced by deepEquals/deepHashCode.

Reorganize packages

Simplify packages so only the following five remains:

  • org.gephi.graph.api
  • org.gephi.graph.api.types
  • org.gephi.graph.spi
  • org.gephi.graph.impl
  • org.gephi.graph.impl.utils

Better handling in EdgeImpl with static/dynamic getWeight() usage

Edges can either have a static or a dynamic weight. A static weight is simply a double number and has a default value of 1.0. Dynamic weights are associated to timestamps and set by using setWeight(double, double). We enforce the usage of one or the other so it shouldn't be possible to get the static weight after a dynamic weight has been set and vice-versa.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.