ProductPromotion
Logo

Scala

made by https://0x3d.site

GitHub - twitter/cassovary: Cassovary is a simple big graph processing library for the JVM
Cassovary is a simple big graph processing library for the JVM - twitter/cassovary
Visit Site

GitHub - twitter/cassovary: Cassovary is a simple big graph processing library for the JVM

GitHub - twitter/cassovary: Cassovary is a simple big graph processing library for the JVM

Cassovary

Maven Central Build Status

Cassovary is a simple "big graph" processing library for the JVM. Most JVM-hosted graph libraries are flexible but not space efficient. Cassovary is designed from the ground up to first be able to efficiently handle graphs with billions of nodes and edges. A typical example usage is to do large scale graph mining and analysis of a big network. Cassovary is written in Scala and can be used with any JVM-hosted language. It comes with some common data structures and algorithms.

Please follow the cassovary project on twitter at @cassovary for updates.

Quick Start and Examples

After cloning the repository, type ./sbt which will download the sbt launch jar and launch the sbt console. Then type the following in the console:

  1. project cassovary-examples
  2. runMain HelloLoadGraph

There is a subproject included called cassovary-examples containing simple java and scala examples of using the library. See this README to get started with these examples.

Some other subprojects to check are cassovary-benchmarks for helping benchmark some graph algorithms and cassovary-server that exposes Cassovary on a web server.

Building

Cassovary is built using sbt and was tested last using sbt version 0.13.9

  1. ./sbt update (might take a couple of minutes)
  2. ./sbt test
  3. ./sbt package

Alternative for using for local projects

  1. ./sbt publishLocal
  2. cd ../<dependent project>
  3. ./sbt update

Using maven published version of library

Cassovary is published to maven central with scala version 2.11.8 starting Cassovary version 7.0.0. The latest published Cassovary version number that also works with scala 2.10 is version 6.4.0. Please see the latest version number (such as 7.1.0) released alongside the maven-central image at the top of this README.

To use with sbt, substitute the latest version number and use:

libraryDependencies += "com.twitter" %% "cassovary-core" % "7.1.0"

and

resolvers += "twitter" at "http://maven.twttr.com"

The last Cassovary version to support scala 2.9 is 3.4.0, and support for scala version 2.9.x has been discontinued since. The last Cassovary version to support scala 2.10 is 6.4.0, and support for scala version 2.10.x has been discontinued since. Also, Cassovary requires Java 7+ and the last Cassovary version to support Java 6 was 3.4.0.

The only dependency that Cassovary uses which is not bundled with it (because of its size) is it.unimi.dsi.fastutil. You can add that dependency in your sbt project as follows:

libraryDependencies += "it.unimi.dsi" % "fastutil" % "7.0.7"

Comparison to Other Graph Libraries

There are many excellent graph mining libraries already in existence. Most of them have one or more of the following characteristics:

  1. Written in C/C++. Examples include SNAP from Stanford and GraphLab from CMU. The typical way to use these from JVM is to use JNI bridges.
  2. Sacrifice storage efficiency for flexibility. Examples include JUNG which is written in Java but stores nodes and edges as big objects.
  3. Are meant to do much more, typically a full graph database. Examples include Neo4J.

On the other hand, Cassovary is intended to be easy to use in a JVM-hosted environment and yet be efficient enough to scale to billions of edges. It is deliberately not designed to provide any persistence or database functionality. Also, it currently skips any concerns of partitioning the graph and hence is not directly comparable to distributed graph processing systems like Apache Giraph. This allows complex algorithms to be run on the graph efficiently, an otherwise recurring issue with distributed graph processing systems because of the known difficulty of achieving good graph partitions. On the flip side, the size of the graph it works with is bounded by the memory available in a machine, though the use of space efficient data structures does not seem to make this a limitation for most practical graphs. For example, a SharedArrayBasedDirectedGraph instance of a unidirectional graph with 10M nodes and 1B edges consumes less than 6GB of memory, and scales linearly beyond that. Some other data points for memory usage can be checked out using the script bash cassovary-examples/src/main/bash/load-graph-examples.sh. As the script shows, a randomly generated unidirectional directed graph with 0.5M nodes and 10M edges can be built with 60MB of memory, and one with 5M nodes and 100M edges can be built with 500MB of memory. Loading both directions of those graphs takes respectively 120MB and 1.1GB of memory.

Mailing list

http://groups.google.com/group/twitter-cassovary

Please follow the cassovary project on twitter at @cassovary for updates.

Bugs

Please report any bugs to: https://github.com/twitter/cassovary/issues

Acknowledgments

Thanks to all the contributors of Cassovary.

We use the Yourkit Java Profiler for profiling and tuning Cassovary. Yourkit logo

License

Copyright 2016 Twitter, Inc.

Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0

More Resources
to explore the angular.

mail [email protected] to add your project or resources here 🔥.

Related Articles
to learn about angular.

FAQ's
to learn more about Angular JS.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory