Como ya sabemos, Magento Commerce (antes conocido como Enterprise), posee características que la diferencian de nuestra muy querida edición Open Source (Community Edition para los amigos).
En Magento 2 (Commerce) tenemos la posibilidad de dividir nuestra base de datos en 3, y la tienda seguirá funcionando.
Claramente, está pensado para grandes volúmenes de datos, ya que divide el catálogo y los customers de los quotes, y a su vez, de las tables sales_*.
Veamos cómo configurarlo y probarlo.
El punto de partida será una tienda ya instalada. Una vez hecho, vamos a crear dos nuevas bases de datos en blanco.
En mi caso, tengo una base de datos llamada magento2_ee_22 (si, a mi toc le molesta también el nombre).
Ahora bien, nos conectamos a nuestra base de datos y creamos las dos bases:
create database magento2_ee_22_quote;
create database magento2_ee_22_sales;
Si usaran diferentes usuarios, deberán también hacer el grant de permisos y demás detalles de configuración específicos de la base de datos.
Una vez que sabemos que tenemos las bases de datos, volvemos a la consola y ejecutamos los siguientes comandos:
magento setup:db-schema:split-quote --host="localhost" --dbname="magento2_ee_22_quote" --username="USUARIO_DB" --password="PASSWORD_DB"
magento setup:db-schema:split-sales --host="localhost" --dbname="magento2_ee_22_sales" --username="USUARIO_DB" --password="PASSWORD_DB"
En ambos casos veremos el siguiente mensaje cuando haya terminado la ejecución:
Migration has been finished successfully!
¿Cómo sabes si funcionó?.
Nos conectamos a nuestra base de datos y si todo salió bien, veremos que:
- La base de datos magento2_ee_22 quedó como 369 tablas.
- La base de datos magento2_ee_22_quote tiene 11 tablas.
- La base de datos magento2_ee_22_sales tiene 55 tablas.
Lo siguiente, es ver si funciona realmente.
Agrego un primer producto al Cart (hasta aquí se usó la base de datos principal para leer el producto y la base de datos del quote para almacenarlo y crear mi carrito).
Avanzamos hacia el checkout para finalizar nuestra compra.
Todo parece haber funcionado correctamente. Vayamos ahora a la base de datos.
Como vimos al comienzo, tenemos nuestras 3 bases de datos. La base de datos de quotes con sus 11 tablas.
Y si reviso qué información hay en la tabla quote, veo que:
Efectivamente, mis datos aparecieron.
Veamos ahora la base de datos de sales.
Aquí estarán nuestras 55 tablas. Si reviso la tabla sales_order, veré:
Mi primera orden se guardó correctamente, pero como soy muy desconfiado, reviso también el backend.
Efectivamente, todo está donde debe.
Dividir la base de datos no es para cualquier tienda, así como implementar replicación (sólo por performance) tampoco lo es. En muchos casos puede ser el equivalente a estar matando moscas con cañones.
Hay que tener en cuenta que si vamos a necesitar y hacer uso de la división de base de datos, posiblemente terminemos con replicación. Para esto, aparte de los conocimientos específicos de base de datos, es recomendable pasar por este link.
Y si no queres tirarte de los pelos en tu extension cuando queres modificar y/o acceder una tabla una vez dividida la base de datos, hay que tener un poco de cuidado.
Aca tenes como manejarlo en el setup cuando queres modificar una tabla (ambos casos, una tabla de sales y una de checkout)
https://github.com/mailchimp/mc-magento2/blob/develop/Setup/InstallSchema.php#L205-L229