2010-12-30 17 views
8

Ich muss eine Entscheidung darüber treffen, ob ich STM in einem Clojure-System, an dem ich beteiligt bin, für ein System verwende, das mehrere GB benötigt, um in einem einzigen STM-Verweis gespeichert zu werden.Erfahrungen mit Clojure STM für große Datensätze?

Ich würde gerne von jedem hören, der einen Rat bei der Verwendung von Clojure STM mit großen indizierten Datensätzen hat, um ihre Erfahrungen zu hören.

Antwort

4

Ich habe Clojure für einige ziemlich große Datenverarbeitungsaufgaben verwendet (definitiv Gigabytes an Daten, typischerweise viele größere Java-Arrays, die in verschiedenen Clojure-Konstrukten/STM-Referenzen gespeichert sind).

Solange alles in den verfügbaren Speicher passt, sollten Sie kein Problem mit extrem großen Datenmengen in einer einzigen Referenz haben. Der Verweis selbst wendet nur einen kleinen festen Betrag an STM-Overhead an, der unabhängig von der Größe dessen ist, was in ihm enthalten ist.

Ein schöner zusätzlicher Bonus kommt von der strukturellen Freigabe, die in Clojures Standard-Datenstrukturen (Karten, Vektoren usw.) eingebaut ist - Sie können eine vollständige Kopie einer 10GB Datenstruktur nehmen, ein Element in der Struktur ändern und garantiert werden, dass beide Datenstrukturen zusammen nur einen Bruchteil mehr als 10GB benötigen. Dies ist besonders hilfreich, wenn Sie bedenken, dass aufgrund von STM/Parallelität möglicherweise mehrere verschiedene Versionen der Daten gleichzeitig erstellt werden.

+1

Schöne Antwort. Wie lauten das Lese-/Schreibzugriffsmuster Ihrer Anwendung und die Wiederholungstransaktionsrate? Verwenden Sie auch einen oder mehrere Referenzen? – Zubair

+1

Ich habe viele Leser, aber nicht viel Streit - in der Regel nur ein Schreiber. Nicht bewertet die Transaktion Wiederholungsrate, aber ich vermute, dass es ziemlich niedrig ist. Ich benutze eine Referenz pro logischer Identität, z. "Die Liste aller bisherigen Verarbeitungsergebnisse", an die bei Abschluss verschiedener Aufgaben angefügt wird – mikera

1

Die Leistung wird nicht schlechter oder besser als STM mit einem einzelnen Datensatz mit einem kleinen Datensatz. Die Leistung wird mehr durch die Anzahl der Aktualisierungen eines Datasets als durch die tatsächliche Größe des Datasets beeinträchtigt.

Wenn Sie einen Verfasser für den Datensatz und viele Leser haben, wird die Leistung immer noch ziemlich gut sein. Wenn Sie jedoch einen Leser und viele Autoren haben, wird die Leistung darunter leiden.

Vielleicht helfen uns mehr Informationen, Ihnen mehr zu helfen.

+0

Ich werde verschiedene Nutzungsmuster erwarten und wollte nur allgemeine Erfahrungen kennen, um ein Gefühl dafür zu bekommen, wie sie in verschiedenen Situationen funktionieren. Aber Ihre Informationen waren nützlich, danke – Zubair

Verwandte Themen