En esta página, se describe cómo funciona Spanner con las claves primarias y se ofrecen estrategias de migración de claves primarias para los siguientes casos de uso:
- Migra bases de datos de claves de UUID
- Migra 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 para 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 teclas secuenciales no 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, en nodos de procesamiento en una instancia de Spanner. Este es llamada fragmentación de rangos y permite que Spanner paralelice consultas y a gran escala.
Cuando tienes filas con claves primarias cuyos valores se encuentran cerca, como las monótonas que se incrementan automáticamente, 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 clave primaria
La recomendación predeterminada para las claves primarias en Spanner es usar Valores del identificador único universal versión 4 (UUIDv4) Los UUID son identificadores de 128 bits que usan 122 bits de datos aleatorios. Los valores de UUIDv4 tienen un enorme rango de valores y son efectivamente únicos sin importar dónde se generen. Esto los convierte en Son buenas candidatas 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 claves primarias ú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 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 claves principales. Cada una de estas estrategias de migración:
- Asegúrate de la fidelidad y precisión de las claves primarias migradas.
- Minimiza los cambios descendentes de la aplicación, como cambiar los tipos o los valores de clave principal.
- Implementar las prácticas recomendadas de Spanner para el rendimiento y la escalabilidad
- Spanner solo cambia el método que determina cómo se generan los datos nuevos y no afecta a los existentes.
Cómo migrar bases de datos de claves de UUID
Considera que estás migrando desde una base de datos que usa Claves primarias de UUID en 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 necesitas instrucciones para migrar bases de datos de claves de UUID, consulta Migra las columnas de claves UUID.
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 monotónicas secuenciales,
tales como
AUTO_INCREMENT
en MySQL,
SERIAL
en PostgreSQL
El tipo IDENTITY
en SQL Server o en Oracle
Configurar el objeto SEQUENCE
de Spanner para omitir los valores en el rango de
claves existentes y generar nuevas claves inversas de bits. 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 activa
Considera que estás migrando desde una base de datos de instancia única que usa claves monotónicas secuenciales a Spanner y situaciones de replicación,por ejemplo, debes hacer una migración de sistemas en vivo entre 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 con bits invertidos
nuevas 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 tengan compatibilidad con la migración de sistemas en vivo, consulta Usa Spanner y la base de datos de origen.
Cómo migrar 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 tu aplicación se basa en el orden de la clave primaria para determinar las visitas recientes o de la secuencia de comandos con 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. Esto conserva los valores de clave ordenados, sin causar un hotspot a gran escala.
Obtén instrucciones para migrar bases de datos de claves secuenciales con la lógica de la aplicación. las dependencias, consulta Cómo migrar tus propias claves primarias.
¿Qué sigue?
- Para ver los flujos de trabajo de migración detallados, consulta Migra claves primarias.