Cello brings us a powerful feature called Data-Connection Abstraction, a technique to manage multiple connections made to the database for different customers, modules or features in a multi tenant environment. One of the biggest concerns of the customers about any cloud based solutions is Security of the data which is stored somewhere in the remote location, sometime it’s known or unknown to the actual customer. But it is the responsibility of the application provider to take care of the safety and security of the customer’s data. The decision of where and how to store the data depends on various parameters such as pricing, nature of the data, region specific policies etc. Below are the common data isolation pattern followed to isolate data from one customer to another, they are
- Separate Database
- Separate Schema
- Shared Database and shared schema [Least Isolation]
But it is not limited only to this, while building a large application, there might be possibilities to store all the customers’ data pertaining to a particular module or a feature in a separate database. To provide such possibilities the product has to have to ability to abstract out the underlying complexity of connecting to various data stores based on the context of the logged in account.
Dynamic connection String Management
It’s a mechanism to extract out the data store connection string management. For Example, during the development time, the developer can just develop the application as if like a single Tenant Application developed for a single customer, but at the time of deployment or while on-boarding the customers, the application provider or the customer can decide where to store their data. Cello uses XML configurations and database Metadata to achieve dynamic connection string management. During the run time CelloSaaS framework automatically fetches the configured connection string from the metadata and connects to the appropriate database.