myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » Handling von großen Datenmengen, Ansatz gesucht
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Handling von großen Datenmengen, Ansatz gesucht

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Fitschy Fitschy ist männlich
myCSharp.de-Mitglied

Dabei seit: 30.07.2012
Beiträge: 3


Fitschy ist offline

Handling von großen Datenmengen, Ansatz gesucht

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

dies ist mein erster Post im Forum. Ich hoffe mal, ich bin mit meiner Frage im richtigen Unterforum gelandet.

Folgende Ausgangsstellung: Ich habe z.B. eine Binärdatei (bis zu 10GB) die einfache Messreihen enthält (andere Dateiformate als binär sind aber auch mgl.). Dabei sind die Messwerte wie bei einer Tabelle in Spalten und Zeilen unterteilt. Die Zeilenanzahl kann größer 15Millionen sein.

Diese Werte müssen vom Programm bearbeitet werden. Da ich bei der Menge an Werten nicht alle in den Speicher lesen kann, fehlt mir irgendwie der Ansatz wie das Ganze vernünftig zu handeln ist.

Bisher habe ich mir überlegt, dass ich eine Datenbank benutze sollte. Diese wollte ich mit den Werten füllen, um dann per SQL-Statements die Werte zu bearbeiten, oder je nach Bedarf in den Speicher zu lesen. Da die Anwendung ohne DB-Installation auskommen soll, habe ich bisher zwei Embedded-DBs ins Auge gefasst:
-SQLite
-Firebird

Aber ich weiss nicht, wie performant das Ganze ist. Hat damit jemand Erfahrung? Oder ist dieser Ansatz evtl. generell nicht zu empfehlen? Oder gibt es einen deutlich besseren?

Zweites Problem: Wie halte ich Werte am besten im Speicher? Ich habe dazu einmal Listen probiert. Damit schaffe ich es so um die 50Mil. Werte im Speicher zu halten.
Benutze ich eine DataTable (fand ich von der Strukturierung passender) ist dort schon bei knappen 10Mil Werten der Speicher voll.
Ob es jetzt sinnig ist soviele Werte im Speicher zu haben, ist natürlich eine andere Sache ;)

So...jetzt hoffe ich mal, dass meine Problemstellung verständlich geschrieben ist :) Ansonsten besser ich natürlich nach.
30.07.2012 12:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt Abt ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 3.388
Entwicklungsumgebung: VS2010, VS2012, ReSharper
Herkunft: Stuttgart


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Lade immer nur die Werte, die Du gerade brauchst. Nicht alles auf einmal. Damit kann ja niemand etwas anfangen und verbraucht unnötig Ressourcen.
30.07.2012 12:14 Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 2.994
Entwicklungsumgebung: VS.NET 2010, ReSharper
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Fitschy:
Aber ich weiss nicht, wie performant das Ganze ist. Hat damit jemand Erfahrung? Oder ist dieser Ansatz evtl. generell nicht zu empfehlen? Oder gibt es einen deutlich besseren?

Du verrätst uns ja nicht einmal, was du mit den Daten eigentlich machen willst. Um die Daten zu speichern und zu verarbeiten, eignet sich eine Datenbank, wie du schon vermutet hast. Aber wie performant das ganze wird, hängt natürlich davon ab, was genau du damit vor hast.

Christian
30.07.2012 13:11 Beiträge des Benutzers | zu Buddylist hinzufügen
FZelle
myCSharp.de-Poweruser/ Experte

Dabei seit: 23.04.2004
Beiträge: 8.482


FZelle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Und so sehr ich auch FB immer unterstützt habe, aber für wirkliche Massendaten ist das nicht geeignet.
Schon ein BulcCopy von 100.000 Datensätzen innerhalb einer geöffneten Connection ( mit oder ohne Transaction ) führt zu OutOfMemory in der Nativen DLL.

Also wenn Embededded DB dann eher SQLite.
30.07.2012 13:14 Beiträge des Benutzers | zu Buddylist hinzufügen
Fitschy Fitschy ist männlich
myCSharp.de-Mitglied

Dabei seit: 30.07.2012
Beiträge: 3

Themenstarter Thema begonnen von Fitschy

Fitschy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke schonmal für die Antworten.
Die Datenverarbeitung würde zB. einfache Sachen enthalten, wie "Alle Werte um einen bestimmten Wert erhöhen", oder "Jeden x-ten Wert löschen".

Aber ich denke Abt's Ansatz werde ich weiter verfolgen. Soweit ich es bisher überblicken kann, ergibt sich keine Bearbeitung bei der ich wirklich alle Daten im Speicher haben müsste.

Im Moment spiele ich gerade schon mit SQLite herum. Werde da gleich mal probieren einen größeren Datensatz abzulegen. Gefällt mir bisher aber ganz gut :).
30.07.2012 13:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 2.994
Entwicklungsumgebung: VS.NET 2010, ReSharper
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Fitschy:
Die Datenverarbeitung würde zB. einfache Sachen enthalten, wie "Alle Werte um einen bestimmten Wert erhöhen", oder "Jeden x-ten Wert löschen".

Das wären ja nur einfache SQL-Befehle, die Datenbank kümmert sich dann um die Speicherverwaltung.

Christian
30.07.2012 13:52 Beiträge des Benutzers | zu Buddylist hinzufügen
Fitschy Fitschy ist männlich
myCSharp.de-Mitglied

Dabei seit: 30.07.2012
Beiträge: 3

Themenstarter Thema begonnen von Fitschy

Fitschy ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Nochmals danke für die fixen Hilfestellungen hier. Daumen hoch

Und für alle die es noch interessiert, habe ich ein Test von SQLite nach  SQLite DB mega langsam erstellt.

Dabei ergaben sich für das Schreiben in die DB die folgenden Zeiten:
Für 100k-Werte: 1,67s
Für 1M-Werte: 14,353s
Für 10M-Werte: 126,158s
30.07.2012 14:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
weismat
myCSharp.de-Mitglied

Dabei seit: 20.09.2005
Beiträge: 451
Entwicklungsumgebung: Vistual Studio 2010 Resharper
Herkunft: Frankfurt am Main


weismat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn Du SQL willst, wuerde ich mir PostgreSQL anschauen.
Andere NoSQL Kandidaten waeren entweder HD5 als performantes Datenformat oder Apache HBase - da gibt es aber wohl keinen direkten DB-Treiber zurzeit.
30.07.2012 17:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 9 Monate.
Der letzte Beitrag ist älter als 9 Monate.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 21.05.2013 23:14