Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Contextos de aplicación específicos

Datos del modelo para la versionado de esquemas

Ocasionalmente, los esquemas de la base de datos necesitan ser actualizados. Por ejemplo, un esquema diseñado para almacenar información de contacto de los usuarios puede requerir una actualización para incluir nuevos métodos de comunicación a medida que se vuelvan populares, como Twitter o Skype.

Puedes utilizar el modelo de esquema flexible de MongoDB, que admite documentos de diferentes formas en la misma colección, para actualizar gradualmente el esquema de tu colección. A medida que actualizas tu modelo de esquema, el patrón de versionado de esquemas permite rastrear estas actualizaciones con números de versión. Tu código de aplicación puede utilizar números de versión para identificar y gestionar documentos con diferentes estructuras sin tiempo de inactividad.

Para implementar el patrón de Versionado de Esquemas, añade un schema_version (o con un nombre similar) a su esquema la primera vez que se modifique el esquema. Los documentos que emplean el nuevo esquema deben poseer un schema_version de 2 para indicar que siguen la segunda iteración de tu esquema. Si actualizas tu esquema nuevamente, incrementa el schema_version.

El código de su aplicación puede usar el schema_version de un documento, o su ausencia, para gestionar documentos condicionalmente. Use el esquema más reciente para almacenar la información nueva en la base de datos.

El siguiente ejemplo itera sobre el esquema para documentos en la colección users.

En la primera iteración de este esquema, un registro incluye campos galactic_id, name y phone:

// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Anakin Skywalker",
"phone": "503-555-0000",
}

En la siguiente iteración, el esquema se actualiza para incluir más información en una forma diferente:

// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Darth Vader",
"contact_method": {
"work": "503-555-0210",
"home": "503-555-0220",
"twitter": "@realdarthvader",
"skype": "AlwaysWithYou"
},
"schema_version": "2"
}

Agregar una schema_version significa que una aplicación puede identificar documentos diseñados para el nuevo esquema y gestionarlos en consecuencia. La aplicación aún puede gestionar documentos antiguos si schema_version no existe en el documento.

Por ejemplo, considera una aplicación que encuentra el/los número(s) de teléfono de un usuario por galactic_id. Al recibir un galactic_id, la aplicación necesita query la base de datos:

db.users.find( { galactic_id: 123 } );

Después de que el documento se devuelve desde la base de datos, la aplicación comprueba si el documento tiene un campo schema_version.

  • Si no tiene un campo schema_version, la aplicación pasa el documento devuelto a una función dedicada que renderiza el campo phone del esquema original.

  • Si tiene un campo schema_version, la aplicación comprueba la versión del esquema. En este ejemplo, el schema_version es 2 y la aplicación pasa el documento devuelto a una función dedicada que procesa los nuevos campos contact_method.work y contact_method.home.

Utilizando el campo schema_version, el código de la aplicación puede soportar cualquier número de iteraciones de esquema en la misma colección añadiendo funciones manejadoras dedicadas al código.

El patrón de versionado de esquemas es ideal para cualquiera o una combinación de los siguientes casos:

  • El tiempo de inactividad de la aplicación no es una opción

  • Actualizar documentos puede llevar horas, días o semanas de tiempo para completarse

  • Actualizar los documentos a la nueva versión del esquema no es un requisito

El patrón de control de versiones de esquema le ayuda a decidir mejor cuándo y cómo se realizarán las migraciones de datos en relación con las bases de datos tabulares tradicionales.

Volver

Datos monetarios

En esta página