es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se pudo almacenar la celda en la caché

Estoy utilizando varios archivos csv para poblar las tablas en una base de datos. Como estoy en Symfony, creé un comando que lee archivos de un directorio dado en un orden definido. Un archivo csv equivale a una tabla en mi BD. Los tamaños de archivo difieren de un archivo a otro y pueden contener más de 65 mil líneas.

Mi script ha estado funcionando localmente durante 3 días, avanza pero es pesado.

En un servidor de recetas, mi script se detiene justo después de unos pocos minutos mostrando el error

CRÍTICO: Error mientras se ejecutaba el comando “symfony-nombre-comando”. Mensaje: “No se pudo almacenar la celda BB18118 en caché” {“excepción” : “[objeto] (PhpOffice \ PhpSpreadsheet \ Exception (código: 0): No se pudo almacenar la celda BB18118 en caché en el proyecto / vendor / phpoffice / phpspreadsheet / src / PhpSpreadsheet / Colección / Celdas.php: 393)

Estoy usando Symfony FileSystemAdapter, SimpleCacheBridge (1.1)

En mi comando Symfony hago

$ pool = new FilesystemAdapter ();
$simpleCache = new SimpleCacheBridge ($ pool);
Configuración :: setCache ($ simpleCache); // PhpOffice \ PhpSpreadsheet \ Settings 

// bucle directorios y llame al servicio Symfony ...

En el servicio Symfony
“`
$ spreadSheet = IOFactory :: load ($ csvPath);
$ sheet = $ spreadSheet-> getActiveSheet ()-> toArray ();

// bucle hoja y operaciones de base de datos …

Stack:
PHP: 7.4
SF: 5.3.9
phpspreadsheet: 1.18
SimpleCache: 1.1

¿Alguna ayuda por favor?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el error que está encontrando está relacionado con problemas de caché con phpspreadsheet de phpOffice. El mensaje de error menciona específicamente que el script no pudo almacenar una celda en la caché. Dado que sus archivos CSV son bastante grandes, es posible que el script se quede sin memoria o tenga otras limitaciones de recursos en el servidor.

    Para resolver este problema, hay algunas estrategias que podría probar:

    1. Aumentar la cantidad de memoria asignada a PHP en el servidor: si tiene acceso a la configuración del servidor, podría intentar aumentar el valor de la configuración “memory_limit” en su archivo php.ini. Esto puede ayudar al script a procesar los grandes archivos CSV con mayor fluidez.
    2. Implementar una estrategia de caché diferente: puede ser que la estrategia de caché actual no funcione bien con los grandes archivos que está procesando. Podría probar a utilizar una biblioteca o estrategia de caché diferente para ver si esto resuelve el problema. Por ejemplo, podría intentar utilizar directamente el componente Cache de Symfony, en lugar de depender de una biblioteca de enlace.

    3. Optimizar su script para mejorar el rendimiento: puede haber formas de optimizar su script para que se ejecute más eficientemente. Por ejemplo, podría intentar procesar los archivos CSV en trozos más pequeños, en lugar de leer todo el archivo en memoria de una sola vez. También podría experimentar con diferentes estrategias para realizar operaciones de base de datos, como el uso de inserciones por lotes en lugar de inserciones individuales.

    En general, puede requerir un poco de experimentación y pruebas para encontrar la solución óptima para su caso de uso. Sin embargo, con un poco de esfuerzo, debería poder ejecutar su comando Symfony de forma fluida y eficiente.

Comments are closed.