Wann sollte die Verwendung einer Datenbank dem Parsen von Daten aus einer Textdatei vorgezogen werden?

13

Ich habe ein Python-Programm erstellt, um das Wachstum von codereview.SE zu messen . Mein Ansatz war es, die auf der Titelseite angezeigten "Site-Statistiken" abzurufen und auf meiner Festplatte zu speichern. Ich habe vor, das jeden Tag einmal zu tun. Bisher habe ich genug gemacht, um die Statistiken zu erhalten und sie an eine Textdatei anzuhängen. Das Python-Skript kann auf Github angezeigt werden . Das von mir verwendete Format ist das folgende

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

Ich habe das Skript nur zweimal ausgeführt, um das Format zu ermitteln, das ich in der Datei verwenden würde. Anfangs schien mir das gut zu sein, weil ich es selbst speichern würde und das Format das gleiche wäre, so dass es leicht analysiert werden könnte, aber ich bin mir nicht sicher. Es scheint, dass die Verwendung einer Datenbank hier besser sein sollte, da auf diese Weise das Abrufen von Daten einfacher sein sollte. Nur ein Hinweis, ich habe noch nie eine Datenbank verwendet und habe keine Kenntnisse in SQL, MySQL oder anderen Varianten von RDBMS.

Das bringt mich zu der Frage. Wann sollte eine Datenbank zum Speichern der Daten gegenüber dem Speichern der Daten in einer Textdatei bevorzugt werden? Gibt es einige Hinweise, auf die ich achten kann, wenn ich Entscheidungen darüber treffe, ob ich eine Datenbank oder einfache Textdateien benötige?

PS: Wenn bessere Tags hinzugefügt werden können, tun Sie dies bitte. Ich hatte einige Zweifel an den Tags, die hinzugefügt werden könnten.

Aseem Bansal
quelle
"Jedes Werkzeug ist eine Verpflichtung, bis Sie lernen, wie man es benutzt."
JeffO
1
Eine Datenbank kann für Ihr Projekt geeignet sein oder auch nicht. Es kann jedoch hilfreich sein, ein einfacheres Format zu verwenden. Es gibt ein CSV-Modul, das standardmäßig in Python enthalten ist. Eine CSV-Datei würde den Export der Daten in andere Programme vereinfachen (z. B. in eine Kalkulationstabelle, damit Sie sie grafisch darstellen können).
Sean McSomething

Antworten:

13

Wann sollte eine Datenbank zum Speichern der Daten gegenüber dem Speichern der Daten in einer Textdatei bevorzugt werden?

Wikipedia sagt uns, dass eine Datenbank eine organisierte Sammlung von Daten ist . Durch diese Maßnahme, die Textdatei ist eine Datenbank. Es heißt weiter:

Die Daten sind in der Regel so organisiert, dass sie relevante Aspekte der Realität auf eine Weise modellieren, die Prozesse unterstützt, die diese Informationen erfordern. Beispiel: Modellierung der Verfügbarkeit von Zimmern in Hotels auf eine Weise, die die Suche nach einem Hotel mit offenen Stellen unterstützt.

Dieser Teil ist subjektiv - er sagt uns nicht genau, wie die Daten modelliert werden sollen oder welche Vorgänge optimiert werden müssen. Ihre Textdatei besteht aus einer Reihe unterschiedlicher Aufzeichnungen, eine für jeden Tag, sodass Sie einen Aspekt der Realität auf eine Weise modellieren, die für Ihr Problem relevant ist.

Wenn Sie "Datenbank" sagen, denken Sie wahrscheinlich an eine Art relationales Datenbankverwaltungssystem, aber wenn Sie Ihre Textdatei als Datenbank betrachten, ändert sich Ihre Frage von "Wann sollte ich eine Datenbank verwenden?" zu "Welche Art von Datenbank soll ich verwenden?" Wenn Sie die Dinge in diesem Licht sehen, ist die Antwort einfacher zu sehen: Verwenden Sie eine bessere Datenbank, wenn diejenige, die Sie haben, nicht mehr Ihren Anforderungen entspricht.

Wenn Ihr Python-Skript und Ihre einfache Textdatei gut genug funktionieren, müssen Sie keine Änderungen vornehmen. Mit nur einem neuen Datensatz pro Tag und Computern, die jedes Jahr schneller werden, vermute ich, dass Ihre aktuelle Lösung für eine lange Zeit rentabel sein könnte. Die Datenmenge eines Jahrzehnts würde nur 3650 Datensätze ergeben, die nach der Analyse wahrscheinlich weniger als 75 Kilobyte benötigen würden.

Stellen Sie sich vor, dass Sie statt einer kleinen Aufzeichnung pro Tag jede Frage aufzeichnen, die in CodeReview gestellt wurde und von wem und wann. Darüber hinaus sammeln Sie auch alle Antworten und die relevanten Metadaten. Sie könnten das alles in einer Textdatei speichern, aber eine flache Datei würde es schwierig machen, Informationen zu finden, wenn Sie sie benötigen. Es gibt zu viele Daten, um das Ganze in den Speicher zu schreiben. Wenn Sie also eine Frage oder Antwort finden möchten, müssen Sie die Datei durchsuchen, bis Sie gefunden haben, wonach Sie gesucht haben. Wenn Sie alle von einem bestimmten Benutzer gestellten Fragen finden möchten, müssen Sie die gesamte Datei durchsuchen. Wenn Sie alle Fragen mit "Bugs" als Tag suchen möchten, müssen Sie die Datei durchsuchen.

Das wäre furchtbar langsam, also könnten Sie beschließen, die Dinge zu beschleunigen, indem Sie einige Indizes erstellen, die Ihnen mitteilen, wo Sie in der Datei nach einem bestimmten Datensatz suchen müssen. Sie könnten einen Index für Fragen, einen anderen für Benutzer, einen dritten für Antworten usw. haben. Wenn Sie eine Frage finden möchten, durchsuchen Sie den (viel kleineren) Fragenindex, ermitteln die Position der Frage in der Hauptdatendatei und springen schnell an die richtige Stelle in der Datei. Das wäre eine große Leistungssteigerung. In der Tat ist das so ziemlich das, was ein Datenbankverwaltungssystem ist.

So verwendet einen DBMS , wenn es ist , was Sie brauchen. Verwenden Sie es, wenn Sie über viele Daten verfügen, wenn Sie schnell und möglicherweise auf eine Weise auf diese Daten zugreifen müssen, die Sie zu Beginn nicht vollständig vorhersagen können. Wenn Sie über verschiedene Arten von Daten verfügen - verschiedene Arten von Datensätzen -, die miteinander verbunden sind, verwenden Sie ein RDBMS, damit Sie die verschiedenen Datensätze entsprechend verknüpfen können .

Caleb
quelle
3
"Betrachten Sie Ihre Textdatei als eine Datenbank ändert" Sehr aufschlussreich. Auch der Teil über mich mit nur 3650 Einträgen war hilfreich. Es hat geholfen, eine echte Perspektive des Problems zu bekommen.
Aseem Bansal
1
Sehr unterschätzte Antwort, dies ist das zweite Mal, dass ich darauf zurückkomme.
Hashim
6

Datenbanken haben viele Vorteile, aber den Zugang zu erleichtern, gehört nicht dazu. Schneller, standardisierter, als eingebettete Befehlssubsprache interpretierbar, sicherer, ja - aber nicht einfacher. Unabhängig davon, wie viel syntaktischen Zucker Ihre Sprache und Ihre Standardbibliothek bereitstellen, müssen Sie zunächst eine Datenbank haben, eine Verbindung dazu herstellen und Daten aus Ihrem Programm in eine völlig andere Richtung leiten. Wechseln Sie niemals zu einer Datenbank, nur weil Sie der Meinung sind, dass dies eine "gute Praxis" ist, solange es keine Probleme mit Ihrer Arbeit gibt und die Einfachheit der Programmierung Ihre Priorität ist.

Ich nehme an, wann ich umsteigen soll, um der historischen Entwicklung zu folgen. Schließlich haben die Menschen Daten lange Zeit in Dateien gespeichert, bevor die relationale Datenbank erfunden wurde, und tatsächlich wurden zuvor eine ganze Reihe minderwertiger Datenbankmodelle (hierarchische Datenbank, Netzwerk-Datenbank ...) erfunden. Sie begannen mit dem Schreiben von Datenbanken und verwendeten sie, als klar wurde, dass dies einen erheblichen Verarbeitungsaufwand ersparen, die Zuverlässigkeit usw. insgesamt und auf lange Sicht erhöhen würde . Solange dies für Sie nicht der Fall ist und Sie nicht davon ausgehen, dass dies in naher Zukunft der Fall sein wird, wäre ein Wechsel übermäßig technisch.

Kilian Foth
quelle
Wird die Kohäsivität nicht entsprechend dem Gesamtdesign besser angeboten? zB speichere ich in meinem Fall 5 Werte, die jedem Datum entsprechen. Nach dem gegenwärtigen Stand sind die Daten nicht kohärent.
Aseem Bansal
Sie haben Recht, sicherzustellen, dass alle Datensätze einen konsistenten Satz von Feldern und Werten haben, ist ein weiterer Vorteil. (Genau genommen sind es nur relationale Datenbanken, die das garantieren. Die Menschen haben lange Zeit nicht-relationale Datenbanken in der Produktion verwendet und gewinnen derzeit mit der "NoSQL" -Bewegung wieder an Boden.)
Kilian Foth
3

Dies wird natürlich ein Urteil sein, aber die drei Hauptkriterien, die ich in Betracht ziehen würde, sind: Muss es ACID- konform sein, wie komplex die Daten sind und schließlich, wie viele Dinge zum Lesen / Schreiben erforderlich sind. Solange Sie nur eine Zeile pro App lesen und schreiben und Ihre App die einzige App ist, die entweder liest oder schreibt, können Sie die Datenbank wahrscheinlich überspringen. Sobald Sie mehrere Apps haben, die entweder lesen oder schreiben, oder Ihre Datenstruktur komplex wird (insbesondere, wenn es Beziehungen zwischen verschiedenen Zeilen gibt), sieht eine Datenbank sehr attraktiv aus.

jmoreno
quelle
"Wie viele Dinge müssen gelesen / geschrieben werden?" - Das half.
Aseem Bansal
2

Datenbanken werden nicht nur zum Speichern, sondern auch zum Bearbeiten und Abfragen von Daten verwendet. Daher müssen Sie eine fundierte Entscheidung treffen:

Ein wichtiger Faktor ist der Nutzen, den Sie durch die Installation einer Datenbank auf dem Computer erzielen, im Vergleich zu den damit verbundenen Funktionen

Wenn Sie die Daten abfragen und bearbeiten müssen und den Zugriff beschleunigen möchten, ist es naheliegend, eine Datenbank für andere Funktionen zu verwenden. Datenbanken Speichermodelle erlauben , Daten von Schlüsselwerte nachgeschlagen werden sehr schnell, und ich kann mir vorstellen , eine Datei Parsen könnte langsam sein (je nachdem , wie Sie tun es)

Wenn Sie mit SQL spielen möchten und wissen möchten, was es kann, bietet SQLFiddle.com einige verschiedene RDBMS-Modelle, mit denen Sie herumspielen können (Abfragen ausführen, Schema erstellen usw.).

Charleh
quelle
Python verfügt über eine integrierte Standardbibliotheksschnittstelle für sqlite3. Die Installation einer Datenbank ist also kein Problem. Wenn ich weiterhin Daten speichere, kann die Indizierung langsam werden, es sei denn, ich habe irgendeine Art von Indizierung. Eine Datenbank kann das erledigen, denke ich. Ich habe sqlite3 separat heruntergeladen, um es zu lernen, und festgestellt, dass ich vor der Verwendung einer Datenbank etwas über Datenbankmodelle lernen musste. Ich kann sqlite3 anhand von internetbasierten Beispielen erlernen, habe jedoch derzeit Probleme beim Erlernen der Datenbankmodelle. Dann kam es mir in den Sinn, ob es sich überhaupt gelohnt hat?
Aseem Bansal
2

Wie immer eine Datenbank verwendet wird, hängt davon ab, was Sie tun müssen. Wenn Sie eine große Datenmenge haben und viele verschiedene Abfragen durchführen müssen, kann Ihnen wahrscheinlich eine Datenbank helfen.

In Ihrem Fall würde ich den Speicher in einer Testdatei aufbewahren, bis die Leistung akzeptabel ist. Normalerweise dauert das Lesen einer (auch großen) Textdatei nicht so lange. Wenn Sie mehr benötigen, können Sie die Datenbank später jederzeit hinzufügen.

Wenn Sie mit Datenbanken völlig neu sind, können Sie meiner Erfahrung nach die Verwendung von so etwas wie couchdb: http://couchdb.apache.org/, das no-sql ist, und Sie können Javascript oder Python usw. direkt für Abfragen verwenden.

Lorenzo Baracchi
quelle