Gestreamte Serialisierung

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Gestreamte Serialisierung

    Hallo liebes Forum,

    hat jemand ne Idee bzw. nen Snippet wie man Objekte platzsparend in einer Datei speichern kann und die dann On the fly (Wie es so schön heißt) auslesen. Also dass die Objekte dynamisch aus der Datei gelesen werden und nicht erst die komplette Datei in den Speicher gelesen werden muss. Die Objekte die darin gespeichert werden sollen sind alle serialisierbar... Und Linq Abfragen wären auch toll. XD (Klingt doof haha)

    Hoffe jemand hat ne Idee. Habe leider keinen Code, weil ich keinen Ansatz wüsste welcher den Anforderungen entspricht.

    Liebe Grüße
    Julian
    Hmkay. :|
    Die Klassen sind wie folgt:



    Also stellt die StreetMap eine Art Datenbank dar. Über diverse Methoden (noch nicht aufgeführt) sollen aber z.B. nur Points in einem bestimmten Bereich zurückgegeben sind. Das können allerdings ziemlich viele sein (Normalfall: 3000 Stk.). Die Serialisierung mit JSON gefällt mir, da das relativ einfach ist. Wenn ich erst die StreetMap aus einer Datei deserialisiere lädt er doch alle enthaltenen Objekte in den Speicher um danach erst zu filtern (oder @ErfinderDesRades? :D). Ist es also möglich LINQ Abfragen durchzuführen, welche via JSON (oder wenn jemand ne andere Methode sieht, welche besser ist) direkt aus der Datei gelesen werden? @thefiloe

    @RodFromGermany Inwiefern besteht da ein Zusammenhang ? :D

    PS: Vielen Dank für die Antworten :D

    Liebe Grüße
    Julian
    Hmkay. :|

    jedijaeger schrieb:

    lädt er doch alle enthaltenen Objekte in den Speicher um danach erst zu filtern
    ja, natürlich. Ohne Datenbank muss man die Objekte laden, bevor man ausfiltern kann.
    Nur eine Datenbank kann "filtern" (Selectieren), ohne alles geladen zu haben.
    Und Linq kann entweder von geladenen Objekten abfragen (nicht von ungeladenen), oder es fragt einen OR-Mapper ab, der seinerseits wiederum eine Db abfragt.
    SQLite z.B. für lokale DBs
    Außerdem kann man auch filtern, während dem auslesen, etwas anderes macht die Datenbank ja dann auch nicht(nur natürlich mit entsprechenden Optimierungen), dann musst du im Endeffekt nur die Daten im Speicher halten, die nötig sind.
    Aber für eine schnelle Suche wirst du es im Memory halten müssen(was die Datenbank auch macht)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    Aber für eine schnelle Suche wirst du es im Memory halten müssen(was die Datenbank auch macht)


    Ja gut dann probiere ich es erstmal nur mit dem Speicher. Ist dieses beim Auslesen Filtern, denn in .NET bei der Serialisierung möglich oder muss ich da einen eigenen Serialisierer schreiben?
    Hmkay. :|
    nunja zumindest musst du die daten einzeln serialisieren bzw. in Chunks, denn .Net lädt nur ein komplettes Objekt, so wie du es auch reinschiebst. Oder eben selber machen.
    Aber was genau spricht denn gegen eine Datenbank?
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @jvbsl Also grundsätzlich spricht nichts gegen eine Datenbank. Allerdings muss ja bei SQL z.B. ein Server vorhanden sein der mit installiert werden muss,etc. und da das so wenig Aufwand möglich sein muss wie möglich passt das nicht so ganz darein... Das ist alles Aufwand. SQLite ist vlt. ein bissschen langsam... Es sei denn ich irre mich bei den genannten Punkten :D
    Hmkay. :|
    langsamer als etwas selbst dahin geklatschtes bezweifel ich dabei fast, es sei denn du kannst natürlich durch bestimmtes Vorwissen etwas optimieren, aber ansonsten denke ich sobald es um Filtern geht ist eine DB von Vorteil und auch SQLite dürfte dabei performant genug sein.
    Und wie gesagt vermute ich immernoch performanter als die Grundimplementierung die du dann selbst machst^^
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    genau das versuchen ja Datenbanken zu beheben, indem sie häufig zugegriffene Daten cachen und Daten teilweise im Speicher halten etc.
    Vlt. nicht immer für jeden Anwendungsfall optimal, aber eben in einem guten Mittel und immer noch besser optimiert, als gar nicht optimiert^^

    Kann natürlich evtl. sein, dass du den Cache in SQlite auch auf Memory umstellen musst um die maximale Geschwindigkeit herauszubekommen.
    Die Einstellungsmöglichkeiten findest du Online und ob es tatsächlich schneller ist merkst du dann beim ausprobieren.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---