Datenbank vs. Flatfiles

77

Das Unternehmen, für das ich arbeite, versucht, ein Produkt, das das Flatfile-Format verwendet, auf ein Datenbankformat umzustellen. Wir verarbeiten ziemlich große Datendateien (dh 25 GB / Datei) und sie werden sehr schnell aktualisiert. Wir müssen Abfragen ausführen, die zufällig und zusammenhängend auf die Daten zugreifen. Ich versuche, sie von den Vorteilen der Verwendung einer Datenbank zu überzeugen, aber einige meiner Kollegen scheinen dies nur ungern zu tun. Also habe ich mich gefragt, ob ihr mir hier mit einigen Gründen oder Links zu Beiträgen helfen könnt, warum wir Datenbanken verwenden sollten, oder zumindest klären, warum Flatfiles besser sind (wenn sie es sind).

hyperboreean
quelle
13
Sie sollten erwähnen, um welche Art von Datenstruktur es sich hier handelt. Wenn jede dieser 25-GB-Dateien in 25 Zeilen mit jeweils 1 GB übersetzt wird, sind Sie mit Ihren Flat-Dateien wahrscheinlich besser dran.
Josh Davis
1
Ich bin eigentlich eher neugierig, warum Ihre Kollegen keine relationale Datenbank als Datenspeicher verwenden möchten. Geezus
Jeff
1
es hängt alles von allen möglichen Variablen ab. Es ist unmöglich zu sagen, dass einer besser ist als der andere.
DA.
3
@ JD: Arbeitsplatzsicherheit wahrscheinlich, nicht sicher warum
hyperboreean
@ Josh Davis: nur eine tabulatorgetrennte Struktur, die verschiedene Arten von Informationen enthält, die für unser Geschäft notwendig sind
hyperboreean

Antworten:

99
  1. Datenbanken können Abfrageaufgaben ausführen, sodass Sie Dateien nicht manuell durchlaufen müssen. Datenbanken können sehr komplizierte Abfragen verarbeiten.
  2. Datenbanken können Indizierungsaufgaben verarbeiten. Wenn also Aufgaben wie "Datensatz mit ID = x abrufen" sehr schnell ausgeführt werden können
  3. Datenbanken können Multiprozess- / Multithread-Zugriff verarbeiten.
  4. Datenbanken können den Zugriff vom Netzwerk aus verarbeiten
  5. Datenbanken können auf Datenintegrität achten
  6. Datenbanken können Daten leicht aktualisieren (siehe 1))
  7. Datenbanken sind zuverlässig
  8. Datenbanken können Transaktionen und gleichzeitigen Zugriff verarbeiten
  9. Mit Datenbanken + ORMs können Sie Daten auf sehr programmiererfreundliche Weise bearbeiten.
Andrey
quelle
41

Dies ist eine Antwort, die ich bereits vor einiger Zeit gegeben habe:

Dies hängt vollständig von den domänenspezifischen Anwendungsanforderungen ab. Häufig kann der direkte Zugriff auf Textdateien / Binärdateien extrem schnell und effizient sein und Ihnen alle Dateizugriffsfunktionen des Dateisystems Ihres Betriebssystems bieten.

Darüber hinaus verfügt Ihre Programmiersprache höchstwahrscheinlich bereits über ein integriertes Modul (oder ist einfach zu erstellen) für die spezifische Analyse.

Wenn Sie viele Anhänge (INSERTS?) Und sequentielle / wenige Zugriffsmöglichkeiten wenig / keine Parallelität benötigen, sind Dateien der richtige Weg.

Wenn Ihre Anforderungen an Parallelität, nicht sequentielles Lesen / Schreiben, Atomizität, atomare Berechtigungen, Ihre Daten von Natur aus relational sind, sind Sie mit einer relationalen oder OO-Datenbank besser dran.

Mit SQLite3 kann viel erreicht werden. Es ist extrem leicht (unter 300 KB), ACID-konform, in C / C ++ geschrieben und sehr allgegenwärtig (sofern es nicht bereits in Ihrer Programmiersprache enthalten ist - zum Beispiel Python-). es ist sicherlich einer verfügbar). Es kann sogar bei Datenbankdateien mit einer Größe von bis zu 140 Terabyte oder 128 Tebibyte ( Link zur Datenbankgröße ) nützlich sein , möglicherweise mehr.

Wenn Ihre Anforderungen größer wären, würde es nicht einmal eine Diskussion geben, entscheiden Sie sich für ein ausgewachsenes RDBMS.

Wie Sie in einem Kommentar sagen, dass "das System" nur eine Reihe von Skripten ist, sollten Sie sich pgbash ansehen .

Esteban Küber
quelle
9

Baue es nicht, wenn du es kaufen kannst.

Ich habe dieses Zitat kürzlich gehört und es scheint wirklich als Richtlinie zu passen. Fragen Sie sich Folgendes: Wie viel Zeit wurde für die Dateiverwaltung Ihrer App aufgewendet? Ich vermute, dass ziemlich viel Zeit damit verbracht wurde, diesen Code für die Leistung zu optimieren. Wenn Sie die ganze Zeit über eine relationale Datenbank verwendet hätten, hätten Sie erheblich weniger Zeit für die Bearbeitung dieses Teils Ihrer Anwendung aufgewendet. Sie hätten mehr Zeit für den wahren "geschäftlichen" Aspekt Ihrer App gehabt.

George Mastros
quelle
Eigentlich sind die gesamte Anwendung nur ein paar seltsame Bash-Skripte ... das gesamte System ist eine Ein-Mann-Show, bei der Dateien verschoben werden. Traurig, ich weiß ...
hyperboreean
2
Cool, aber zuletzt habe ich überprüft, ob die besten Datenbanken kostenlos sind.
Turm
5
Leider ist das Gegenteil genauso wahr. Ein besseres Sprichwort lautet: "Kaufen Sie gute Lösungen, die auf Ihre Bedürfnisse zugeschnitten sind, falls vorhanden, oder bauen Sie sie auf"
DA.
6

Sie sind schneller; Wenn Sie nicht die gesamte Flatfile in den Speicher laden, ermöglicht eine Datenbank in fast allen Fällen einen schnelleren Zugriff.

Sie sind sicherer; Datenbanken sind einfacher sicher zu sichern; Sie verfügen über Mechanismen zur Überprüfung auf Dateibeschädigung, Flatfiles jedoch nicht. Sobald die Beschädigung Ihrer Flatfile auf Ihre Backups migriert ist, sind Sie fertig und wissen es möglicherweise noch nicht einmal.

Sie haben mehr Funktionen; Datenbanken können es vielen Benutzern ermöglichen, gleichzeitig zu lesen / schreiben.

Es ist viel weniger komplex, mit ihnen zu arbeiten, sobald sie eingerichtet sind.

Dean J.
quelle
3

Datenbanken den ganzen Weg.

Wenn Sie jedoch weiterhin Dateien speichern müssen, können Sie kein neues RDBMS (wie Oracle, SQLServer usw.) übernehmen, sondern sich mit XML befassen.

XML ist ein Strukturdateiformat, das Ihnen die Möglichkeit bietet, Dinge als Datei zu speichern, Ihnen jedoch die Möglichkeit gibt, die Datei und die darin enthaltenen Daten abzufragen. XML-Dateien sind einfacher zu lesen als flache Dateien und können mithilfe eines XSLT einfach transformiert werden, um die Lesbarkeit zu verbessern. XML ist auch eine großartige Möglichkeit, Daten zu transportieren, wenn Sie müssen.

Ich empfehle dringend eine Datenbank, aber wenn Sie diesen Weg nicht gehen können, ist XML eine gute Sekunde.

Scott Root
quelle
3
Aber Oracle und SQL Server kosten Geld. Warum für etwas bezahlen, wenn es besser kostenlos ist? MySQL den ganzen Weg.
Turm
3
Wenn sie über eine 25-GB-CSV-Datei verfügen, kann sich die Größe mit XML-Tags für Zeilen und Spalten leicht verdoppeln (wenn nicht sogar noch mehr). Beim Übergang von Flatfiles zu XML ist es nur eine Überlegung, ein deutliches Aufblähen zu sagen.
Binary Worrier
4
@ Scott Root: Ich persönlich mag XML nicht, weil ich es als eine schwere Methode zur Weitergabe von Daten betrachte.
Hyperboreean
2
Anstelle von Oracle oder SQL Server können Sie auch PostgreSQL verwenden. Sehr leistungsfähig und XML und CSV sind auch als Ausgabe möglich. Normales XML ist sehr langsam, viel zu viel Aufwand.
Frank Heikens
1
@Rook Interessante Beobachtung - dass MySQL besser ist als Oracle und SQL Server. Sie haben offensichtlich nie mit Software auf Unternehmensebene gearbeitet.
NullUserException
3

Was ist mit einer nicht relationalen (NoSQL) Datenbank wie Amazon SimpleDB, Tokio Cabinet usw.? Ich habe gehört, dass Google, Facebook und LinkedIn diese verwenden, um ihre riesigen Datensätze zu speichern.

Können Sie uns mitteilen, ob Ihre Daten strukturiert sind, ob Ihr Schema festgelegt ist, ob Sie eine einfache Replizierbarkeit benötigen, ob Zugriffszeiten wichtig sind usw.?

Sieger
quelle
Wir untersuchen auch das ... zuerst müssen wir sicherstellen, dass wir alle auf derselben Seite sind. Wenn Sie jedoch einige komplexe Berichte ausführen müssen, bin ich mir nicht sicher, wie nosql damit umgeht.
Hyperboreean
3

Welche Dateitypen nicht erwähnt werden. Wenn es sich um Mediendateien handelt, fahren Sie mit Flatfiles fort. Sie benötigen wahrscheinlich nur eine Datenbank für Tags und eine Möglichkeit, die "externen BLOBs" den Datensätzen in der Datenbank zuzuordnen. Wenn Sie jedoch eine Volltextsuche benötigen, können Sie nur auf eine vollständige Datenbank migrieren.

Eine andere Sache ist, dass Ihr Dateisystem möglicherweise die Obergrenze für die Anzahl der physischen Dateien festlegt.

bcosca
quelle
2

SQL Ad-hoc-Abfragefähigkeiten sind für mich Grund genug. Mit einem guten Schema und einer guten Indizierung der Tabellen ist dies schnell und effektiv und bietet eine gute Leistung.

Oded
quelle
2

Verwenden Sie eine Datenbank, es sei denn, Sie laden die Dateien bei jedem Start in den Speicher. So einfach ist das.

Dies setzt voraus, dass Ihre Colleges bereits über das Programm verfügen, um Anfragen an die Dateien zu bearbeiten. Wenn nicht, verwenden Sie eine Datenbank.

Lay González
quelle
2

Der Unterschied zwischen Datenbank- und Flatfiles ist unten angegeben:

  • Die Datenbank bietet mehr Flexibilität, während Flatfiles weniger Flexibilität bieten.

  • Das Datenbanksystem bietet Datenkonsistenz, während Flatfiles keine Datenkonsistenz bieten können.

  • Die Datenbank ist sicherer als Flatfiles.
  • Die Datenbank unterstützt DML und DDL, während Flatfiles diese nicht unterstützen können.

  • Weniger Datenredundanz in der Datenbank, während mehr Datenredundanz in Flatfiles.

Hautausschläge
quelle