Laden...

Wie Speichern?

Erstellt von Seikilos vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.360 Views
S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 17 Jahren
Wie Speichern?

Ich kenne mich, wie mal erwähnt, noch nicht komplett mit C# aus und wollte mal fragen, welche Arten ich habe, Daten zu speichern.
Ich würde gerne auf Serialisierung verzichten und denke dass txt(xml, plain, usw) Dateien zu langsam sind, welche Arten habe ich noch?

Life is a short

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Seikilos,

ziemlich allgemeine Frage. 🙂

Es gibt noch (relationale) Datenbanken.

Warum sollten Dateien zu langsam sein? Kommt natürlich auf die Datenmenge und die Struktur der daten an?

XML-Dateien unterscheiden sich übrigens sehr von plain-text-Dateien. Zu nennen wäre auch noch CSV-Dateien.

Was für Daten willst du speichern?

herbivore

564 Beiträge seit 2005
vor 17 Jahren

BinaryWriter

T
512 Beiträge seit 2006
vor 17 Jahren

Original von Seikilos
Ich würde gerne auf Serialisierung verzichten und denke dass txt(xml, plain, usw) Dateien zu langsam sind, welche Arten habe ich noch?

Serialisierung ist genau das was du machen willst. Abbilden von Objekten auf externe Darstellungsformen, oft verwendet zum persistieren (speichern) von Daten.

Die einzige Alternative die mir einfällt ist, dass du nicht die Objekte abbildest sondern nur die Daten. Wie z.B. mit ner relationalen Datenbank. Dann nennt sich das nicht mehr Serialisierung aber irgendwie erschließt sich mir der Vorteil nicht.

e.f.q.

Aus Falschem folgt Beliebiges

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 17 Jahren

Hi 🙂
Nein Serialisierung ist nicht das was ich machen will, vor allem nicht, wenn ich später vielleicht rekursive Datenstrukturen habe, außerdem wäre eine Serialisierung zuviel Overhead.
Was ich plane ist folgendes, wir haben an unserer Hochschule Projekte, ein Projekt behandelt Mapping von Audio auf Farbe und weitere Verarbeitung.
Was ich machen muss, ist das einlesen von beliebig vielen Audiodateien, am meisten wohl Mp3s, Rahmen unbekannt, 100, 1000, 5000 (es werden wohl später mehrere tausend fake mp3s erstellt, die 3-4 mb groß sind um das Verhalten bei der Menge an Dateien zu testen.
Also, ich muss nun n-Mp3s einlesen, dann kann man diesen eine Farbe zu weisen (per Hand/generisch, usw ist im moment unwichtig) und um die Relation datei-> farbe zu sichern, muss ich eine Unmenge an solchen Dingen speichern, es reicht ja vollkommen Pfad/name- farbe, nur ist das Soße, wenn es in eine Textdatei rein muss, egal welcher Art, ist es ne csv, xml, plain oder was immer, muss ich jedesmal alles umwälzen, wenn ich eine Farbe ändern möchte, oder Zeigeroperationen auf eine txt Datei ausführen, was auch nicht schön, noch performant ist.
Das ist ungefähr das, was ich will

Life is a short

T
512 Beiträge seit 2006
vor 17 Jahren

Naja dafür würde sich eigentlich eine Datenbank anbieten.

Alles andere läuft darauf hinaus, dass du etwas Datenbankähnliches nachbaust (z.B. ISAM). Wird imo zu aufwändig.

Aber 5000 oder auch 100000 Dateinamen mit nem Farbwert sind eigentlich auch nicht so massig viele Daten (geschätze 10 MB). Die könntest du auch einfach in ein Dictionary/Hashtable im Speicher halten. Oder du benutzt ein DataSet zum Arbeiten, und lässt das dann serialisieren zum Speichern. Musst ja nicht bei jeder Änderung direkt auf Platte schreiben.

Prinzipiell heißt Arbeiten mit Datein Arbeiten mit Streams. Und das heißt immer alles umwälzen um eines zu ändern.

e.f.q.

Aus Falschem folgt Beliebiges

S
Seikilos Themenstarter:in
753 Beiträge seit 2006
vor 17 Jahren

Jau, das im Speicher halten ist ja auch ok, nur müssen die daten über die Laufzeit hinweg speicherbar sein, es müssen quasi mini Datenbanken von jeweiligen Sammlungen angelegt werden um verschiedenen Zustände von lied->farbe zu haben um damit experimentieren zu können. Also quasi laden und speichern. Beim laden wird natürlich alles in den Ram geladen und dort verarbeitet.

Ich muss mal gucken, wie weit eine Datenbank nützlich ist, ich möchte eigentlich eine schlanke Anwendung, die auf jedem PC mit dem passenden Framework läuft (hab mich noch nicht über DBs in C# informiert, mach ich nachher)

Life is a short

S
8.746 Beiträge seit 2005
vor 17 Jahren

Vielleicht sind Object Prevalence Frameworks das Richtige für dich:

http://www.codeproject.com/dotnet/ObjectPrevalenceWithBambo.asp

Ähnelt ein wenig dem, was man aus Smalltalk kennt: Dabei werden alle Objekte - quasi als Image - auf die Platte geschrieben. Extrem schnell und einfach, allerdings muss man eben alles im Speicher halten können. Selektiv Laden oder Speichern, wie bei DBs geht nicht. Der Unterschied zur Serialisierung besteht darin, dass beim Anlegen eines Snapshot transaktionell gearbeitet wird und nicht immer der gesamte Objektbaum gespeichert werden muss, sondern nur die Änderungen. Also sowas wie Serialisierung++.

Aber eines sollte dir klar sein: Serialisierung findet grundsätzlich immer statt wenn man speichert, entweder per Hand - wie bei relationalen DBs - oder automatisch.

Du verbindest offenbar mit Serialisierung sowas wie XML. Serialisierung bezeichnet aber nur den Vorgang, ein Objekt in ein speicherbares Format zu überführen.

Ansonsten gibt es ja noch Objekt-DBs. Aus Codesicht deutlich schlanker und einfacher als relationale DBs, weil das Mapping entfällt.