Descripción general de la migración de la clave primaria

En esta página, se describe cómo funciona Spanner con claves primarias y ofrece estrategias de migración de clave primaria para los siguientes casos de uso:

Un enfoque típico de las claves primarias es usar claves subrogadas, como el incremento automático y números de serie. Estas claves primarias proporcionan flexibilidad para optimizar tus claves ahora y en el futuro, incluso si tu lógica empresarial cambia. En una base de datos de instancia única volumen bajo, las teclas secuenciales funcionan bien. 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 que consta de uno o más columnas de la tabla. La clave primaria de tu tabla identifica de manera única cada fila en 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. Esta puede crear un hotspot, en el que la división puede usar toda la capacidad de Google Cloud. Un hotspot puede aumentar la latencia lo que podría generar tiempos de espera y transacciones anuladas.

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 buenos candidatos para claves primarias sin hotspot en Spanner.

Recomendamos usar claves primarias de números enteros, ya que ocupan menos espacio y reducen el y la complejidad de los cambios en la aplicación. Puedes usar un valor positivo inversa de bits para generar valores de clave primaria únicos que distribuirlos en el espacio de números enteros positivo 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 las necesidades y el caso de uso de tu aplicación, puedes implementar una clave primaria. estrategia de migración. Cada una de estas estrategias de migración:

  • Asegúrate de la fidelidad y precisión de las claves primarias migradas.
  • Minimiza los cambios posteriores de las aplicaciones, como el cambio de tipos o valores de clave primaria.
  • 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.

Migra 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 la base de datos de origen y, luego, impórtalas a Spanner tal como está. UUID, en particular, v4, son efectivamente únicos sin importar dónde se generen.

Puedes usar la función GENERATE_UUID() (GoogleSQL, PostgreSQL) en Spanner para migrar bases de datos de claves 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 claves nuevas con inversión de bits. Se generaron claves con inversión de bits por el objeto SEQUENCE de Spanner son siempre mayores que cero y se distribuyen de manera uniforme en el espacio de números enteros positivo de 64 bits.

Si necesitas instrucciones para migrar bases de datos que tienen claves secuenciales, consulta Cómo migrar claves primarias secuenciales generadas automáticamente.

Migrar bases de datos de claves secuenciales que admiten la migración de sistemas en vivo

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 la base de datos de origen y generar nuevas claves con valores invertidos de bits en Spanner. Claves de bits revertidas generadas por Spanner El objeto SEQUENCE siempre es mayor que cero, pero no está ordenado.

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.

Migrar bases de datos de claves secuenciales que tienen dependencias de lógica de aplicaciones

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 secuencia de comandos con los datos recién creados.

Crea una clave compuesta que combine un valor distribuido de manera uniforme, como un ID de fragmento o un hash, como primer componente y un número secuencial como el 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?