ACID Database for Securely Storing Bulk Data
A single RavenDB server powering 150 organizations – how Sentinel uses RavenDB’s ACIDity and features like backup-restore to securely store bulk data. While RavenDB is known for its advanced clustering capabilities, Sentinel’s experience shows that even a single RavenDB server is reliable enough to serve over a hundred organizations for years.
Epsilon is a company from Quebec that was founded in 2021 to maintain and improve the existing products of SAI Actuarial Services. One of these products, Sentinel, uses RavenDB in the back end to store and manage the data of over a hundred organizations. All this relies on the efficient operation of a single reliable database instance, the fact that RavenDB is ACID by default, its NoSQL flexibility, features like backup & restore, etc.
Sentinel is a management tool that helps labor unions handle all of their administration. Things like keeping records, generating reports, and communicating with union members. It currently serves about 150 unions which range in size from a few dozen to tens of thousands of members – mostly in Quebec and around Canada.
Sentinel’s structure is modular. In addition to the out-of-the-box modules for Member Records, Grievances, Health and Safety, and Tasks, Sentinel lets you choose a number of the following modules according to your license:
- Union Leaves
- Collective Agreements
- Documentation Centre
- Committee Meetings
- Ethics and Discipline
Sentinel began using RavenDB around 2015, with version 3.0. Since then, a single RavenDB instance hosted on an Azure virtual machine has maintained 100-150 databases, one for each organization that uses Sentinel. The databases range in size from at least 100 MB to about 15 GB. The business is growing rapidly – a few new unions join every month and many more are on the horizon.
Besides that server, Epsilon also uses a testing server. In the future they are considering making use of RavenDB’s clustering capabilities by adding failover servers. But so far there doesn’t seem to be a need, since the existing server has always been reliable. This way, Epsilon saves the cost of adding more Azure machines. This is a common experience for some RavenDB users.
Sentinel uses RavenDB’s C# API. RavenDB is used in conjunction with most of the tools Azure has to offer, as well as the other common Microsoft technologies. For example, Epsilon uses an Azure application server as well as serverless functions which each communicate with the RavenDB instance. They also use the Azure DevOps environment, webjob, several Azure queues, etc.
Epsilon co-founder and VP Jonatan Bouillon began learning RavenDB two years ago in order to support Sentinel. He reports that it was very easy to learn coming from a .NET programming background. As a document database, it worked well with object oriented programming because there’s no object-relational impedance mismatch.
For example, organization members are each represented by a document. The structure of each document can be completely different. If new information needs to be added – like a second email address, a special note, images or other files – there is no ‘member schema’ that needs to be modified.
Originally the most difficult part for the developers was learning the RavenDB version 3 GUI. The new GUI introduced in 4.0 was much more intuitive. Among other things, it made it easier to do patching and querying.
One of Sentinel’s important features is Data Import, which is used to upload large amounts of data in bulk. This requires ACID guarantees – so it was convenient that RavenDB has been ACID by default since version 1.0. If they choose to scale horizontally, RavenDB’s optional distributed ACID capabilities could continue to support this feature.
Sentinel allows users to simulate data import on a disposable database before committing their data, to test their procedure and make sure nothing goes wrong. This makes good use of RavenDB’s backup and restore, allowing Sentinel to efficiently run experiments and immediately revert them. Bouillon mentions that in the future, he thinks a better approach to this same feature would make use of RavenDB’s bulk insert feature.
In the future Epsilon are looking forward to using RavenDB’s subscription feature. Subscriptions automate communication between client and server and also reduce a lot of network traffic. The server streams information to the subscribed client as a “high availability” push service. The data comes in batches, and the client just needs to send back an acknowledgment to receive the next batch. This will help Epsilon reduce server load and cloud costs. It could also speed up communication.
Other features they expressed interest in are RavenDB’s out of the box full text search capabilities, as well as the Replication and ETL features.
They plan to add more modules and features, including some requested by their customers. Over the next 1-3 years, they expect to double their customer base, and hopefully expand to Europe and the USA.
Epsilon plan to attend RavenDB webinars, and will continue to communicate with our team about issues they have had and suggested improvements. These have mainly been about how querying works in the GUI, and expanding the documentation for our query language RQL. We at RavenDB are grateful for every opportunity to improve our product, and are looking forward to supporting Epsilon in the future.