He estado usando Clojure para algunas tareas de procesamiento de datos a gran escala (definitivamente gigabytes de datos, típicamente muchas matrices de Java grandes almacenadas dentro de varias construcciones de Clojure/referencias de STM).
Mientras todo encaje en la memoria disponible, no debería tener problemas con grandes cantidades de datos en una sola referencia. La referencia en sí aplica solo una pequeña cantidad fija de sobrecarga de STM que es independiente del tamaño de lo que contenga.
Una buena ventaja adicional proviene del intercambio estructural incorporado en las estructuras de datos estándar de Clojure (mapas, vectores, etc.). Puede tomar una copia completa de una estructura de datos de 10 GB, cambiar un elemento en cualquier lugar de la estructura y Se garantizará que ambas estructuras de datos juntas solo requerirán una fracción de más de 10GB. Esto es muy útil, particularmente si considera que debido a STM/concurrencia posiblemente tendrá varias versiones diferentes de los datos que se crean en un momento dado.
Buena respuesta. ¿Cuál es el patrón de acceso de lectura/escritura de su aplicación y la tasa de transacción de reintento? Además, ¿usas una referencia o varias referencias? – Zubair
Tengo muchos lectores pero no mucha contención de escritura, por lo general, solo un escritor. No se hizo una evaluación comparativa de la tasa de reintento de la transacción, pero sospecho que es bastante baja. Utilizo una referencia por identidad lógica, p. "la lista de todos los resultados de procesamiento hasta ahora" que se agrega cuando se completan varias tareas – mikera