Ich richte eine Weboberfläche für die Datenverwaltung ein. Benutzer laden CSV- oder ähnlich strukturierte Dateien hoch, und ich möchte diese in der Datenbank speichern, damit sie sie bearbeiten können - filtern, sortieren, grafisch darstellen usw.
Ich weiß nicht, wie ich das in einer Datenbank richtig modellieren soll. Ich habe mehrere Ideen, aber keine scheint der richtige Weg zu sein.
Erstellen Sie eine neue Tabelle für jede hochgeladene CSV. Dies würde bedeuten, dass jede Spalte entsprechend eingegeben werden könnte (Ganzzahlen, Zeichenfolgen, Datumsangaben usw.) und jeder Datensatz trivial einer Zeile in der CSV-Datei entsprechen würde. Dies scheint eine natürliche Konzeptualisierung des Problems zu sein - aber würde die Leistung zu einem Problem werden, wenn ich für jede hochgeladene Datei eine neue Tabelle erstellen müsste?
Erstellen Sie eine Tabelle, in der jeder Datensatz ein Dataset (CSV) darstellt, und andere Tabellen, in denen Datenpunkte die ID ihres Datasets in ihrem Datensatz haben. Dies würde bedeuten, dass alle Daten aus einem bestimmten Datensatz auf verschiedene Tabellen verteilt sind und es viel Redundanz geben würde (da jeder Datenpunkt die ID des Datensatzes speichern würde). Dies würde jedoch bedeuten, dass keine Tabellen pro Datensatz erstellt werden müssten.
Andere Variationen von 2. Die meisten meiner anderen Gedanken waren Variationen von Nummer 2 mit verschiedenen Indirektionsgraden.
Meine Frage lautet im Wesentlichen "Wie modelliere ich das richtig?", Das heißt, mit der Fähigkeit, vernünftig zu skalieren.
Die meisten Daten werden wissenschaftlich sein. Wie gehe ich also mit vielen Datensätzen von Größen um, die von trivial (z. B. 10 Spalten und 100 Zeilen) bis massiv (Hunderte von Spalten und Tausende / Millionen von Zeilen) variieren?
tl; dr: Wie modelliere ich beliebige Daten aus einer beliebigen Anzahl wohlgeformter CSVs in einer Datenbank und würde eine neue Tabelle für jede CSV akzeptabel funktionieren?
quelle
Antworten:
Die Frage ist so offen, dass es schwer ist, viel zu sagen.
Und warum benutzt du überhaupt eine Datenbank? Excel macht alles, was Sie bisher beschrieben haben.
Im Ernst, vermeiden Sie es, ein inneres System in Ihrer Datenbank zu erstellen, in dem alle Arten von Daten gespeichert werden können. Sie haben bereits eine DATENBANK. Erstellen Sie Code, der die benötigten Tabellen erstellt. Was ist daran so schlimm? Ich sage Option 1.
Sie wissen, wenn Sie unendliche Flexibilität wünschen, wie wäre es mit einer Quadratmeile weißen Tafel?
quelle
MySQL hat eine CSV-Engine, die Ihnen helfen kann. Ich habe sie jedoch nie erfolgreich getestet.
Ich glaube, Sie müssen die Tabelle mit der CSV-Engine erstellen und ihr dieselbe Struktur und denselben Namen wie die CSV-Datei geben. Wahrscheinlich automatisieren Sie diesen Prozess ziemlich einfach.
Dann kopieren Sie einfach die CSV des Benutzers in das Speicherverzeichnis des Servers (ersetzen Sie im Wesentlichen die vom Server erstellte CSV-Datei durch die Benutzer, die Namen müssen genau übereinstimmen).
Dadurch wird jedoch für jede CSV-Datei eine Tabelle erstellt
quelle
Mein erster Gedanke ist, die CSV als BLOBs oder mit FILESTREAM zu speichern. Sind diese clientseitigen Funktionen nicht erforderlich, wenn eine Filterung oder grafische Darstellung erforderlich ist?
Ich kann mir nichts Schlimmeres vorstellen, als eine Tabelle pro CSV-Datei zu erstellen. Eine Datenbank mit Zehntausenden von Tabellen kommt meiner Vorstellung von einem Albtraum nahe.
Wenn Sie die einzelnen Datenpunkte speichern müssen (im Gegensatz zur gesamten CSV als einzelnes Objekt), würde ich sie entweder als wohlgeformtes XML speichern, wobei jedem Datensatz ein Konsistenzschema zugeordnet ist, oder als etwas, das Ihrer Option ähnelt 2.
Ich stimme der Antwort von ErikE zu, dass Sie etwas neu erstellen, das existiert, aber genauer gesagt, warum müssen Sie diese in eine Datenbank stellen und was müssen Sie damit tun? Jede CSV würde idealerweise als einzelne Tabelle gespeichert, aber Tausende von Tabellen bereiten nur Kopfschmerzen.
quelle
Ich würde sagen, es kommt wirklich darauf an
Sagen wir, wenn es 1000 verschiedene Arten gibt und diese auf die gleiche Weise verarbeitet werden. Im Allgemeinen würde ich CSV in einer generischen Struktur (EAV) laden und darüber hinaus bestimmte Tabellen erstellen. In diesem Fall analysieren Sie CSV an einer Stelle und nähern sich dem Geschäft wahrscheinlich weiter an, indem Sie bestimmte Geschäftstabellen mit definierten bekannten Datentypen erstellen.
Wenn die Leistung ein Problem darstellt, funktioniert das EAV-Modell (eine Spalte - eine Datenbankzeile) möglicherweise nicht einfach (z. B. 4 GB CSV), sodass Sie direkt in bestimmte Tabellen laden müssen. Wenn die Entwicklungszeit die teuerste von allen ist und die Dateien winzig sind, erstellen Sie etwas Generisches. Wenn Sie eine spezifischere Tabelle benötigen, erstellen Sie eine zusätzliche Ebene mit "normalen" Tabellen. Eine andere Möglichkeit besteht darin, den Code basierend auf Metadaten zu generieren.
quelle