108 NoSQL Datenbank Engines – so viele listet das Portal bigdata-madesimple.com mit ihren Funktionen auf. Die 30 wichtigsten SQL-Datenbanken werden von softwaretestinghelp.com aufgelistet. Wikipedia beschränkt sich nicht so sehr und bietet eine Liste von 60 SQL-Engines. Das Portal db-engines.com vergleicht jeden Monat 331 Engines.

Die SQL-Datenbanken sind seit mehreren Jahrzehnten populär. 1974 begann IBM mit der Entwicklung von System R, einem Forschungsprojekt zur Entwicklung eines Prototyp-RDBMS. Das erste im Handel erhältliche RDBMS war jedoch Oracle, das 1979 von Relational Software, jetzt Oracle Corporation, veröffentlicht wurde.

Die Idee der nicht relationalen Datenbanken ist ebenfalls nicht neu und die Verwendung nicht relationaler Repositories begann bereits in den Zeiten der ersten Computer. Nicht relationale Datenbanken blühten in den 1960er Jahren, in Zeiten von Mainframe-Computern, und später, als die relationalen DBMS-Datenbanken herrschten, fanden sie Anwendung in spezialisierten Repositories, beispielsweise in hierarchischen Verzeichnisdiensten. Das Aufkommen einer neuen Generation nicht relationaler DBMS resultierte aus der Notwendigkeit, parallel verteilte Systeme für hoch skalierbare Webanwendungen, wie z. B. Suchmaschinen, zu erstellen.

NoSQL gewann zu Beginn des 21. Jahrhunderts an Popularität, als neue Bedürfnisse von Web 2.0-Unternehmen auftauchten, wie Facebook, Google und Amazon.com, Netflix, Yahoo, eBay, Hulu, IBM und viele mehr.

Der Begriff NoSQL wurde erstmals von Carlo Strozzi im Jahr 1998 als Name für die leichte relationale Open-Source-Datenbank Strozzi NoSQL verwendet.

Wir unterscheiden verschiedene Haupttypen von NoSQL, beispielsweise basierend auf dem Datenmodell:

  1. Datenbanken Schlüssel-Wert (Eng. Key-value) – es sind die am wenigsten komplizierten NoSQL-Implementierungen. Dies sind Tabellen, die zwei Textspalten enthalten. Die erste Spalte ist der Schlüssel und die zweite ist der Wert. Beispiele für solche Datenbanken sind: BerkeleyDB, LevelDB, Memcached, Project Voldemort, Redis, Riak.
  2. spaltenorientierte Datenbanken (Eng. column oriented stores) – in diesem Modell werden die Daten in Spalten gespeichert, anstatt in Zeilen. Diese Lösung wird zum Speichern großer Datenmengen verwendet. Die Beispieldatenbanken sind MongoDB und CouchDB, Orient DB und Datenbank im IBM Domino System.
  3. Datenbanken basierend auf Diagrammen (Eng. graph stores) – die beliebteste Datenbank dieses Typs ist Neo4j. Diese Datenbanken basieren auf der Graphentheorie. Beispiele für solche Datenbanken sind Versant, Objectivity, db4O, EyeDB sowie SBQL.
  4. andere Datenbanken – normalerweise eine Mischung aus mehreren der oben genannten. Dieser Ansatz wird beispielsweise in der OrientDB-Datenbank verwendet.

Viele dieser Engines werden von leistungsstarken Organisationen entwickelt, an denen Ingenieure und hochklassige Spezialisten arbeiten. Es werden Werkzeuge zur deren Verwaltung entwickelt, die Mechanismen werden optimiert.

Viele dieser Engines bringen große Gemeinschaften zusammen, die sich bei Problemen gegenseitig unterstützen, Menschen, die sich gegenseitig bei optimalen Lösungen beraten. Sie wurden in Tausenden von Projekten getestet.

Bei dieser Menge von Optionen findet jeder etwas für sich. Wenn Sie hören, dass jemand beschließt, eine eigene Datenbank-Engine zu erstellen, fragen Sie sich sicher:

  • ist die Erstellung einer Datenbank-Engine unser Kerngeschäft?
  • erfüllt keine der hunderten etablierten Lösungen auf dem Markt unsere Erwartungen nicht?
  • können wir mit den enormen Ressourcen konkurrieren, die in die Entwicklung bestehender Datenbanken investiert werden?
  • können wir eine ähnliche Anzahl von Tools bereitstellen, sowie Unterstützung in problematischen Situationen wie die anderen, fertigen Lösungen?
  • können wir es uns leisten, eine so große persönliche Entwicklungsressource zu verlieren?
  • können wir bewusst die Tatsache ignorieren, dass Gemeinschaften andere Projekte aktiv unterstützen? Menschen, die praktisch alle möglichen Probleme erfahren und Dutzende von Lösungen für sie gefunden haben?

Natürlich wird jeder sagen, dass, wenn sich niemand für die Erstellung einer eigenen Datenbank entscheiden würde, würden diese Lösungen niemals entstehen. Aber ich muss etwas klarstellen – bei den meisten Fällen ist dies das Kerngeschäft für Unternehmen, die ernsthafte Daten-basierte Engines schaffen. Google hat BigQuery entwickelt – aber abgesehen von der internen Verwendung in vielen Projekten ist es ein Element seines Angebots im Rahmen von Google Cloud – und daher ein kommerzielles Produkt. Unternehmen, die sich mit Erfolg für solche Lösungen neben ihrem Kerngeschäft entscheiden,  sind Giganten wie Facebook, die enorme finanzielle Ressourcen und ganze Teams für diese Projekte zur Verfügung stellen – Unternehmen, die praktisch für solche Aktionen einen unbeschränkten finanziellen und technologischen Hintergrund haben.

Ich persönlich kenne Fälle wie „das Erstellen einer eigenen Datenbank“ für das Produkt, da hier das Zitat „Keine ist perfekt genug, um die Erwartungen des Programmautors zu erfüllen“, der das Produkt entwickelt – da erinnere ich mich heute an den Geschmack von Guinness in Slattery’s, wo wir die Entfernung der letzten Codezeile feierten, verflochten zusammen mit dem Produkt (na ja, wie könnte es sonst ausgehen?) – und glauben Sie mir, wir haben dort nur besondere Ereignisse gefeiert, denn es gab 10 andere Kneipen, die viel näher waren.

Ist das Schreiben einer eigenen Datenbank sinnvoll? Ja. Erstens: wenn die eigene Datenbank das Produkt ist, das Sie verkaufen möchten, und aus dem Sie Ihr Unternehmen machen wollen – und nur dann, wenn Sie sicher sind, dass Sie eine bestimmte Lücke auf dem bereits überfüllten Markt schließen und davon überzeugt sind, dass Sie seinen richtigen Teil dafür interessieren. Zweitens: Sie können es sich leisten, große Geldsummen in ein riesiges Risikoprodukt zu investieren, das kaum eine Chance hat, Ihre Probleme zu lösen – und am Ende geben Sie es wahrscheinlich auf, so wie Facebook Cassandra aufgegeben hat, wo sie ursprünglich aufgebaut wurde (jetzt wird HBase verwendet).