Loading...
GreyCat

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 Install

Our 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.

Image

The history of GreyCat

From a theoretical idea into a fully fledged programming language managing & simulating an entire Countries energy grid

Learn more

Want to learn more about GreyCat ?

Our Blog Posts
Top