2010-12-30 19 views
8

Necesito tomar una decisión sobre si debo usar STM en un sistema Clojure con el que estoy involucrado para un sistema que necesita almacenar varios GB en una única referencia STM.¿Experiencias con Clojure STM para grandes conjuntos de datos?

Me gustaría saber de cualquier persona que tenga algún consejo sobre el uso de Clojure STM con grandes conjuntos de datos indexados para escuchar sus experiencias.

Respuesta

4

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.

+1

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

+1

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

1

El rendimiento no será peor o mejor que STM con una única referencia con un pequeño conjunto de datos. El rendimiento se ve más obstaculizado por la cantidad de actualizaciones de un conjunto de datos que el tamaño real del conjunto de datos.

Si tiene un escritor para el conjunto de datos y muchos lectores, el rendimiento seguirá siendo bastante bueno. Sin embargo, si tiene un lector y muchos escritores, el rendimiento sufrirá.

Quizás más información nos ayude a ayudarlo más.

+0

Esperaré diferentes patrones de uso y solo quería saber experiencias generales para tener una idea de cómo se desempeñan en diferentes situaciones. Pero su información fue útil, gracias – Zubair

Cuestiones relacionadas