139 Stimmen

Gute Gründe, keine relationale Datenbank zu verwenden?

Können Sie bitte auf alternative Datenspeicher-Tools hinweisen und gute Gründe dafür nennen, diese anstelle der guten alten relationalen Datenbanken zu verwenden? Meiner Meinung nach nutzen die meisten Anwendungen nur selten die volle Leistungsfähigkeit von SQL - es wäre interessant zu sehen, wie man eine Anwendung ohne SQL erstellen kann.

147voto

Matt Sheppard Punkte 113439

Klartextdateien in einem Dateisystem

  • Sehr einfach zu erstellen und zu bearbeiten
  • Einfache Bearbeitung durch die Benutzer mit einfachen Werkzeugen (z. B. Texteditoren, grep usw.)
  • Effiziente Speicherung von Binärdokumenten

XML- oder JSON-Dateien auf der Festplatte

  • Wie oben, aber mit etwas mehr Möglichkeiten zur Validierung der Struktur.

Tabellenkalkulation / CSV-Datei

  • Sehr einfach zu verstehendes Modell für Geschäftsanwender

Subversion (oder ein ähnliches plattenbasiertes Versionskontrollsystem)

  • Sehr gute Unterstützung für die Versionierung von Daten

Berkeley DB (Im Grunde eine plattenbasierte Hashtabelle)

  • konzeptionell sehr einfach (nur untypisierter Schlüssel/Wert)
  • Ziemlich schnell
  • Kein zusätzlicher Verwaltungsaufwand
  • Unterstützt Transaktionen, glaube ich

Amazons einfache DB

  • Ähnlich wie Berkeley DB, aber gehostet, glaube ich.

Googles App-Engine-Datenspeicher

  • Gehostet und hoch skalierbar
  • Speicherung von Schlüsselwerten pro Dokument (d. h. ein flexibles Datenmodell)

CouchDB

  • Fokus des Dokuments
  • Einfache Speicherung von halbstrukturierten / dokumentenbasierten Daten

Muttersprachliche Sammlungen (im Speicher oder in Serienform auf der Festplatte gespeichert)

  • Sehr enge sprachliche Integration

Benutzerdefiniertes (handgeschriebenes) Speichermodul

  • Potenziell sehr hohe Leistung in den erforderlichen Anwendungsfällen

Ich kann nicht behaupten, dass ich viel über sie weiß, aber vielleicht möchten Sie sich auch über Folgendes informieren Objektdatenbanksysteme .

10 Stimmen

Es wäre großartig, wenn Sie auch die Nachteile der einzelnen Optionen erläutern würden, denn wie soll man sich sonst entscheiden? Danke!

4 Stimmen

Auch das Schreiben von Millionen von Zeilen in eine DB kann einen Tag dauern, während das Anhängen von einer Million Protokollzeilen an eine Datei nur wenige Minuten dauert. Ich werde nie verstehen, warum Leute darauf bestehen, Protokolldaten in eine Datenbank zu schreiben.

34 Stimmen

Aaron: Ich habe einen Grund: SELECT messages FROM log WHERE (date BETWEEN 2009-01-01 AND 2009-03-01) AND type='error' AND system='Windows' :) Wie würden Sie das aus einer Textdatei laden?

25voto

Tristan Juricek Punkte 1794

Die Antwort von Matt Sheppard ist großartig (mod up), aber ich würde diese Faktoren berücksichtigen, wenn ich über eine Spindel nachdenke:

  1. Struktur: Wird sie offensichtlich in Teile zerlegt, oder müssen Sie Kompromisse eingehen?
  2. Verwendung: Wie werden die Daten analysiert/abgerufen/abgefragt?
  3. Lebensdauer: Wie lange sind die Daten nützlich?
  4. Größe: Wie viele Daten sind vorhanden?

Ein besonderer Vorteil von CSV-Dateien gegenüber RDBMS ist, dass sie sich leicht komprimieren und auf praktisch jeden anderen Rechner übertragen lassen. Wir führen große Datenübertragungen durch, und alles ist so einfach, dass wir nur eine große CSV-Datei verwenden, die mit Tools wie rsync leicht zu skripten ist. Um die Anzahl der Wiederholungen bei großen CSV-Dateien zu reduzieren, können Sie etwas wie folgt verwenden YAML . Ich bin mir nicht sicher, ob ich etwas wie JSON oder XML speichern würde, es sei denn, Sie hätten erhebliche Anforderungen an die Beziehungen.

Was die nicht erwähnten Alternativen betrifft, sollten Sie Folgendes nicht außer Acht lassen Hadoop die eine Open-Source-Implementierung von MapReduce ist. Dies sollte gut funktionieren, wenn Sie eine TONNE von lose strukturierten Daten haben, die analysiert werden müssen, und Sie wollen in einem Szenario sein, wo Sie einfach 10 weitere Maschinen hinzufügen können, um die Datenverarbeitung zu verarbeiten.

Ich habe zum Beispiel versucht, die Leistung zu analysieren, die im Wesentlichen aus den Zeitangaben verschiedener Funktionen bestand, die auf etwa 20 Rechnern protokolliert wurden. Nachdem ich versucht hatte, alles in ein RDBMS zu packen, wurde mir klar, dass ich die Daten nicht mehr abfragen muss, sobald ich sie aggregiert habe. Außerdem sind sie für mich nur in ihrem aggregierten Format nützlich. Also behalte ich die Protokolldateien komprimiert bei mir und lasse die aggregierten Daten in einer DB.

Hinweis Ich bin es eher gewohnt, in "großen" Größen zu denken.

5 Stimmen

Eine Gefahr bei CSV-Dateien ist, dass das Escaping richtig gemacht werden muss; es ist leicht, einen CSV-Leser oder -Schreiber zu implementieren, der die Spezifikation nicht wirklich befolgt, da sie so täuschend einfach aussieht und es ein paar Feinheiten gibt: de.wikipedia.org/wiki/Komma-getrennte_Werte#Spezifikation

10voto

Ubiguchi Punkte 3056

Das Dateisystem ist ziemlich praktisch für die Speicherung von Binärdaten, die in relationalen Datenbanken nie besonders gut funktionieren.

6voto

bzlm Punkte 9436

Wenn Sie nicht brauchen SÄURE brauchen Sie wahrscheinlich nicht den Overhead eines RDBMS. Stellen Sie also zuerst fest, ob Sie das brauchen. Die meisten der hier gegebenen Antworten zu Nicht-RDBMS no ACID bereitstellen.

1 Stimmen

Können Sie ein Beispiel nennen, warum/wann ACID nicht erforderlich ist?

1 Stimmen

@vibneiro, wenn die Datenbank nur einen einzigen Benutzer hat, der nur sequentielle Operationen durchführt, oder das Risiko von Datenbankinkonsistenzen im Falle eines Stromausfalls akzeptabel ist, oder das Konzept von Datenbanktransaktionen nicht zur Anwendung kommt, oder kein Bedarf an Constraints, Kaskaden, Triggern oder Ähnlichem besteht, dann ist eine nicht SÄURE Nicht-RDBMS-Anbieter (z. B. eine Textdatei mit einer RDBMS-ähnlichen API) kann ausreichen. So kann Ihre Anwendung beispielsweise eine Datenbank mit historischen Diagnosemeldungen führen, für die ACID völlig irrelevant ist, und "log.txt" ist ausreichend.

0 Stimmen

Es hat sich herausgestellt, dass ACID in sehr seltenen Fällen nicht benötigt wird. Ich frage mich, warum dann NoSQL-Datenbanken so beliebt sind? Die meisten von ihnen unterstützen keine vollständige ACIDität.

6voto

zaca Punkte 609

Versuchen Sie Prevayler: http://www.prevayler.org/wiki/ Prevayler ist eine Alternative zu RDBMS. Auf der Website finden Sie weitere Informationen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X