Bring your data to live!
GreyCat is a programmable temporal graph database, made for efficient and flexible data processing at scale
Database system
Efficient storing and retrieval of relational, temporal and geographic data as a graph.
Object-Oriented Programming
Break free from the query chains and enjoy the flexibility of object-oriented data processing.
Data Analytics Stack
Integrated tools and libraries to identify and visualize crucial insights of your data
Install GreyCat for free
Documentation InstallOur community version is completely for free and should suffice to start building your project without any resource limitation
use util;
type Sensor {
id: String;
values: nodeTime<Measurement>;
}
type Measurement {
temperature: float;
humidity: float;
}
// global variable, serve as graph entry-point
var sensor_index: nodeGeo<Sensor>;
fn fill() {
var rand = Random::new();
sensor_index ?= nodeGeo<Sensor>::new(); // init if null
for (var nb_sensors = 0; nb_sensors < 100; nb_sensors++) {
var sensor = Sensor {
id: "sensor_${nb_sensors}",
values: nodeTime<Measurement>::new()
};
var lat = rand.uniformf(-90.0, 90.0);
var lng = rand.uniformf(-180.0, 180.0);
sensor_index.set(geo::new(lat, lng), sensor);
for (var nb_val = 0.0; nb_val < 100_000; nb_val++) {
var measurement = Measurement {
temperature: rand.uniformf(-30.0, 30.0),
humidity: rand.uniformf(0.0, 100.0)
};
var t = time::new(nb_val as int, DurationUnit::microseconds);
sensor.values.setAt(t, measurement);
}
}
}
@expose
fn temperature_std(center: geo, radius: float, t: time): float {
var gaussian = Gaussian {};
var circle = GeoCircle::new(center, radius);
for (sensor_location, sensor in sensor_index) {
if (circle.contains(sensor_location)) {
gaussian.add(sensor.values.resolveAt(t)?.temperature);
}
}
return gaussian.std()!!;
}
A Programable Database
All the benefits of a graph database without needing to learn a new fringe syntax.
No Query
No need for complex queries, traverse a graph as you would a simple object with dot notation.
No Mapping
A single Data Model from Disk to Api.
Any Scale
Datasets do not impose the infrastructure anymore, Hardware defines the speed.
No Tabular
No complex join or filters, leverage Object-Oriented traversal of the graph.
What If, Many Worlds
Simulate and store branches of your current state in a simple manner.
Stateful programming
Reduce the cost and time of processing by keeping the state and resume from where you left on the next iteration.
Script or serve
Use GreyCat as a stateful scripting solution or serve webapps (backend & frontend) from one executable.
The history of GreyCat
From a theoretical idea into a fully fledged programming language managing & simulating an entire Countries energy grid
Learn more