Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Was ist der zeiteffizienteste Weg, um eine DataTable zu/von Redis zu serialisieren/deserialisieren?

Leider wird es bei der Arbeit mit großen Datensätzen immer einige Zeit dauern, die Struktur zu serialisieren und zu deserialisieren. DataTable s sind insbesondere ziemlich komplexe Objekte, da sie Zeilen und Spalten haben, an die oft viele Metadaten angehängt sind - selbst wenn es wie eine einfache Tabelle aussieht.

DataTable vs List<POCO> :

Überlegen Sie, ob Sie wirklich als DataTable serialisieren müssen . Könnten Sie ein einfacheres POCO erstellen und eine List<YourRecord> serialisieren ? Mit anderen Worten, wenn Sie keine zusätzlichen Attribute für Felder und Spalten benötigen und in ein einfacheres Format serialisieren können, ist dies wahrscheinlich schneller und platzsparender im Cache. und dann in einer DataTable wiederherstellen falls nötig.

Eine andere Möglichkeit besteht darin, die DataTable zu teilen in kleinere Sätze, die Sie in kleineren Teilen serialisieren und speichern. Möglicherweise finden Sie dies leistungsfähiger. Sie sollten in der Lage sein, dies zu bewerten.

Benchmark:

Letztendlich sollte Ihr Redis-Cache eine Verbesserung gegenüber der Zeit darstellen, die zum erneuten Abfragen der Datenquelle benötigt wird. Sie verwenden den Begriff takes too much time , aber wenn es 2 Sekunden dauert, um aus dem Cache zu kommen, im Vergleich zu 8 Sekunden, um die Datenquelle abzufragen, dann ist das ein erheblicher Schub. Aber der einzige Weg, um sicher zu sein, ist ein Benchmark.

  • Richten Sie Ihre Umgebung so ein, dass Sie nur die notwendigen Tools ausführen. Führen Sie keine anderen Aufgaben aus, während Sie die Benchmarks ausführen, damit Sie keine Voreingenommenheit einführen.

  • Zeichnen Sie die Zeit auf, die zum Serialisieren einer DataTable benötigt wird . Führen Sie diese Aktion viele Male und durchschnittlich aus.

    var start = DateTime.Now;
    // Serialize
    var duration = DateTime.Now - start;
    
  • Experimentieren Sie mit verschiedenen Größen von DataTable s und sehen Sie, ob Sie eine akzeptable Zeit finden.

  • Probieren Sie eine andere Serialisierungsbibliothek aus, z. B. JSON.NET. Obwohl es schön ist, den gesamten ServiceStack beizubehalten, kann Ihnen dies helfen, festzustellen, ob es sich um einen Mangel an ServiceStack.Text oder nur um ein Problem mit dem großen Datensatz handelt.

  • Wiederholen Sie den Vorgang für die Deserialisierung.

Speicher:

Wenn Sie mit großen Datensätzen arbeiten, verfügen sowohl Ihre Anwendung als auch der Cache über ausreichend Arbeitsspeicher? Der Speicher in Ihrer Anwendung könnte ein Engpass sein; Sie sollten den Aktivitätsmonitor Ihres Systems beobachten, während Sie die Vorgänge ausführen, und sicherstellen, dass Ihnen nicht der Arbeitsspeicher ausgeht und Ihr System Paging durchführt. Wenn Sie feststellen, dass dies passiert, sollten Sie entweder den Arbeitsspeicher erhöhen oder die DataTable wie zuvor erwähnt in kleinere Datensätze aufteilen.

Latenz:

Wenn Sie über ein Netzwerk und nicht auf demselben Computer eine Verbindung zu einem Redis-Server herstellen, haben Sie die Latenz des Netzwerks überprüft? Möglicherweise möchten Sie zwischen Ihrem Anwendungsserver und dem Cache-Server pingen und sicherstellen, dass Sie tatsächlich einen niedrigen Ping haben. Besonders wenn Sie feststellen, dass das Caching einfacher Objekte langsam ist.

Redis?

Wenn Sie feststellen, dass es keine Möglichkeit gibt, die Zeit zum Zwischenspeichern und Wiederherstellen zu verbessern, ist die Verwendung von Redis möglicherweise nicht geeignet. Vielleicht mit einer static DataTable innerhalb des Anwendungsspeichers wäre besser geeignet. Mit anderen Worten, indem Sie den Cache im Anwendungsspeicher behalten und sich keine Gedanken über die Serialisierung und Deserialisierung machen müssen. Natürlich müssen Sie möglicherweise darauf achten, dass Ihrer Anwendung genügend Speicher zur Verfügung steht, um dies zu tun. Es würde mich allerdings wundern, wenn Sie diese Option wählen müssten .

Zusammenfassung:

Ohne Ihren Datensatz oder Ihr Wissen über den von Ihnen erstellten Dienst zu sehen, ist dies letztendlich nur ein allgemeiner Ratschlag, wie Sie die Ursache Ihres Problems am besten eingrenzen können. Der wichtigste Ratschlag ist, keine DataTable zu verwenden wenn eine einfachere Struktur ausreicht, und vergleichen Sie jede der Operationen, um Engpässe zu ermitteln.

Ich hoffe, das hilft.