En esta página se describe cómo funciona Spanner con las claves principales y se ofrecen estrategias de migración de claves principales para los siguientes casos prácticos:
- Migración de bases de datos de claves UUID
- Migrar bases de datos de una sola instancia con claves secuenciales
- Migrar bases de datos de claves secuenciales con asistencia para el cambio en directo
- Migrar bases de datos de claves secuenciales con dependencias de lógica de aplicación
Una estrategia habitual para las claves principales es usar claves subrogadas, como números de incremento automático. Estas claves primarias te ofrecen flexibilidad para optimizar tus claves ahora y en el futuro, aunque cambie tu lógica empresarial. En una base de datos de una sola instancia con un volumen bajo, las claves secuenciales funcionan bien. Sin embargo, en un sistema distribuido, las claves secuenciales no se escalan bien.
Claves principales secuenciales en Spanner
En Spanner, cada tabla tiene una clave principal que consta de una o varias columnas de la tabla. La clave principal de una tabla identifica de forma única cada fila de la tabla. Spanner usa la clave principal para distribuir grupos de filas, llamados divisiones, entre los nodos de computación de una instancia de Spanner. Este proceso se denomina partición por intervalo y permite a Spanner paralelizar las consultas y escalar.
Cuando tienes filas con claves principales cuyos valores están muy próximos, como las claves de incremento automático monotónicas, tienden a colocarse en la misma división. De esta forma, se puede crear un punto de acceso en el que la división pueda usar todos los recursos de computación y memoria disponibles. Un punto de acceso puede provocar un aumento de la latencia, lo que puede provocar que se agote el tiempo de espera y que se aborten las transacciones.
Para aprovechar la escalabilidad de Spanner y evitar los puntos de acceso, Spanner ofrece soluciones integradas como alternativas a las claves primarias de incremento automático.
Recomendaciones de claves principales
La recomendación predeterminada para las claves principales en Spanner es usar valores de identificador único universal versión 4 (UUIDv4). Los UUIDs son identificadores de 128 bits que usan 122 bits de datos aleatorios. Los valores UUIDv4 tienen un intervalo de valores enorme y son únicos, independientemente de dónde se generen. Por eso, son buenas candidatas para claves principales que no sean de hotspotting en Spanner.
Te recomendamos que uses claves primarias de tipo entero, ya que ocupan menos espacio y reducen la complejidad de los cambios que tendrás que hacer en la aplicación. Puedes usar una secuencia de bits invertida positiva para generar valores de clave primaria únicos que se distribuyan de forma uniforme en el espacio de enteros positivos de 64 bits.
Para obtener más información sobre cómo elegir una clave principal para evitar los hotspots, consulta las prácticas recomendadas para el diseño de esquemas.
Estrategias para migrar
En función de las necesidades y del caso práctico de tu aplicación, puedes implementar una estrategia de migración de clave principal. Cada una de estas estrategias de migración:
- Asegúrate de que las claves primarias migradas sean fieles y correctas.
- Minimizar los cambios en las aplicaciones posteriores, como los cambios de tipos o de valores de clave principal.
- Implementa las prácticas recomendadas de Spanner para mejorar el rendimiento y la escalabilidad.
- Spanner solo cambia el método para generar datos nuevos y no afecta a los datos que ya existen.
Migrar bases de datos de claves UUID
Supongamos que vas a migrar de una base de datos que usa claves principales UUID a Spanner. Configure las claves UUID como cadenas en su base de datos de origen e impórtelas a Spanner tal cual. Los valores UUID, en concreto los de la versión 4, son únicos independientemente de dónde se generen.
Puedes usar la función GENERATE_UUID()
(GoogleSQL,
PostgreSQL) en Spanner para migrar bases de datos de claves UUID.
Para obtener instrucciones sobre cómo migrar bases de datos de claves UUID, consulta Migrar columnas de claves UUID.
Migrar bases de datos de una sola instancia que tengan claves secuenciales
Supongamos que vas a migrar desde una base de datos de una sola instancia que usa claves monotónicas secuenciales, como
AUTO_INCREMENT
en MySQL,
SERIAL
en PostgreSQL o el tipo IDENTITY
estándar en SQL Server u Oracle.
Configura el objeto SEQUENCE
de Spanner para omitir los valores del intervalo de
las claves existentes y generar nuevas claves invertidas en bits. Las claves invertidas por bits generadas por el objeto SEQUENCE
de Spanner siempre son mayores que cero y se distribuyen de forma uniforme en el espacio de números enteros positivos de 64 bits.
Para obtener instrucciones sobre cómo migrar bases de datos que tienen claves secuenciales, consulta Migrar claves primarias secuenciales generadas automáticamente.
Migrar bases de datos de claves secuenciales que admitan el cambio en directo
Supongamos que vas a migrar de una base de datos de una sola instancia que usa claves monotónicas secuenciales a Spanner y que quieres admitir escenarios de replicación. Por ejemplo, quieres hacer un cambio en directo entre los sistemas de bases de datos.
Configura el objeto SEQUENCE
de Spanner para omitir todo el intervalo de valores de las claves de tu base de datos de origen y generar nuevas claves invertidas en Spanner. Las claves invertidas por bits generadas por el objeto SEQUENCE
de Spanner siempre son mayores que cero, pero no están ordenadas.
Para obtener instrucciones sobre cómo migrar bases de datos que admitan el cambio en directo, consulta Usar Spanner y tu base de datos de origen.
Migrar bases de datos de claves secuenciales que tengan dependencias de lógica de aplicación
Supongamos que vas a migrar desde una base de datos que usa claves monotónicas secuenciales y que la lógica de tu aplicación se basa en el orden de la clave principal para determinar la antigüedad o secuenciar los datos recién creados.
Crea una clave compuesta que combine un valor distribuido de forma uniforme, como un ID de fragmento o un hash, como primer componente y un número secuencial como segundo componente. De esta forma, se conservan los valores de clave ordenados sin provocar un punto de acceso a gran escala.
Para obtener instrucciones sobre cómo migrar bases de datos de claves secuenciales con dependencias de lógica de aplicación, consulta Migrar tus propias claves principales.
Siguientes pasos
- Para ver flujos de trabajo de migración detallados, consulta Migrar claves principales.