10 Stimmen

Effizientes Verfahren zur Analyse großer Datenmengen?

Ich muss Zehntausende von Datenzeilen analysieren. Die Daten werden aus einer Textdatei importiert. Jede Datenzeile hat acht Variablen. Derzeit verwende ich eine Klasse, um die Datenstruktur zu definieren. Während ich die Textdatei lese, speichere ich jedes Zeilenobjekt in einer generischen Liste, List.

Ich frage mich, ob ich zu einer relationalen Datenbank (SQL) wechseln sollte, da ich die Daten in jeder Textzeile analysieren und versuchen muss, sie mit Definitionsbegriffen in Beziehung zu setzen, die ich derzeit ebenfalls in allgemeinen Listen (List) speichere.

Ziel ist es, eine große Menge an Daten anhand von Definitionen zu übersetzen. Die definierten Daten sollen filterbar, durchsuchbar usw. sein. Mit einer Datenbank macht mehr Sinn, je mehr ich darüber nachdenke, aber ich möchte mit mehr erfahrenen Entwicklern bestätigen, bevor ich die Änderungen vornehmen, noch einmal (ich war mit structs und Array-Listen auf den ersten).

Der einzige Nachteil, den ich mir vorstellen kann, ist, dass die Daten nicht gespeichert werden müssen, nachdem sie übersetzt und vom Benutzer angesehen wurden. Es besteht keine Notwendigkeit für eine dauerhafte Speicherung der Daten, daher könnte die Verwendung einer Datenbank ein wenig übertrieben sein.

3voto

Thomas Punkte 62314

Es ist nicht unbedingt notwendig, eine Datenbank zu verwenden. Es hängt von der tatsächlichen Größe der Daten und dem Prozess ab, den Sie durchführen müssen. Wenn Sie die Daten mit einer benutzerdefinierten Klasse in eine Liste laden, warum verwenden Sie dann nicht Linq für die Abfrage und Filterung? Etwas wie:

var query = from foo in List<Foo>
            where foo.Prop = criteriaVar
            select foo;

Die eigentliche Frage ist, ob die Daten so groß sind, dass sie nicht bequem in den Speicher geladen werden können. Wenn das der Fall ist, dann wäre eine Datenbank viel einfacher.

3voto

Joe H Punkte 811

Dies ist keine große Menge an Daten. Ich sehe keinen Grund, eine Datenbank in Ihre Analyse einzubeziehen.

Es gibt eine in C# integrierte Abfragesprache - LINQ. Der ursprüngliche Poster verwendet derzeit eine Liste von Objekten, so gibt es wirklich nichts mehr zu tun. Es scheint mir, dass eine Datenbank in dieser Situation würde weit mehr Wärme als Licht hinzufügen.

1voto

i_am_jorf Punkte 52346

Es klingt, als ob Sie eine Datenbank benötigen. Sqlite unterstützt In-Memory-Datenbanken (verwenden Sie ":memory:" als Dateinamen). Ich vermute, dass andere auch einen In-Memory-Modus haben.

1voto

wonde Punkte 674

Die Sache ist, ich war auf der Suche nach einer konkreten und gute Lösung für eine Menge von Barcode generiert files.The Barcode generiert eine Textdatei mit Tausenden von Datensätzen mit in einer einzigen Datei.Manipulation und Präsentation der Daten war so schwierig für mich auf den ersten.Based auf die Datensätze, was ich programmiert war, erstelle ich eine Klasse, die die Datei zu lesen und lädt die Daten in die Daten-Tabelle und in der Lage, es in der Datenbank zu speichern. Die Datenbank, die ich verwendet habe, war SQL Server 2005, und ich konnte die gespeicherten Daten leicht verwalten und sie so darstellen, wie es mir gefiel.Der wichtigste Punkt ist, die Daten aus der Datei zu lesen und sie in der Datenbank zu speichern.Wenn Sie das tun, haben Sie viele Möglichkeiten, sie zu bearbeiten und so darzustellen, wie es Ihnen gefällt.

0voto

JDMX Punkte 1479

Wenn es Ihnen nichts ausmacht, Access zu benutzen, können Sie Folgendes tun

Anhängen einer leeren Access-Datenbank als Ressource Wenn nötig, schreiben Sie die Datenbank in eine Datei. Führen Sie eine CREATE TABLE-Anweisung aus, die die Spalten Ihrer Daten verarbeitet Importieren Sie die Daten in die neue Tabelle Verwenden Sie Sql, um Ihre Berechnungen auszuführen. OnClose, löschen Sie die Access-DB.

Sie können ein Programm wie Resourcer verwenden, um die Datenbank in eine resx-Datei zu laden

  ResourceManager res = new ResourceManager( "MyProject.blank_db", this.GetType().Assembly );
  byte[] b = (byte[])res.GetObject( "access.blank" );

Verwenden Sie dann den folgenden Code, um die Ressource aus dem Projekt zu ziehen. Nehmen Sie das Byte-Array und speichern Sie es am temporären Speicherort mit dem temporären Dateinamen

"MyProject.blank_db" ist der Speicherort und Name der Ressourcendatei "access.blank" ist die Registerkarte, die der Ressource zum Speichern gegeben wird

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