MDH GROUP · BLOG

Particionado y Sharding de MySQL para altos volúmenes de clics en Affilentra autohospedado: Archivado, Tablas calientes y estrategias por comerciante

Altos volúmenes de clics y conversiones sobrecargan rápidamente las bases de datos relacionales: tablas en crecimiento, consultas más lentas y retrasos en el cálculo de comisiones. Para operadores de Affilentra que prefieren control self‑hosted y licencias perpetuas, se requieren estrategias MySQL escalables.

← Todos los artículos

Particionado y Sharding de MySQL para altos volúmenes de clics en Affilentra autohospedado: Archivado, Tablas calientes y estrategias por comerciante

Introducción

Altos volúmenes de clics y conversiones sobrecargan rápidamente las bases de datos relacionales: tablas en crecimiento, consultas más lentas y retrasos en el cálculo de comisiones. Para operadores de Affilentra que prefieren control self‑hosted y licencias perpetuas, se requieren estrategias MySQL escalables. Este artículo describe patrones pragmáticos — particionado, sharding por tiempo, tablas calientes, canalizaciones de archivo y sharding por comerciante — con foco en la integridad de los datos y en un cálculo de comisiones trazable.

Principios de diseño antes de la implementación

  • Separar roles: Operadores del software, comerciantes y partners mantienen responsabilidades claras; el acceso a datos y la soberanía sobre los datos del comerciante deben estar reflejados.
  • Preservar la integridad del tracking: Los eventos de tracking deben ser idempotentes e infalsificables; los archivos no deben influir en los procesos de facturación.
  • Caliente vs. frío: Mantener los datos actuales con buen rendimiento y archivar los datos antiguos de forma compacta.
  • Consultas uniformes: Las consultas para el cálculo de comisiones deben ser deterministas y reproducibles — también después del archivado.

Particionado: basado en tiempo y por merchant

El particionado reduce I/O y mejora el Partition Pruning cuando las consultas usan la clave de partición. Dos variantes probadas:

Particionado temporal (Range)

Buena elección para logs de clics y conversiones: particiones por mes o semana. Ventaja: archivado sencillo de periodos completos.

Ejemplo práctico (conceptual):

CREATE TABLE clicks (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  merchant_id INT NOT NULL,
  partner_id INT NULL,
  click_uuid CHAR(36) NOT NULL,
  created_at DATETIME NOT NULL,
  payload JSON,
  UNIQUE KEY ux_click_uuid (click_uuid)
)
PARTITION BY RANGE (TO_DAYS(created_at)) (
  PARTITION p_2024_01 VALUES LESS THAN (TO_DAYS('2024-02-01')),
  PARTITION p_2024_02 VALUES LESS THAN (TO_DAYS('2024-03-01'))
);

Importante: Las consultas deben incluir WHERE created_at BETWEEN ... o WHERE created_at >= ... para que MySQL use Partition Pruning.

Particionado por Merchant o LIST

Para pocos comerciantes muy grandes puede ser útil el particionado LIST por merchant_id o una combinación (subpartitioning). Ventaja: I/O caliente aislado por comerciante.

Sharding: distribución horizontal

El particionado ayuda dentro de una base de datos. Con cargas extremas se necesita sharding horizontal: múltiples instancias MySQL, gobernadas por una capa de enrutamiento en Affilentra (o un proxy).

  • Elección de clave: merchant_id como Shard‑Key permite aislamiento por comerciante; alternativamente Hash(partner_id) para distribuir la carga.
  • Topología: comerciantes pequeños en un shard compartido, comerciantes de alto volumen en shards propios (DB de inquilino único o esquema).
  • Metadatos centrales: mantener centralizados los perfiles de partners, reglas de programa y logs de facturación, para que los cálculos sigan siendo consistentes.

Concepto Affilentra: la separación de roles permite aislamiento por comerciante sin cambiar la lógica de negocio — ideal para una migración gradual a sharding.

Tablas calientes & arquitectura nearline

Regla práctica: solo los últimos N días (p. ej. 7–30 días, dependiendo del negocio) permanecen en las tablas calientes; los datos más antiguos los mueve a un archivo compacto optimizado para consultas.

  • Tabla caliente: misma estructura que la tabla en vivo, optimizada para inserts rápidos y lecturas frecuentes.
  • Tabla fría/archivo: comprimida, posiblemente con otra Storage‑Engine o en hardware con mayor latencia.
  • Intercambio de particiones: en MySQL puede intercambiar particiones (EXCHANGE PARTITION) o mover rápidamente con RENAME/ALTER — minimiza el tiempo de inactividad.

Pipelines de archivo: mover de forma segura y verificable

Flujo de trabajo de archivado en pasos:

  1. Marcar: marque Clicks/Conversions que aún son relevantes para facturación (p. ej. status = 'pending_settlement').
  2. Snapshot antes de mover: antes de mover datos, grabe un snapshot de settlement en una tabla separada, para que los cálculos sean reproducibles.
  3. Mover por lotes: desplace particiones completas o por lotes con IDs consistentes; use pasos atómicos (p. ej. RENAME + INSERT INTO ... SELECT) dentro de la misma BD cuando sea posible.
  4. Verificación & conciliación: compare contadores (Row‑Counts, Checksums) antes y después del movimiento; los errores deben tener una ruta de reversión.

Herramientas: pt‑archiver (Percona) o trabajos ETL a medida. Lo importante es comportamiento determinista y registro de cada cambio, para que la facturación sea auditable.

Reglas de integridad para el cálculo de comisiones

  • Eventos idempotentes: Evitar cálculos duplicados de clics y conversiones usando click_uuid únicos.
  • Estado de liquidación: Use campos de estado (pending, validated, paid). Archive solo registros con settled = true o genere una instantánea de liquidación inmutable.
  • Transacciones: Realice validaciones y el cálculo de comisiones dentro de transacciones controladas o flujos de trabajo distribuidos.
  • Registro de auditoría: Cada pago debería referenciar las IDs de clics y las instantáneas de conversiones utilizadas; esto facilita la conciliación después del archivado.

Estrategias por comerciante

Para comerciantes grandes se recomienda el aislamiento:

  • Esquema/BD propia: Alojar merchants con alto volumen en bases de datos separadas; reduce conflictos de replicación y copias de seguridad.
  • Particionamiento diferenciado: Dentro del esquema del merchant particionar adicionalmente por tiempo; así se pueden realizar archivados mensuales específicos por merchant.
  • Cuotas y SLA por merchant: Supervise I/O, bloqueos y tiempos de consulta por merchant; las decisiones de escalado deben basarse en costes y estado.

Affilentra soporta permisos por rol y hace factible la isolación por merchant: los comerciantes mantienen el control sobre productos y creativos, y los operadores conservan el control de la infraestructura.

Operación y monitorización

  • Perfilado de consultas: Identificar consultas lentas y ajustar la estrategia de índices/particiones.
  • Higiene de particiones: Añadir/eliminar automáticamente particiones temporales para evitar un exceso de particiones.
  • Copias de seguridad y pruebas de restauración: Verificar escenarios de restauración para datos calientes y de archivo por separado.
  • Métricas: Monitorizar la tasa de inserts, latencia de lectura, esperas por bloqueos, tasa de pruning de particiones y rendimiento de archivado.

Resumen: plan de implementación por pasos

  1. Análisis: identificar las consultas principales y los puntos calientes (por merchant, partner, tiempo).
  2. Particionar: comenzar por tiempo, auditar las cláusulas WHERE para que el pruning funcione.
  3. Almacenamiento caliente/escalonado: tabla hot para datos recientes, archivo para datos fríos; usar Partition Exchange.
  4. Aislación por merchant: crear BD separadas o shards para merchants de alto volumen.
  5. Tubería de archivado e instantáneas: crear snapshots de liquidación, mover en lotes con reconciliación.
  6. Monitorización y iteración: observar métricas y ajustar la estrategia.

Beneficio práctico para operadores de Affilentra

Con estos patrones, los operadores mantienen la soberanía de los datos en un entorno autoalojado y evitan pérdidas de seguimiento o cálculos erróneos de comisiones. La arquitectura de Affilentra con roles separados facilita el aislamiento por comerciante y permite migraciones controladas a topologías particionadas o shardeadas —sin sacrificar la lógica de negocio.

Actúe ahora: Para una instalación escalable y asesoría sobre estrategias de particionamiento y sharding, elija su punto de entrada: Elegir inicio.

Siguiente paso

Probar Affilentra

Plataforma unificada que integra de forma transparente la puesta a disposición de productos, el tracking, la validación de conversiones, el cálculo de comisiones y el pago, con roles claramente separados; opción de instalación autoalojada con licencia perpetua sin participación en los ingresos; los comerciantes conservan el control sobre productos, condiciones y materiales publicitarios; los socios reciben enlaces de seguimiento personales e historial de pagos verificable.

Elegir inicio