База данных ориентированной на документацию - что, если определения документов меняются?

StackOverflow https://stackoverflow.com/questions/2845899

Вопрос

Насколько я понимаю, вы можете ввести любую неструктурированную информацию в базу данных ориентированной на документацию. Давайте представим документ, как это:

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

Позже, в новой версии, эта структура рекордна для

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

Как вы делаете это с ориентированными на документацию баз данных? Вы должны подготовить слияние сценариев, которые измените все ваши записи в базе данных? Или есть лучшие способы, которыми вы можете обрабатывать изменения в структуре?

Это было полезно?

Решение

Рефакторинг здесь подразумевает, что существует детерминированное отображение из старой схемы к новой схеме. Таким образом, наиболее эффективным вариантом является то же самое, что вы сделаете с базой данных SQL и фактически обновляете документы.

Ориентированные на документацию базы данных дают вам еще один вариант, хотя это зависит от того, на котором DODB и как вы используете его на переднем конце. Эта опция заключается в том, чтобы просто оставить данные в одиночку и поддерживать «старое» определение в вашем приложении в качестве своего рода опция обратной совместимости. Другими словами, вы выполняете эти переводы на лету, в отличие от постоянного одноразового обновления.

Это не вариант с базой данных SQL, потому что вам придется держать устаревший столбец вокруг и, возможно, проиндексирован. С DODB вы на самом деле не тратите никаких данных или места индекса. Вам придется взвесить преимущества против недостатков.

Основным недостатком является, очевидно, несоответствие, которое может расти со временем и привести к ошибкам. Другим недостатком, возможно, вычислительные расходы на выполнение этой налетки или невозможности эффективно использовать новую структуру (например, вы можете захотеть индексировать только lastname). Итак, большую часть времени, я думаю, я бы просто решил запустить массу обновления.

Однако есть одно чистое преимущество для сохранения старых документов; Если вы не уверены, что ваш рефакторинг идеален - например, если данные в вашем name колонка не следовала последовательной конвенции, может быть, в некоторых случаях это lastname, firstname и в других случаях это firstname lastname и в других случаях это company name - Затем выполнение ваших преобразований на лету без проведения постоянного обновления позволяет уточнить отображение со временем, поэтому вы можете использовать firstname а также lastname поля, когда доступны, но отступают к name Угадывание-игра для устаревших данных.

Как указано, я бы, наверное, забронировал второй вариант для исключительных случаев, где я не уверен, что смогу получить правильную «рефакторинг» для каждого записи / документа. Тем не менее, это вариант, который доступен для вас, что у вас на самом деле нет с другими типами баз данных.

Помимо этих двух, я не вижу других четких альтернатив. Это своего рода бинарное решение; Либо вы постоянно обновляете существующие данные или нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top