En el vasto mundo del desarrollo web y los servicios en la nube, la elección de la tecnología de almacenamiento de datos es una decisión crítica que impacta directamente en el rendimiento, la escalabilidad y la fiabilidad de una plataforma. Para una empresa del tamaño y la complejidad de Wix, con miles de microservicios operando simultáneamente, esta elección no es trivial. A diferencia de los frameworks de UI que evolucionan rápidamente, las bases de datos tienden a cambiar más lentamente, y la adopción de nuevas tecnologías requiere una cuidadosa consideración debido al riesgo inherente de perder datos cruciales.

Aunque migrar la base de datos principal de procesamiento de transacciones en línea (OLTP) es raro para organizaciones grandes, la arquitectura de microservicios en Wix permite una mayor flexibilidad. Cada servicio puede, hasta cierto punto, elegir la forma en que persiste sus datos, siempre y cuando la tecnología esté probada y sea fiable. Es por ello que, si bien una tecnología puede ser robusta en otros entornos, debe ser validada y puesta a prueba dentro de la propia organización antes de ser adoptada ampliamente.

En Wix, esta realidad se manifiesta en un panorama de datos diverso. Aunque MySQL sigue siendo la base de datos principal y preferida después de más de una década de uso, la existencia de 2000 microservicios en producción impulsa la necesidad de otras soluciones de almacenamiento. Estas soluciones se eligen por diversas razones, que van desde diferentes casos de uso de API (como soporte para CRUD, búsqueda de texto libre) hasta la compatibilidad con diferentes stacks tecnológicos (JVM vs. Node.js) o requisitos técnicos más demandantes, como la necesidad de un almacenamiento con escalabilidad infinita.
A continuación, exploraremos las cinco tecnologías de almacenamiento de datos clave que Wix utiliza en sus microservicios, cada una con sus propios casos de uso específicos, características únicas, fortalezas y debilidades, tal como se aplican dentro de la infraestructura de Wix.
- MySQL: El Caballo de Batalla Confiable
- MongoDB: Flexibilidad para Datos Dinámicos
- Amazon DynamoDB: El Almacén Clave-Valor Ultrarrápido
- Elasticsearch: Potencia para la Búsqueda Relevante
- Amazon Simple Storage Service (S3): Almacenamiento Ilimitado de Objetos
- Comparativa de Tecnologías de Almacenamiento en Wix
- Preguntas Frecuentes sobre las Bases de Datos de Wix
MySQL: El Caballo de Batalla Confiable
MySQL ha sido la base de datos principal en Wix durante más de 10 años y sigue siendo la opción por defecto para muchos servicios. Pertenece a la categoría de bases de datos relacionales, junto a otras como PostgreSQL, MariaDB, SQL Server, Oracle, Db2 o SQLite.
¿Cuándo usar MySQL? En Wix, se elige MySQL cuando ya es una tecnología ampliamente utilizada en la organización, cuando se necesitan tanto tablas relacionales (con esquema definido) como colecciones JSON (sin esquema predefinido), o cuando se optimiza para escrituras sobre lecturas y se requiere una fuerte consistencia de lectura.
Sus ventajas principales radican en su madurez y fiabilidad, su alto uso y estar 'battle-tested'. Ofrece un rendimiento rápido en lecturas y ha mejorado significativamente su soporte para JSON/Documentos a partir de MySQL 8. Además, con herramientas como ProxySQL, se puede lograr consistencia de escritura entre múltiples centros de datos.
Sin embargo, MySQL presenta desventajas importantes en cuanto a escalabilidad, ya que no escala horizontalmente de forma nativa y está limitado por el espacio en disco. También puede tener problemas de consistencia y replicación si no se utiliza una solución como ProxySQL.
Casos de Uso de MySQL en Wix:
- Soporte JSON (Pre-MySQL 8): Muchos servicios JVM (Scala/Java) solían almacenar datos en tablas relacionales de MySQL. Para evitar cambios frecuentes de esquema, gran parte del contenido se guardaba como tipo BLOB, aunque los joins SQL eran raros y los datos a menudo estaban desnormalizados.
- Soporte JSON y Simple Data Layer (SDL): SDL es una infraestructura interna diseñada para acelerar el desarrollo y reducir la carga cognitiva al persistir estructuras de datos de documentos. Utiliza MySQL 8 con el tipo de dato JSON. MySQL fue elegido por la experiencia de los DBAs de Wix, la infraestructura existente para backups, migraciones e indexación, y el soporte de consistencia y disponibilidad de ProxySQL. SDL facilita un patrón común en microservicios: la necesidad de una estructura de datos de documento incrustada no relacional.
- Soporte Multi DC y Replicación con ProxySQL: ProxySQL se utiliza para enrutar sin problemas el tráfico de escritura a los clústeres MySQL activos en el centro de datos principal, asegurando la consistencia y evitando la pérdida de datos. También gestiona la distribución de lectura entre réplicas, proporcionando alta disponibilidad y rendimiento.
MongoDB: Flexibilidad para Datos Dinámicos
MongoDB es otra base de datos NoSQL popular utilizada en Wix, conocida por su enfoque basado en documentos JSON. Otras bases de datos con soporte JSON o NoSQL similar incluyen CouchDB.
¿Cuándo usar MongoDB? Wix elige MongoDB cuando se espera que el esquema de datos cambie y evolucione con frecuencia, cuando se trabaja con contenido JSON dinámico, y cuando mantener los datos desnormalizados y aceptar consistencia eventual no es un problema.
Sus principales ventajas son la flexibilidad que ofrecen los documentos Schemaless, donde el número de campos, contenido y tamaño puede variar entre documentos en la misma colección, y la facilidad para escalar horizontalmente mediante sharding.
Como desventajas, MongoDB tiende a tener un alto uso de memoria debido a la denormalización de datos. Existe un límite de tamaño por documento (16MB). Además, su solución de replicación puede no ser óptima (los datos no se pueden re-replicar después de una falla) y puede haber problemas de consistencia al cambiar el tráfico a otro centro de datos (no hay remasterización automática).
Casos de Uso de MongoDB en Wix:
- Wix Data: Este servicio permite a cualquier usuario de Wix tener su propia base de datos de documentos ('Database as a Service'). Utiliza MongoDB para almacenar datos, elegido por su capacidad para almacenar cualquier documento sin esquema (JSON). En pruebas, MongoDB 3.x mostró un rendimiento 2X superior en escrituras y lecturas comparado con MySQL 5.7.6 (que aún no tenía soporte nativo para JSON). Recientemente, el equipo de Wix Data ha escalado un solo clúster de MongoDB para soportar 1 millón de sitios.
- Wix Blog: El backend de los microservicios de Wix Blog, desarrollados en Node.js, utiliza MongoDB para almacenar varios TB de publicaciones de blog. En las primeras etapas del proyecto, el esquema evolucionaba rápidamente, y la naturaleza schemaless de MongoDB facilitó la adición de nuevos campos. Los datos se mantienen mayormente desnormalizados, ya que las operaciones de join ($lookup) en MongoDB no son muy convenientes.
Amazon DynamoDB: El Almacén Clave-Valor Ultrarrápido
DynamoDB, el servicio de base de datos clave-valor de Amazon, es otra tecnología clave en la arquitectura de Wix. Otras opciones en esta categoría incluyen Cassandra, HBase o Redis.
¿Cuándo usar DynamoDB? Se utiliza cuando se necesita un almacén clave-valor simple sin patrones de consulta complejos, para almacenar datos con tiempo de vida (expirables), y para aplicaciones con throughput bajo a medio, ya que las escrituras son caras y las lecturas consistentes cuestan el doble que las lecturas eventualmente consistentes.
Las ventajas de DynamoDB son su rendimiento rápido a cualquier escala (siempre que se aprovisione suficiente capacidad), la ausencia de límite de almacenamiento total, la naturaleza schemaless (se puede definir esquema por ítem, no por tabla), el soporte para replicación multi-master en múltiples regiones, la característica TTL (Time To Live) por ítem para datos que expiran, y los eventos CDC (Change Data Capture) integrados (DynamoDB Streams).
Entre sus desventajas se encuentran un límite de tamaño por ítem (400KB), opciones de consulta limitadas (número restringido de índices), y el throttling en picos de throughput o con 'hot keys'.
Casos de Uso de DynamoDB en Wix:
- KVStore + Cache: DynamoDB es el backbone para la abstracción de caché KV-store en Wix. Se utiliza en implementaciones de caché basadas en CDC de DynamoDB.
- Wix Chat: Este servicio, que permite la comunicación instantánea entre dueños de sitios y visitantes, migró recientemente de Cassandra a DynamoDB para manejar el crecimiento sin aumentar los equipos de DBA y operaciones. Almacenan mensajes de chat, indicaciones (enviado/visto/fallido) y datos sobre visitantes online, aprovechando la característica TTL de DynamoDB para datos temporales.
- Wix Contacts: Parte de la suite de herramientas de negocio Ascend, este servicio gestiona los contactos de los dueños de sitios. DynamoDB se utiliza para orquestar trabajos masivos basados en eventos, guardando el estado y offset actual del trabajo. Cada etapa del trabajo se avanza enviando un evento Kafka, y los datos relevantes se recuperan de DynamoDB.
Elasticsearch: Potencia para la Búsqueda Relevante
Elasticsearch es un motor de búsqueda distribuido utilizado por Wix para funcionalidades de búsqueda y análisis de texto. Otros competidores en esta área son Apache Solr, Splunk o Amazon CloudSearch.
¿Cuándo usar Elasticsearch? Se emplea cuando se necesita realizar búsquedas difusas (fuzzy search) o con resultados rankeados, y cuando se tiene otro almacén de datos como fuente de verdad, poblando Elasticsearch como una vista materializada.
Sus ventajas clave incluyen la facilidad para escalar horizontalmente mediante index sharding, una API de búsqueda rica y potente, y la capacidad de realizar consultas analíticas utilizando agregaciones.
Las desventajas de Elasticsearch se manifiestan en la creación de índices con un número predefinido de shards, lo que requiere migrar a un nuevo índice (normalmente con la API ReIndex) si se necesitan más. También puede experimentar problemas de rendimiento en escalas muy grandes (superiores a 1TB con cientos de nodos y shards).
Casos de Uso de Elasticsearch en Wix:
- Wix Search: Este servicio permite buscar dentro de cualquier sitio Wix de forma predeterminada, proporcionando una API genérica para indexar por sitio y aplicaciones instaladas. También ofrece servicios de búsqueda personalizados, actuando básicamente como un proxy a la infraestructura de Elasticsearch, permitiendo a otros equipos de Wix crear y gestionar sus propios índices.
Amazon Simple Storage Service (S3): Almacenamiento Ilimitado de Objetos
Aunque no es una base de datos en el sentido tradicional, Amazon S3 (y su equivalente en Google Cloud Storage, Azure Blob Storage) es una pieza fundamental en la estrategia de almacenamiento de datos de Wix para objetos grandes y archivos binarios.
¿Cuándo usar S3? Se utiliza cuando se necesita almacenar objetos binarios o archivos de gran tamaño (hasta 5TB cada uno), o cuando la cantidad de datos a almacenar es muy grande (>10TB), crece continuamente y necesita ser recuperada (no eliminada).
Las ventajas de S3 son su soporte para un throughput muy alto, y lo más importante, su escalabilidad infinita sin límite en la cantidad de almacenamiento.
Como desventajas, S3 no ofrece soporte para consultas, solo recuperación basada en clave. La latencia para objetos pequeños puede ser de 100-200 ms, aunque esto puede mitigarse con estrategias de caching.
Casos de Uso de S3 en Wix:
- Wix Media: Este servicio gestiona todos los archivos multimedia subidos por los usuarios de Wix. Estos archivos se almacenan y acceden cuando un visitante entra al sitio. Para asegurar la máxima disponibilidad y menor latencia de recuperación, los archivos se almacenan y replican entre Amazon S3 y Google GCS, y también entre regiones dentro del mismo proveedor de nube. Un proceso dedicado mueve archivos a clases de almacenamiento más económicas si no se han accedido durante un tiempo.
- Wix Editor: El equipo de backend del Editor de Wix es responsable del almacenamiento y rápida recuperación de todas las páginas de los sitios Wix durante la edición. Una página de sitio es un archivo JSON inmutable; cada cambio crea un nuevo archivo JSON que se inserta. Hace unos años, migraron las páginas de sitio de MySQL a S3 principalmente por la escalabilidad infinita que S3 garantizaba (MySQL no manejaba bien escalas superiores a 10TB). Para mejorar la latencia de S3 (30 ms mediana, 400 ms en p99), añadieron una capa de caching write-through.
Comparativa de Tecnologías de Almacenamiento en Wix
Para resumir, aquí tienes una tabla comparativa de las cinco tecnologías de base de datos y almacenamiento utilizadas por Wix:
| Tecnología | Tipo Principal | Casos de Uso Principales en Wix | Ventajas Clave | Desventajas Clave |
|---|---|---|---|---|
| MySQL | Relacional / JSON | Datos de servicios JVM, SDL, Datos que requieren consistencia fuerte y estructura definida. | Maturidad, Fiabilidad, Rendimiento en lectura, Soporte JSON (MySQL 8), Consistencia Multi-DC (con ProxySQL). | Escalabilidad horizontal limitada, Problemas de replicación sin ProxySQL. |
| MongoDB | Documento (JSON) | Wix Data, Wix Blog, Datos con esquema cambiante, Contenido dinámico, Consistencia eventual aceptable. | Flexibilidad (Schemaless), Escalabilidad (Sharding). | Alto uso de memoria, Límite de tamaño de documento (16MB), Replicación no óptima, Problemas de consistencia al cambiar DC. |
| DynamoDB | Clave-Valor | KVStore, Wix Chat, Wix Contacts, Datos expiables (TTL), Patrones de consulta simples, Alta escala de throughput provisionado. | Rendimiento rápido a escala, Sin límite de almacenamiento, Schemaless (por ítem), Replicación Multi-master, TTL, CDC integrado. | Límite de tamaño de ítem (400KB), Opciones de consulta limitadas, Throttling. |
| Elasticsearch | Motor de Búsqueda | Wix Search, Búsqueda de texto libre, Búsqueda difusa, Agregaciones analíticas. | Escalabilidad horizontal (Sharding), API de búsqueda rica, Agregaciones. | Migración de índice compleja para cambiar shards, Problemas de rendimiento en escalas muy grandes. |
| S3 | Almacenamiento de Objetos | Wix Media, Wix Editor (páginas de sitio), Almacenamiento de archivos binarios grandes, Datos que crecen masivamente y requieren recuperación. | Alto Throughput, Escalabilidad Infinita. | Sin soporte de consulta (solo clave), Latencia (para objetos pequeños). |
Preguntas Frecuentes sobre las Bases de Datos de Wix
Aquí respondemos algunas preguntas comunes sobre cómo Wix gestiona sus datos:
¿Por qué Wix no utiliza una única base de datos para todos sus servicios?
Con 2000 microservicios, cada uno tiene necesidades y patrones de acceso a datos únicos. Una única tecnología no puede optimizar eficientemente para todos los casos de uso, ya sea la necesidad de un esquema relacional estricto, flexibilidad de documentos sin esquema, búsqueda de texto completo, almacenamiento de objetos gigantes o un simple almacén clave-valor de alto rendimiento. El enfoque políglota permite a cada servicio elegir la herramienta más adecuada para su tarea específica, mejorando el rendimiento y la eficiencia.
¿Cuál es la base de datos principal en Wix?
Aunque se utilizan varias tecnologías, MySQL sigue siendo la base de datos principal y más utilizada en la organización, especialmente para servicios JVM tradicionales y donde se requiere una fuerte consistencia y estructura relacional o semi-estructurada (con soporte JSON).
¿Cómo maneja Wix la escalabilidad con estas bases de datos?
Wix utiliza las capacidades de escalabilidad nativas de cada tecnología. Por ejemplo, MongoDB se escala con sharding, DynamoDB escala aprovisionando capacidad, Elasticsearch escala horizontalmente con index sharding, y S3 ofrece escalabilidad infinita por diseño. Para MySQL, que no escala horizontalmente de forma nativa, se apoyan en estrategias como la desnormalización, el uso de JSON, y herramientas como ProxySQL para gestionar la carga y la replicación.
¿Cómo deciden qué base de datos usar para un nuevo microservicio?
La decisión se basa en los requisitos específicos del microservicio: el patrón de acceso a datos (CRUD, búsqueda, clave-valor), la estructura de los datos (esquema fijo, dinámico, objetos grandes), las necesidades de consistencia (fuerte, eventual), el volumen de datos, el throughput esperado y la experiencia del equipo con las diferentes tecnologías.
¿Se migran datos entre estas bases de datos?
Sí, como se menciona en los ejemplos (Wix Chat de Cassandra a DynamoDB, Wix Editor de MySQL a S3), Wix realiza migraciones cuando las necesidades de un servicio superan las capacidades de la tecnología actual o cuando una alternativa ofrece mejores ventajas para un caso de uso particular y escala.
La elección de múltiples tecnologías de base de datos en Wix refleja un enfoque pragmático para abordar la complejidad y diversidad de los requisitos de almacenamiento en una plataforma a gran escala. Cada tecnología aporta sus fortalezas únicas, permitiendo a los miles de microservicios de Wix operar de manera eficiente y escalable, desde la gestión de datos estructurados y transaccionales hasta el manejo de contenido dinámico, búsquedas complejas y almacenamiento masivo de objetos.
Si quieres conocer otros artículos parecidos a Las Bases de Datos Detrás de Wix puedes visitar la categoría Bases de datos.

Aprende mas sobre MySQL