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.
Schöne Antwort. Wie lauten das Lese-/Schreibzugriffsmuster Ihrer Anwendung und die Wiederholungstransaktionsrate? Verwenden Sie auch einen oder mehrere Referenzen? – Zubair
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