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:
- 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.
- 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.
- 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:
- Se están descargando 10000 imágenes, mínimo.
- Se están generando 50000 miniaturas, mínimo.
- 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 tiempo y recursos, 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 (FcgidIOTimeout, FcgidIdleTimeout,…), 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.
Muchas gracias por el aporte,
Está muy bien escrito para entender la estructura general de una gran tienda y su funcionamiento sin entrar en la parte técnica, pero que te deja ver muy bien el proyecto en su conjunto y los problemas con los que te vas a encontrar, si lo hubiera leido unos meses antes me hubiera venido genial.
Ya he pasado por gran parte de los problemas que mencionas, con los csv, con la generacion de miniaturas al pasar de la cifra de 2.000 a 58.000, teniendo que cambiar finalmente de servidor a uno dedicado (y preparado con las aplicaciones de mejora de memoria mas habituales en tiendas prestashop, memcached, etc.. a ver si asi no surgen mas problemas), y en eso estoy ahora mismo, ya que aun intentando generar las miniaturas por tamaños (solo small, luego large, etc), el proceso me envia una y otra vez el error 500 y depurandolo el de memory allocated..
A ver si el resto ya fluye como el agua, hasta ahora a cada paso ha surgido algo y lo que eran 3 meses, llevamos ya 6 ..
Feliz año 2014 y gracias por compartir tus conocimientos 🙂
Montse
Hola,
Yo estoy incluyendo ahora un catálogo xml que se actualiza solo en mi web.
Podéis facilitarme algún módulo que agilice el proceso? :s
Un saludo,
Un post genial
Hola Rafael.
Lamento mucho comunicarte que no disponemos de un módulo, de momento, para importar catálogos en formato XML.
No obstante, si en un futuro lo incluimos (que lo hemos valorado y lo volveremos a sopesar) se incluiría dentro de los módulos Premium de nuestro curso de Prestashop. Puedes encontrar la información referente a este curso en este enlace.
Si te encuentras interesado en el curso, quizás te interesase más valorar la posibilidad de mover tu tienda con nosotros en un Hosting Avanzado, ya que este servicio, a parte del servicio de hosting y soporte para prestashop, también te da acceso a nuestro curso de Prestashop Premium y a todos sus recursos.
Saludos.
Hola Montse.
En primer lugar me alegro de que te haya gustado el artículo y espero que te haya servido de ayuda o, al menos, que te haya aclarado cualquier duda al respecto.
En cuanto al problema que aún estas teniendo sigue obedeciendo a los límites del servidor que comento en el artículo. Aunque tengas recursos de sobra y te encuentres en un servidor dedicado la configuración predeterminada de los servicios de un servidor ya contemplan estos límites, pero al encontrarte en un servidor solo para tí, ahora TU tienes la capacidad de editar esa configuración y aumentar esos límites hasta donde necesites, ya que no debes temer que otro usuario afecte a la estabilidad de tu sistema.
No puedo decirte como hacerlo por que depende de muchos factores (Sistema operativo, distribución, servicios instalados, versión de los servicios instalados, etc….)
Espero haberte aclarado esta duda.
Saludos.