Joola comes shipped with a simple in-memory (disk backed up) database for demo and development purposes.

Moving forward, you'll need to choose a Data Store provider, for now we support both MongoDB and ElasticSearch. Joola receives events from your applications and then transform the data and store it in one of the above stores. We try to keep manipulation to the minimum and make it usable for you outside of Joola's scope.

The event data

Events are described in JSON, it contain anything that is JSON supported, including nesting of course. However, please note that Joola does not support query filters over arrays.

Below you can see an example for such a JSON structure describing a game round event.

{
  "game": "The Matrix",
  "user": {
    "id": "194337",
    "username": "itay",
    "country": "Germany"
  },
  "device": {
    "type": "mobile",
    "make": "Apple"
  },
  "rounds": {
    "played": 10,
    "won": 7,
    "lost": 3,
    "duration_sec": 172
  }
}

Automatic type detection

When Joola receives the first event for a new collection, it will automatically do its best to detect the types of values passed. So from the above example, the game attribute will be recognized as string while duration_sec will be recognized as a number.

It's possible to override this detection, or to avoid it at all by pre-creating your collection.

Overriding type detection

To override automatic type detection you need to structure your JSON event slightly different. In the example below, we'll override rounds.played to string:

{
  "game": "The Matrix",
  "user": {
    "id": "194337",
    "username": "itay",
    "country": "Germany"
  },
  "device": {
    "type": "mobile",
    "make": "Apple"
  },
  "rounds": {
    "played": {
      "datatype": "string",
      "value": 10,
      }
    },
    "won": 7,
    "lost": 3,
    "duration_sec": 172
  }
}

What data to send?

When deciding what data should be pushed into Joola remember the following:

  • Joola is not a database, store only data which is relevant for analytics and visualization.
  • Joola uses a NoSQL approach, so while some JOIN abilities exist, try to keep all event related information in a single JSON document.
  • Logs and other text based data can be used, however try to think what Metrics you're after.
  • The more data you have in Joola the slower the system is going to get and you'll require more resources for your provider, which you choose.
  • The underlying data store is completely in your control and you can apply optimization methods directly on it.