Importar CSV

A lo largo de este último año hemos hecho referencia, en numerosas ocasiones, al sistema de venta al por menor que más está creciendo en popularidad en nuestro país, el DropShipping.

Como ya sabemos, mediante DropShipping, podemos ofrecer a nuestros visitantes unos productos de los cuales no disponemos físicamente. Normalmente, y ya que carecemos de las limitaciones propias del almacenamiento y la logística para la distribución de nuestro catálogo, no solemos limitarnos a unos pocos productos, una selección de los productos mas interesante y/o rentables, sino que solemos ofrecer el catálogo completo que nos ofrece nuestro distribuidor o DropShipper. Esto significa que nuestro catálogo va a tener un tamaño muy considerable.

El DropShipping es solo un ejemplo en el que se interactúa con catálogos de gran tamaño, pero no es ni mucho menos el único. Otro ejemplo muy común es el de las librerías, que ofrecen todo el catálogo de una o varias editoriales, con todas las referencias que esto conlleva. En todos estos casos estaos hablando de comercios online que gestionan varios miles de artículos (incluso decenas de miles) en sus bases de datos.

Este artículo ha sido redactado teniendo en mente todos esos catálogos cuya gestión manual puede ser un suplicio o un autentico castigo. Vamos a tratar de dar algunos consejos para su gestión y a aclarar algunos puntos que crean bastante confusión entre los usuarios de Prestashop.

 

¿Qué límites interpone Prestashop para el tamaño del catálogo?

Prestashop no limita, en ningún aspecto, el tamaño del catálogo que se puede gestionar. Puedes tener una tienda virtual que distribuya un único producto, como también otra que distribuya 100.000 productos.

Un elemento, sea producto, categoría, cliente, o cualquier otra entidad con la que trabaje Prestashop, es almacenado en una base de datos relacional, generalmente MySQL. A parte de esto, normalmente cada producto lleva asociada una imagen como mínimo, pero pudiendo ser mas de una. Estas imágenes se almacenan en una carpeta de la instalación de Prestashop llamada “img/”.

De la afirmación anterior podemos deducir que cuantos más elementos registremos en la tienda, mayor será el tamaño de la base de datos y más espacio será ocupado por las imágenes y archivos adjuntos de dichos elementos. Por lo tanto el límite de productos que podremos gestionar en nuestro catálogo estará acotado principalmente por la cantidad de espacio disponible en nuestro hosting.

Para entender un poco mejor cuanto espacio va a ocupar el catálogo que tenemos en mente deberemos tener en cuenta lo siguiente:

  1. Imágenes: Normalmente se asigna una imagen por elemento. Esa imagen debería estar optimizada para la web, es decir, con unas dimensiones no superiores a 600 x 600px, lo que implica que el espacio que ocuparía no sería superior a 30-40kb.
  2. Miniaturas: Prestashop genera una serie de miniaturas (para optimizar los periodos de carga y velocidad de navegación) que por defecto son 5 para los productos, 4 para las categorías, 3 para fabricantes y proveedores. El tamaño total de todas las miniaturas normalmente serán de unos 20-30kb.
  3. Textos: Los textos correspondientes al elemento en cuestión y que se alojan en la base de datos también ocupan espacio, aunque este realmente sea insignificante comparado con los conceptos anteriores. No obstante, el espacio ocupado por la información típica de un producto, y para tres idiomas, en la base de datos es de unos 3-5 kb

Basándonos en estas estimaciones, podemos decir que el espacio aproximado que requiere un producto típico en una instalación típica de Prestashop es de unos 40kb+30kb+5kb = 75kb, es decir, unos 13000 productos por cada GB de espacio web.

 

¿Cómo crear el catálogo en mi tienda online Prestashop?

Obviamente, lo primero que tenemos que hacer es crear la información relativa a nuestro catálogo en nuestra tienda virtual.

Si la cantidad de productos fuese una cantidad moderada (decenas de productos) podríamos servirnos de los formularios de creación a los que accederemos desde el Backoffice de nuestra tienda. Estos formularios nos ofrecen un entorno amigable y fácil de usar para generar datos en nuestra base de datos. Cada uno de los objetos que podemos crear (categorías, productos,…) dispondrán de su propia sección en nuestra administración que nos solicitará toda la información necesaria de una manera clara y explícita.

Pero este no es el caso que nos ocupa, pues el catálogo que tengo en mente no tiene decenas de productos, sino miles de ellos, y obviamente registrar los elementos uno por uno puede ser una tarea titánica. En su lugar vamos a servirnos de la capacidad de importación que nos ofrece prestashop.

Para poder hacer uso de este sistema tenemos que disponer de nuestro catálogo en un archivo. Lo mas normal y habitual es que nuestro propio proveedor sea quien nos facilite ese archivo y lo hará en formato CSV principalmente, aunque puede facilitárnoslo en otros formatos, como XML, XLS o XLSX, a partir de los cuales generar nosotros el equivalente en CSV, ya que Prestashop sólo opera con este último.

Una vez dispongamos de nuestro catálogo en CSV tendremos que importarlo en nuestra tienda. Podemos hacerlo siguiendo las instrucciones que mostramos en este otro artículo.

Un punto importante que debemos tener en cuenta a la hora de utilizar un catálogo de un proveedor es el relacionado con los títulos y textos de dicho artículo. Piensen que si su proveedor le ha facilitado ese archivo con esos textos a usted, seguramente haya hecho exactamente lo mismo con las decenas o cientos de distribuidores que tenga, muchos de los cuales también usarán ese archivo para una tienda online. En este caso habrá varias personas, junto con usted, que ofrecerán el mismo contenido en su página web. Esta situación suele derivar en una penalización, por parte de los buscadores (como Google), en el posicionamiento natural de dicho contenido, ya que lo considera como un contenido plagiado y no original. Por este motivo nosotros recomendamos que no se utilicen los textos tal cual los ofrece el proveedor y que sean editados y personalizados antes, o después, de importarlos.

También tenemos que saber que el proceso de importación puede darnos algún que otro quebradero de cabeza. Veamos por que.

 

¿Qué tipo de problemas puedo tener al importar mi catálogo?

Lo primero que debemos conocer es como funciona el proceso de importación y para ello debemos tener en cuenta la información que estamos importando. En este enlace puedes ver los datos que se pueden indicar en el CSV. Como puedes ver hay muchos, pero la mayoría son opcionales.

Un caso particular que afecta mucho a este proceso es el echo de indicar o no una (o varias) URL de imagen. En caso de que la hayamos indicado, durante el proceso de importación, Prestashop accederá a la URL donde se encuentra la imagen, la copiará y generará las miniaturas correspondientes. Dicho así no parece gran cosa, pero ahora vamos trasladar esto a una importación de 10000 artículos… la cosa cambia:

  1. Se están descargando 10000 imágenes, mínimo.
  2. Se están generando 50000 miniaturas, mínimo.
  3. Se está insertando la información de 10000 productos, que pueden ser 30000-40000 inserciones en la base de datos.

Ya estamos hablando de acciones nada despreciables. El problema es que hacer todo esto requiere tiemporecursos, y la mayoría de los hostings se encuentran alojados en servidores compartidos, donde el tiempo de CPU y los recursos (como RAM) son fijos y están compartidos por todos los usuarios de dicho servidor. En este escenario, un usuario no puede (ni debe) abusar de las capacidades del servidor perjudicando a los demás usuarios.

Para estos casos la configuración de los servidores suelen contemplar límites para las ejecuciones de scripts. Estas limitaciones suelen ser de estos tipos:

  • Limites de tiempo, donde se interrumpen las ejecuciones que sobrepasen el limite de tiempo permitido. Estas limitaciones se pueden definir tanto a nivel de apache (TimeOut), PHP (max_execution_time), CGI/FastCGI (FcgidIOTimeoutFcgidIdleTimeout,…), etc…
  • Limites de memoria, donde se limita la cantidad de memoria que un proceso puede utilizar durante su ejecución (memory_limit)
  • Limites de consumo de recursos, que se definen para un usuario en lugar de para un script, es decir, la cantidad de recursos hardware (memoria RAM, tiempo de asignación de CPU,…) que son usados por todos los procesos lanzados por un usuario del servidor.

Estas limitaciones son las que hacen que las importaciones de CSV, en ocasiones, se vean interrumpidas arrojando errores como Fatal Error: … ó Internal Server Error.

En estos casos lo que debemos hacer es dividir el archivo CSV que queremos importar en porciones mas pequeñas, que podamos importar de manera escalonada, realizando varias importaciones mas pequeñas, en lugar de una importación mas grande.

En el caso de que como administrador considere estas limitaciones como un serio impedimento para su trabajo con la tienda debería empezar a considerar la posibilidad de utilizar, en lugar de un servicio compartido, un servicio dedicado o semidedicado (como un VPS) en el que usted, al ser el único usuario de dicho entorno, pueda decidir deshabilitar o aumentar esos límites hasta el nivel que necesite.

Sin más, espero que este artículo les haya sido de ayuda para conseguir una imagen mas clara de como mantener un catálogo de gran tamaño y de como funciona el proceso de importación de CSV.