База данных ориентированной на документацию - что, если определения документов меняются?
-
27-09-2019 - |
Вопрос
Насколько я понимаю, вы можете ввести любую неструктурированную информацию в базу данных ориентированной на документацию. Давайте представим документ, как это:
{
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
Угадывание-игра для устаревших данных.
Как указано, я бы, наверное, забронировал второй вариант для исключительных случаев, где я не уверен, что смогу получить правильную «рефакторинг» для каждого записи / документа. Тем не менее, это вариант, который доступен для вас, что у вас на самом деле нет с другими типами баз данных.
Помимо этих двух, я не вижу других четких альтернатив. Это своего рода бинарное решение; Либо вы постоянно обновляете существующие данные или нет.