OverflowDB

ShiftLeft's OverflowDB is an in-memory graph database, which implements a swapping mechanism to deal with large graphs.
Driver Configuration and Usage
OverflowDb is an in-memory storage backend option with an overflow to disk mechanism when memory starts filling up. This can be obtained as follows:
val driver = new OverflowDbDriver(
// To specifies if OverflowDb should write to disk when memory is constrained
storageLocation = Some(dbOutputFile),
// Percentage of the heap from when overflowing should begin to occur
heapPercentageThreshold = 80,
// If specified, OverflowDB will measure and report serialization/deserialization timing averages
serializationStatsEnabled = false,
// Max call depth when tracking data-flows on calls to nodesReachableBy
mallCallDepth = 2
)
This exported graph can then be loaded back into the driver by specifying the same path under storageLocation.
Benefits of using OverflowDB
Low memory footprint
OverflowDB enforces a strict schema and uses implicit/virtual edges to help lower the memory
footprint. When memory does become limited, OverflowDB will start serializing instances to disk and
out of the heap to avoid OutOfMemoryError.
By making use of a strict schema using domain classes, memory isn't wasted on many Map instances
as is the case with TinkerGraph.
High performance
Due to the whole graph being in-memory the performance is fast (until swapping to disk occurs).
Production
There are many use cases where a dedicated storage backend is not necessary. Here are a few applications:
- For analysis on smaller programs or parts of programs where its feasible to store snapshots of
graphs in something compact such as the
binformat. - To be part of a DevSecOps lifecycle where the process is run on low resource containers and the graph itself may be disposable but the results can be stored elsewhere.
- High performance is required, but no expertise/resources available for dedicated backends.