Pregunta de entrevista para Desarrollador Python

Explícame cómo se despliega una migración de base de datos sin caída de servicio.

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

Divídela en pasos compatibles hacia atrás. Despliega primero el cambio de esquema en una forma que el código en marcha tolere, como añadir una columna que admita nulos, luego despliega código que escriba en la antigua y en la nueva, rellena en lotes, cambia las lecturas, y solo elimina la columna vieja en una release posterior. Evita bloqueos largos de tabla y prueba siempre la vuelta atrás.

Por qué lo preguntan los entrevistadores

Las migraciones son donde se separa a los ingenieros cuidadosos de quienes solo han trabajado en proyectos lo bastante pequeños como para permitirse una parada. El entrevistador quiere el patrón de expandir y contraer, que entiendas que el código viejo y el nuevo corren a la vez durante un despliegue progresivo, y que sepas qué operaciones bloquean una tabla en Postgres el tiempo suficiente como para tumbar el sitio.

Cómo estructurar tu respuesta

  • Nombra el patrón de expandir y contraer.
  • Ordena los despliegues para que funcionen las dos versiones del código.
  • Rellena en lotes, nunca en una sola sentencia.
  • Señala las operaciones con bloqueo que hay que evitar.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

La regla que sigo es que durante un despliegue progresivo hay dos versiones del código hablando con una sola base de datos, así que cada paso tiene que ser seguro para ambas. Renombrar una columna es la trampa clásica. En su lugar expando: añado la columna nueva que admite nulos en su propia migración, despliego código que escribe en los dos campos y sigue leyendo del viejo, relleno las filas existentes en lotes de unos pocos miles con una pausa entre ellos para que la replicación no se quede atrás, luego cambio las lecturas en la siguiente release, y solo en una tercera release elimino la columna vieja. Los detalles de Postgres también importan. Añadir una restricción NOT NULL en una tabla grande coge un bloqueo pesado, así que añado la columna aceptando nulos, relleno, y luego valido la restricción por separado. Django te da separate_database_and_state y migraciones no atómicas cuando las necesitas, y pongo un lock_timeout corto para que una migración bloqueada falle rápido en vez de encolar todas las consultas detrás. Cada migración lleva además una vuelta atrás probada.

¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.

Mira cómo funciona

Preguntas de seguimiento que puedes esperar

  • ¿Y si el relleno tarda seis horas?
  • ¿Cómo añades un índice sin bloquear las escrituras?
  • ¿Cómo revertirías un despliegue después de haber cambiado el esquema?

Más preguntas para Desarrollador Python

Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.

Predecir mis preguntas

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot