What is our primary use case?
We use Azure Cosmos DB as our data storage or database technology platform, and we use it as the backing storage of our metering and billing back office system.
We have an energy metering and billing solution, a SaaS billing solution, which is responsible for the whole back office for district heating and cooling suppliers. Our platform is responsible for the ingestion of time series data, and at the end of the processes, we generate invoices, which are sent out to customers. On top of that, we provide a consumer portal where consumers can view their energy usage and consult their bills.
They are two separate products, and both are using Azure Cosmos DB. The B2C or the consumer portal is using Azure Cosmos DB serverless because of its very spiky nature. It is very unpredictable how many users will be using the B2C portal, and the back office application is using Azure Cosmos DB with provisioned throughput with auto-scale configured, which makes it very scalable and still cost-effective.
How has it helped my organization?
The uptime is very good. Over the six years that we have been working with Azure Cosmos DB, it has not let us down even once. We never had any downtime with the service. There is a very high SLA. We do not use the multi-region scale and multi-region deploys, but what we do use is the availability zone setup on Azure Cosmos DB, so we have West Europe and North Europe paired, which makes it very cost-effective to have a failover to a different data center in the same availability zone on Azure. That is the most important part.
Its performance is outstanding. It is very fast. Its evolution and the approachability of the product team have also been good. I have been working with their product team for a while. They have sent over a lot of questions and we have had a lot of interviews, calls, conversations, and discussions on how to best approach certain architectural decisions. We can also discuss and understand how to adapt new features to our infrastructure or architecture to use those features to the fullest. I appreciate it. They are very reachable.
With regards to optimization, it might sometimes be a black box. It is not like SQL where you have indexes, for example, and you have a query plan with indexes, so you can set up and tune to improve your query performance. In Azure Cosmos DB, by default, everything is indexed, which can be good, but it can also be bad because it can impact performance. It is difficult to understand which indexes you really need. You have the basic indexes, all fields being indexed, but then you have composite indexes, which are not created automatically. You need to create them manually. It is difficult to get insight into what type of composite indexes you need, so there is some work there. On the other hand, you can easily follow the resource usage. You can monitor whether your databases are nearing their full resource availability. You either need to scale up or adapt auto-scaling. That is useful with regard to usage. If you are used to NoSQL, you should be able to get up to speed with that pretty fast. We use Azure Cosmos DB for NoSQL. That is a specific provider. We do not use MongoDB, Cassandra, and so on. That means that the syntax to query is SQL. You use a sort of SQL syntax, so the step is really small to go from a different NoSQL provider to Azure Cosmos DB. Of course, if you go from a relational database to a NoSQL database, that is a different story.
We could see its benefits immediately after we deployed it. Immediately after we started, it became very clear that it is very accessible and very user-friendly. It is a managed service. It is not like you set up a SQL and you need to do everything yourself. It is a managed service, and you have global distribution automatically. You set a checkbox, and you have a globally distributed database with high availability and continuous backups set up. It takes away a lot of the pains that you encounter as a startup company that needs to interact with enterprise customers. Our target audience is enterprise B2D customers who have specific requirements around data residency, backup and restore, high availability, and so on. Azure Cosmos DB makes it very easy to comply with those requests.
What is most valuable?
The flexibility and scalability are valuable. You have multiple models. You have serverless, and then you have provisioned throughput, auto-scale throughputs, and so on on top of reserved capacity possibilities where you prepay for capacity. I like that. It gives us a lot of flexibility. The scaling is instantaneous as well. You immediately have all the resources available. The fact it is NoSQL makes it powerful.
What needs improvement?
Resource governance across tenants is something that requires some work. There is some room for improvement there. We are a multitenant solution. We decided to follow a certain approach in our architecture, which had an impact on the Azure Cosmos DB. There are multiple approaches to implementing multitenant architecture on Azure Cosmos DB, but there is still no single or best-recommended approach when you have a big variance in the size of your tenants. That is something that still needs to be worked on.
The monitoring aspect can also be better. There should be better monitoring of the costs versus the performance. That is sometimes difficult. It is easy to see or track performance monitoring and separately track your bill, but it is difficult to view the overall picture in terms of the relationship between the cost and the performance. That is something they still have to work on.
For how long have I used the solution?
We have been using Azure Cosmos DB since August 2018. It has been a bit more than six years.
What do I think about the stability of the solution?
I would rate it a ten out of ten for stability. We did not encounter any downtime. We never encountered any drops in latency. It is a very stable product.
What do I think about the scalability of the solution?
It depends on how deep your pockets are, but it is very flexible. If you have a good architectural setup, you can easily scale with it. Scaling is almost instantaneous. It is pretty flexible.
How are customer service and support?
I have interacted with their support. If I have issues, I log a support request with Azure, and then it goes via Azure. If I have architectural questions and so on, I already have a lot of contacts within the Azure Cosmos DB product team. I can contact them to get a better understanding. They are very reachable. Most of the time, I get an answer within a few days. I would rate their support an eight out of ten.
How would you rate customer service and support?
How was the initial setup?
It is a cloud deployment. Its initial deployment is easy. You set up the Azure Cosmos DB instance. It takes a few minutes. One person can definitely set it up.
The time taken by a team to be onboarded with Azure Cosmos DB varies. It depends a bit on whether the user has any experience with NoSQL or not. If he has experience with NoSQL, it would take a few days or months to get up to speed and understand how to use the platform in a day-to-day fashion. There are also advanced features and concepts. For example, if you are using SQL Server, not everybody understands to the fullest how a cluster index works behind the screens, but they do know how to use a query or how to write a query, so there is a difference. Writing a query and so on takes a few days, and that is it. Understanding the concepts of partitioning, such as logical partitions, physical partitions, scaling on those partitions, the quota requirements, high availability and so on might take a few weeks, which still is not that much.
Once you are used to the concepts of throughputs, scaling, or request units, it is easy. In terms of the learning curve as a whole, it is not the easiest, but it is right above it.
Its maintenance is all being taken care of by the Azure Cosmos DB team.
What was our ROI?
It is hard to say if Azure Cosmos DB helped decrease our organization’s total cost of ownership because we started with a greenfield application. We built something from scratch and immediately started using Azure Cosmos DB. However, there have been two features that have created an impact on TCO. These two features that were released helped to not increase our TCO in one-to-one correlation with the number of customers we have. We have the auto-scale functionality, which is two or three years old now. It made a big difference in the cost. The second one is the dynamic per partition and per region auto-scale functionality. We enrolled in it during a private preview, but it went GA just recently. That decreased the bill as well.
What's my experience with pricing, setup cost, and licensing?
It is expensive. The moment you have high availability options and they are mixed with the type of multitenant architecture you use, the pricing is on the higher end.
Which other solutions did I evaluate?
We had a look at MongoDB but decided not to use it because the managed service of MongoDB was not so powerful compared to Azure Cosmos DB. You still have a DIY approach with MongoDB and you set up everything yourself, but as a startup, your resources are limited, so you do not want to spend time on setting up the infrastructure.
We also had a look at Postgres. I have a few options in Postgres to do NoSQL, but the actual NoSQL power of Azure Cosmos DB really makes a big difference. We could not find a better solution for that.
What other advice do I have?
We do not use the built-in vector database capability. At the moment, we do not use anything for that. We do use all change feeds, all versions, and deletes to link with Microsoft Fabric to populate the data warehouse. We do not use mirroring yet because mirroring has a few limitations. That blocks us from using it.
Azure Cosmos DB has not helped us to improve the search result quality in our company. That is not something of importance in our application. It is an ERP application.
Overall, I would rate Azure Cosmos DB a nine out of ten.
Disclosure: PeerSpot contacted the reviewer to collect the review and to validate authenticity. The reviewer was referred by the vendor, but the review is not subject to editing or approval by the vendor.