Multiple Client ability

Hi

i wondered how mulpitble client ability would look like in event store.

Would i prefix the channels ? Is there a possibility of getting islations inside eventstore ? Would i need multiple eventstore servers ?

In common CRUD / SQLServer / Mongo I would create a database for each customer, currently i can’t figure out which solution could best fit in EventStore.

Any advice welcome :slight_smile:

There has been some talk about providing file level isolation for
people who need it (e.g. running one instance that goes to many
files). This is on the wall however and not implemented.

What level of isolation would you need per client? It can range
anywhere from just prefixing the stream name e.g. tenant-foo-bar to
total isolation.

Cheers,

Greg

Thx for your reply.

At first i want to offer a service for many client, but when a new cleint registers i don’t want to manually setup new processes of any databases server, eventstores …

Its not sure what kind of isolation we need. The idea is to decrease the risk of mixing up customer data. for example In SQL if i have different database no component could mix up customer data in a query (assuming that the sql conneciton is given to the component). Thats primarly my motiviation in this topic.

From a legal view this topic is also not very clear. The main thing is it should be possible to define different access rights for each customer.

At best we should be able to give each customer administrator an login with which he could login but only see the data of his company. The law says something like data should be processed independently and access rights should be defined independently

Yes and there are many ways of achieving this. As an example hibernate
supports tenants through a "tenantid". What the best mechanism is
totally depends on things like # of customers and isolation levels. As
an example with 5000 tenants having small amounts of data I would
generally prefer to use a tenantid and permissions with say sql server
unless there was some reason I needed more isolation than this would
provide.

I am running into similar situation where I have multi-tenant Saas, I am using MongoDB database per tenant, using eventstore though I am using tenant-id part of stream name.

My main reason for isolation is being able to wipe out old inactive tenants. In mongodb simple I can delete the database. Using EventStore what is the best way to delete all tenant’s streams ?

This is one of the use cases we were looking at. You could do it now
somewhat easily but it would be nice to have a better story around it.
In particular this is one thing we were looking at using with lucene
indexing

Make sense, thanks.

Any updates regarding ability to have isolation to easily delete obsolete tenants ?

What is the latest status on this?

I’m also working on a multi tenant SaaS app where we are using a separate MongoDB per tenant. We are looking into introducing Eventstore and need the same kind of isolation per tenant. We run a shared app for all tenants, but the app connects to different databases tenant databases. Due to legal requirements we might need to keep the data in different data centers so some tenants connect to a database in one region while others connect to a database in a different region. If I choose to separate tenant data by i.e. prefixing streams with the tenant id. Would it be possible to move one tenant’s stream from one server to another if they i.e. need to change from one data center region to another?

Another use case might be if I have different Eventstore servers for different price models. Basic customers might be on a less performant server, but if they choose to pay for a premium account, the must be moved to a different server. Is this a do-able scenario?

/Henning