En esta página, se describe cómo funciona Spanner con las claves primarias y se ofrecen estrategias de migración de clave primaria para los siguientes casos de uso:
- Cómo migrar bases de datos de claves de UUID
- Cómo migrar bases de datos de instancia única con claves secuenciales
- Cómo migrar bases de datos de claves secuenciales con compatibilidad con la conmutación en vivo
- Cómo migrar bases de datos de claves secuenciales con dependencias de lógica de la aplicación
Un enfoque típico de las claves primarias es usar claves sustitutas, como números de incremento automático. Estas claves primarias proporcionan flexibilidad para optimizar tus claves ahora y en el futuro, incluso si cambia tu lógica empresarial. En una base de datos de instancia única con volumen bajo, las claves secuenciales tienen un buen rendimiento. Sin embargo, en un sistema distribuido, las claves secuenciales no se escalan bien.
Claves primarias secuenciales en Spanner
En Spanner, cada tabla tiene una clave primaria compuesta por una o más columnas de la tabla. La clave primaria de tu tabla identifica de forma única cada fila de una tabla. Spanner usa la clave primaria para distribuir grupos de filas, llamadas divisiones, entre los nodos de procesamiento de una instancia de Spanner. Esto se llama fragmentación de rango y permite que Spanner paralelice las consultas y escale.
Cuando tienes filas con claves primarias cuyos valores están muy cerca, como las claves de incremento automático monotónicas, tienden a ubicarse en la misma división. Esto puede crear un hotspot, en el que la división puede usar todos los recursos de procesamiento y memoria disponibles. Un hotspot puede aumentar la latencia, lo que podría provocar tiempos de espera y transacciones abortadas.
Para aprovechar la escalabilidad de Spanner y evitar los hotspots, Spanner ofrece soluciones integradas como alternativas a las claves primarias de incremento automático.
Recomendaciones de claves primarias
La recomendación predeterminada para las claves primarias en Spanner es usar valores de identificador único universal (UUIDv4) de versión 4. Los UUID son identificadores de 128 bits que usan 122 bits de datos aleatorios. Los valores de UUIDv4 tienen un gran rango de valores y son, en efecto, únicos, independientemente de dónde se generen. Esto los convierte en buenos candidatos para claves primarias que no generan hotspots en Spanner.
Te recomendamos que uses claves primarias de números enteros, ya que ocupan menos espacio y reducen la complejidad de los cambios de aplicación que deberás realizar. Puedes usar una secuencia positiva con bits invertidos para generar valores de clave primaria únicos que se distribuyan de forma uniforme en el espacio de números enteros positivos de 64 bits.
Para obtener más información sobre cómo elegir una clave primaria para evitar hotspots, consulta Prácticas recomendadas para el diseño de esquemas.
Estrategias de migración
Según el caso de uso y las necesidades de tu aplicación, puedes implementar una estrategia de migración de clave primaria. Cada una de estas estrategias de migración tiene las siguientes características:
- Garantiza la fidelidad y exactitud de las claves primarias migradas.
- Minimiza los cambios descendentes de la aplicación, como cambiar los tipos o los valores de clave primaria.
- Implementa las prácticas recomendadas de Spanner para el rendimiento y la escalabilidad.
- Spanner solo cambia el método para generar datos nuevos y no afecta los datos existentes.
Cómo migrar bases de datos de claves de UUID
Supongamos que migras desde una base de datos que usa claves primarias de UUID a Spanner. Configura las claves de UUID existentes como cadenas en tu base de datos de origen y, luego, impórtalas a Spanner tal como están. Los valores de UUID, en particular, la versión 4, son, en efecto, ú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 de UUID.
Si deseas obtener instrucciones para migrar bases de datos de claves de UUID, consulta Cómo migrar columnas de claves de UUID.
Cómo migrar bases de datos de instancia única que tienen claves secuenciales
Considera que estás migrando desde una base de datos de instancia única que usa claves monótonas secuenciales, como
AUTO_INCREMENT
en MySQL, SERIAL
en PostgreSQL o el tipo IDENTITY
estándar en SQL Server o Oracle.
Configura el objeto SEQUENCE
de Spanner para omitir los valores en el rango de las claves existentes y generar claves nuevas con bits invertidos. Las claves con bits invertidos que genera 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.
Si deseas obtener instrucciones para migrar bases de datos que tienen claves secuenciales, consulta Cómo migrar claves primarias secuenciales generadas automáticamente.
Cómo migrar bases de datos de claves secuenciales que admiten la conmutación en vivo
Supongamos que migras desde una base de datos de instancia única que usa claves monótonas secuenciales a Spanner y admites situaciones de replicación,por ejemplo, quieres realizar una migración en vivo entre los sistemas de bases de datos.
Configura el objeto SEQUENCE
de Spanner para omitir todo el rango de valores
de las claves existentes en tu base de datos de origen y generar claves nuevas con bits invertidos
en Spanner. Las claves con bits invertidos que genera 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 admiten la conmutación por corte en vivo, consulta Usa Spanner y tu base de datos de origen.
Migración de bases de datos de claves secuenciales que tienen dependencias de lógica de la aplicación
Considera que estás migrando desde una base de datos que usa claves monótonas secuenciales y la lógica de tu aplicación depende del orden de la clave primaria para determinar la actualización o para secuenciar los datos creados recientemente.
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. Esto preserva los valores de clave ordenados, sin causar un hotspot a gran escala.
Si deseas obtener instrucciones para migrar bases de datos de claves secuenciales con dependencias de lógica de la aplicación, consulta Cómo migrar tus propias claves primarias.
¿Qué sigue?
- Para ver flujos de trabajo de migración detallados, consulta Cómo migrar claves primarias.