Hello, I hope I am not in the wrong place with this question. If so, I would like to apologize in advance. And by the way, you have a fantastic product. For this reason I would like to use it for a new project, but I am concerned about my solution architecture and the resulting costs.
The project will have about 10,000 users. In a document database this would represent 10,000 documents (aka streams in ESDB). In addition, each user has about 5000 subcollection documents --> 10,000 users * 5000 documents = 50,000,000 streams.
One stream per document:
my-app/
├─ User-Streams/
│ ├─ user-1
│ ├─ …
│ ├─ user-10000
├─ Document-Streams/
│ ├─ document-1
│ ├─ …
│ ├─ document-50000000
If I decided to have a single main document stream per user to reduce the number of total streams, I would have to iterate all the individual events when changes are made. Since documents are edited on a regular basis, I would prefer to have one stream aggregate per document.
Main stream for documents:
my-app/
├─ User-Streams/
│ ├─ user-1
│ ├─ …
│ ├─ user-10000
├─ Document-Streams/
│ ├─ documents-of-user-1
│ ├─ …
│ ├─ documents-of-user-10000
The projections would be stored in a document database which would result in 10.000 UserCollections with 5000 SubDocuments. So the read side would not be a problem.
I know that this is a very individual question, but I hope that someone can give me some suggestions.
For this project I have a private vhost cluster (3 nodes) with with 4 cores 16 GB Ram and 1TB SSD.
However, according to the official “Instance Sizing Guide”, my needs are equivalent to an M128 Production Instance to handle this amount of streams.
So i am asking me: Is my small project without much revenue thus the wrong use case for ESDB?
I know that this is a very individual question, but I hope that someone can give me some suggestions.