Ich muss eine Entscheidung darüber treffen, ob ich STM in einem Clojure-System verwende, für das ich arbeite, für ein System, das mehrere GB benötigt, um in einem einzigen STM-Verweis gespeichert zu werden.
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.
Ich habe Clojure für einige ziemlich große Datenverarbeitungsaufgaben verwendet (definitiv Gigabytes an Daten, typischerweise viele große 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 einem einzigen Verweis haben. Der Verweis selbst wendet nur eine kleine festgelegte Menge an STM-Overhead an, die unabhängig von der Größe dessen ist, was darin enthalten ist.
Ein netter 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 irgendwo in der Struktur ändern und sein garantiert, dass beide Datenstrukturen zusammen nur einen Bruchteil von mehr als 10 GB 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.
Die Performance wird nicht schlechter oder besser als STM sein, bei der nur ein einzelner Datensatz mit einem kleinen Datensatz verwendet wird. 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, ist die Leistung immer noch ziemlich gut. Wenn Sie jedoch einen Leser und viele Autoren haben, leidet die Leistung.
Vielleicht helfen uns mehr Informationen, Ihnen weiter zu helfen.