Sitecore 9 has delivered on a major request of its' customers - it's expanded xDB to support multiple of databases including:
- SQL Server 2016 (Sitecore 9)
- SQL Azure (Sitecore 9)
- Azure CosmosDB (Coming soon)
- MongoDB (Coming Soon)
This shift finally provides more options both in terms technology (SQL vs NoSQL) and hosting (Cloud vs On-Prem) to align with it's customers needs. In fact when it was formally announced at the Symposium 2017, it was even met with mild applause by the docile crowd!
Sitecore introduced MongoDB and xDB in version Sitecore 7.5. In 7.2 (and previous) the analytics gathered by Sitecore were stored in a standard SQL Server database. But it had a few key deficiencies at the time:
- Only scaled vertically
- Led to in efficient scaling
- Data too complex to structure effectively
Remember, Sitecore's architecture for data storage did not have a major overhaul to my memory before this. It was due for a change to align with the future. And that change was a NoSQL database in the form of MongoDB.
It's benefits were:
- Scaled vertically, for speed
- Scaled horizontally, for size
- Schemaless document database allowed flexibility
Too Wild & Free. The Tale of MongoDB
MongoDB was a brand new technology to most (virtually all?) organizations. Organizations who run Sitecore are very likely to embrace Microsoft commercial technologies. Where as MongoDB is a great technology but it's open source (not commercial). This generally led to an incongruity where organizations were able to easily support everything in Sitecore except MongoDB.
This created an upswing in managed MongoDB offerings like MongoDB Altas and spawned Sitecore's own xDB Cloud offering as well. I'd say the introduction of these services was signaling a new problem, which Sitecore recognized.
The New xDB Databases
As I was saying, Sitecore listened and here are the xDB databases supported by Sitecore 9:
SQL Server 2016 https://www.microsoft.com/en-us/sql-server/sql-server-2016
This will be the preeminent choice for most on-premise instance. Powerful, reliable, traditional relational database solutions.
For the purposes of Sitecore, this is an enhanced version of SQL Server 2016 running in the Azure cloud. Why do I say it's enhanced? Because the Azure platform offers capabilities like "Elastic Pool" which allows for database scaling on-demand. For single instances, it also as much quicker time-to-market when spinning up new environments.
Azure Cosmos DB (Not available in initial release) https://azure.microsoft.com/en-us/services/cosmos-db/
Cosmos DB is a scalable, globally distributed NoSQL database based on Microsoft's DocumentDB platform. Microsoft describes it as having a "limitless elastic scale." Perhaps. But it's unique strength is it's schemaless structure built-in horizontal scaling. It's basically a commercial version of MongoDB. Which is a great fit if your organization will be hosted on Azure.
MongoDB (Not available in initial release) https://www.mongodb.com/
It will be supported in later releases of Sitecore 9, but I have a feeling MongoDB is not long for the Sitecore world. If organizations have the chance, I would recommend migrating away from the MongoDB. Sitecore not supporting it in the initial release of Sitecore 9 sends pretty strong signals.
Greater Interoperability Between Database
In Sitecore xDB is accessed through the xConnect API. This provides a new layer of decoupling when accessing xDB data. Where as before MongoDB was directly queried, we're now querying a service layer as an abstraction. In theory, we could be able to run the same Sitecore 9 instance against SQL Server 2016 or Cosmos DB. In some ways, this is similar to Content Search API introduced by Sitecore in version 7.x.
These xDB changes are very significant to the platform and a very positive step forward. More to come. Thanks for reading.