Me estoy quedando sin memoria en Java debido a algunas listas y conjuntos muy grandes creados en el transcurso de una transacción y repetidos una sola vez al final de la transacción. ¿Hay alguna biblioteca que proporcione colecciones de Java que puedan poner en cola sus contenidos serializables en el disco cuando el tamaño de la colección excede un umbral determinado?Colecciones de Java que se almacenan en el disco
Respuesta
Usted podría intentar algo así como ehcache y su opción overflowToDisk
como sé Ehcache no tiene lógica que sondear (obtener + eliminar) elementos de la caché, de acuerdo con la documentación veo solo los métodos #get(). Quizás sepa cómo puedo implementar tal funcionalidad usando ehcache? – MeetJoeBlack
No voy a publicar código de ejemplo, ya que sería demasiado largo, pero así es como lo he hecho antes:
- Extend
LinkedBlockingQueue
. - Anula sus métodos
offer
,put
,poll
,take
yremove
. Ejemplo: si la superclase 'offer
devuelve falso (capacidad alcanzada), luego Empezaría a serializar en el disco. - Asimismo, en la implementación
take
, comprueba si tiene algún elemento presente en la memoria y, si no, y luego comienza a leer del disco (y elimina el primer registro leído porque ahora residirá en la memoria; o puede leer registros en lotes, por supuesto). - Asigne a cada instancia de dicha cola un identificador de sistema de archivos seguro, para que pueda usarlo para crear un nombre de archivo seguro para el sistema de archivos. Además, para llevarlo más lejos, probablemente usaría el directorio de inicio del usuario actual como un lugar para que estas colas se serialicen en el disco.
De esta forma, el 99% de su cola serializada en el disco está lista, y usted solo pone su funcionalidad adicional exactamente en los lugares correctos. Necesitaría leer a fondo la documentación de la interfaz BlockingQueue
de Java, pero bueno, vale la pena su tiempo porque solo agregará ese poco de funcionalidad adicional que necesita, en lugar de escribir todo desde cero.
Espero que esto ayude.
- 1. ¿Cómo se almacenan los datos en una base de datos MongoDB en el disco?
- 2. ¿Colección de Java que pagina al disco cuando se llena?
- 3. colecciones java vs mapa en colecciones framework
- 4. ¿Dónde se almacenan las clases de Java en Oracle?
- 5. Dónde se almacenan los tipos de valores en (C#) Colecciones genéricas
- 6. Colecciones Java que mantienen el orden de inserción
- 7. ¿Cómo se almacenan los objetos Java en HttpSession?
- 8. ¿Puedes evitar que la memoria se canse en el disco?
- 9. Colecciones de Java con el comodín
- 10. ¿Dónde se almacenan las variables locales finales de Java?
- 11. ¿Dónde se almacenan los atributos de Java HttpSession?
- 12. Cómo agregar valores numéricos que se almacenan en cadenas?
- 13. ¿Cómo administrar objetos IDisposable que se almacenan en caché?
- 14. IIS 7.5 e imágenes que no se almacenan en caché
- 15. Java problema colecciones covarianza
- 16. Colecciones Java (estructura LIFO)
- 17. ¿Cómo se almacena btree en el disco?
- 18. Comparación de dos colecciones en Java
- 19. Java Commons Colecciones removeAll
- 20. Imágenes que se almacenan en la memoria caché y se comen mi Heap Space
- 21. rieles que almacenan información agregada
- 22. ¿Dónde se almacenan los paquetes del sistema Java?
- 23. Iteraciones sobre colecciones de Java en Scala
- 24. Colecciones de cadenas rápidas en Java
- 25. ¿Dónde se almacenan las variables de entorno en el registro?
- 26. Mejor tipo de seguridad en colecciones Java
- 27. Java Collections.checked *() versus colecciones genéricas
- 28. iPhone: ¿Dónde se almacenan NSUserDefaults?
- 29. ¿Dónde se almacenan las macros?
- 30. colecciones Java - conjunto de claves() vs entrySet() en el mapa
No es exactamente lo que podría estar buscando, eche un vistazo a Hadoop http://hadoop.apache.org/ – saugata
¿Existe algún motivo por el que no esté utilizando un RDBMS estándar para esto? De una manera, es la definición de lo que estás preguntando. Incluso las más livianas, como h2db, sqlite, estarían a la altura de la mayoría de las tareas. – dpb