Sind dokumentenorientierte Datenbanken entwickelt worden, um die nächste Generation von Datenbanken zu sein und relationale Datenbanken im Grunde vollständig zu ersetzen?
Nein. Dokumentorientierte Datenbanken (wie MongoDB) eignen sich sehr gut für die Art von Aufgaben, die wir normalerweise auf modernen Websites sehen (schnelle Suche nach einzelnen Elementen oder kleinen Gruppen von Elementen).
Aber sie machen einige große Kompromisse mit relationalen Systemen. Ohne Dinge wie ACID-Compliance werden sie bestimmte RDBMS nicht ersetzen können. Und wenn Sie sich Systeme wie MongoDB ansehen, ist die mangelnde ACID-Konformität ein wichtiger Grund dafür, dass es so schnell ist.
Ist es möglich, dass Projekte besser dran wären, sowohl eine dokumentenorientierte Datenbank als auch eine relationale Datenbank nebeneinander für verschiedene Daten zu verwenden, die für das eine oder andere besser geeignet sind?
Ja. Tatsächlich betreibe ich eine sehr große Produktions-Website, die beides verwendet. Das System wurde in MySQL gestartet, aber wir haben einen Teil davon zu MongoDB migriert, weil wir einen Key-Value-Speicher brauchen und MySQL einfach nicht sehr gut darin ist, ein Element in 150 Millionen Datensätzen zu finden.
Wenn dokumentenorientierte Datenbanken relationale Datenbanken nicht ersetzen sollen, hat dann jemand ein Beispiel für eine Datenbankstruktur, die in einer relationalen Datenbank absolut besser aufgehoben wäre (oder umgekehrt)?
Dokumentenorientierte Datenbanken eignen sich hervorragend zum Speichern von Daten, die leicht in "Schlüsselwert" und einfache, lineare "Eltern-Kind"-Beziehungen enthalten sind. Einfache Beispiele hierfür sind Dinge wie Blogs und Wikis.
Allerdings relationale Datenbanken haben immer noch einen starken Vorsprung bei Dingen wie Berichten, die dazu neigen, "Set-basiert" zu sein.
Ehrlich gesagt kann ich mir eine Welt vorstellen, in der die meisten Daten von einer dokumentenorientierten Datenbank "gehandhabt" werden, die Berichterstellung jedoch in einer relationalen Datenbank erfolgt, die von Map-Reduce-Jobs aktualisiert wird.