Pregunta

A mi entender, se puede introducir cualquier información no estructurada en una base de datos documental. Imaginemos un documento como este:

{
  name: 'John Blank',
  yearOfBirth: 1960
}

Más tarde, en una nueva versión, esta estructura se readaptado a

{
  firstname: 'John',
  lastname: 'Blank',
  yearOfBirth: 1960
}

¿Cómo se hace esto con las bases de datos orientadas a documentos? ¿Tiene que preparar fusión-scripts, que alteran todas las entradas en la base de datos? O hay mejores maneras en que puede manejar cambios en la estructura?

¿Fue útil?

Solución

Refactorizando aquí implica que hay un mapeo determinista del esquema antiguo al nuevo esquema. Por lo que la opción más eficaz es hacer lo mismo que harías con una base de datos SQL y en realidad actualizar los documentos.

Las bases de datos orientadas a documentos te dan otra opción, aunque depende de lo que DODB y cómo se está usando en el front-end. Esa opción es dejar simplemente que los datos solo, y apoyar la definición de "viejo" en su aplicación como una especie de opción de compatibilidad hacia atrás. En otras palabras, usted está haciendo estas traducciones en la marcha, en contraposición a una actualización en tiempo permanente.

Esto no es realmente una opción con una base de datos SQL, ya que tendría que mantener la columna obsoleta alrededor y posiblemente indexado. Con un DODB, usted no está realmente perder ningún espacio de datos o índice. Habría que sopesar las ventajas y las desventajas.

La desventaja principal es, obviamente, la inconsistencia, lo que podría crecer con el tiempo y dar lugar a errores. Otra desventaja es posiblemente el gasto computacional de hacer esto en la marcha, o la incapacidad para utilizar eficazmente la nueva estructura (por ejemplo, es posible que desee índice en sólo el lastname). Por lo tanto, la mayor parte del tiempo, creo que me acaba de elegir ejecutar una actualización masiva.

Hay una clara ventaja para la preservación de los documentos antiguos, sin embargo; si no está seguro de que su refactorización es perfecto - por ejemplo, si los datos de la columna name no siguen una convención consistente, tal vez en algunos casos de lastname, firstname y en otros casos de firstname lastname y en otros casos de company name - a continuación, haciendo sus conversiones sobre la marcha sin hacer una actualización permanente le permite refinar el mapeo con el tiempo, lo que puede utilizar los campos firstname y lastname cuando esté disponible, pero caen de nuevo a la name adivinar el juego de datos heredados.

Como se ha dicho, probablemente me reservo la segunda opción para casos excepcionales, en las que no estoy seguro de que voy a ser capaz de obtener el "refactoring" correcta para cada registro / documento. Sin embargo, es una opción que está disponible para usted que realmente no tiene con otros tipos de bases de datos.

Además de los dos, que no ven otras alternativas claras. Es una especie de una decisión binaria; o bien actualizar de forma permanente los datos existentes o no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top