Сохраненные объекты Базы данных управления версиями, Как был бы Вы?

Если массив прост, и порядок имеет значение, поэтому две строки могут помочь

//Assume
var a = ['a','b', 'c']; var b = ['a','e', 'c'];  

if(a.length !== b.length) return false;
return !a.reduce(
  function(prev,next,idx, arr){ return prev || next != b[idx] },false
); 

Уменьшить количество проходов по одному из массивов и возвращает «false», если хотя бы один элемент «a» равен ни равно элементу 'b' Просто оберните это в функцию

42
задан David Schmitt 24 September 2008 в 21:04
поделиться

7 ответов

Думайте тщательно о требованиях для изменений. Как только Вашей кодовой базе встроили распространяющуюся историю, отслеживающую в операционную систему, это станет очень сложным. Страховка подписание системы особенно плохи для этого со схемами, часто работающими сверх 1 000 таблиц. Запросы также имеют тенденцию быть довольно сложными, и это может привести к проблемам производительности.

, Если историческое состояние действительно только требуется для создания отчетов, рассмотрите реализацию системы обработки транзакций 'текущего состояния' со структурой хранилища данных, зависающей от спины для отслеживания истории. Медленно Изменяющиеся Размеры являются намного более простой структурой для отслеживания исторического состояния, чем попытка встроить специальную историю, отслеживающую механизм непосредственно в Вашу операционную систему.

кроме того, Измененный Сбор данных более прост для системы 'текущего состояния' с изменениями, сделанными к записям на месте - первичные ключи записей не изменяются так, Вы не должны соответствовать записям, скрепляющим различные версии того же объекта. Эффективный механизм CDC заставит возрастающий склад загрузить процесс, довольно легкий и возможный работать вполне часто. Если Вам не требуется up-to-the минуту, отслеживая исторического состояния (почти, но не совсем, и оксюморон), это может быть эффективным решением с намного более простой кодовой базой, чем полная история, отслеживающая механизм, созданный непосредственно в приложение.

22
ответ дан ConcernedOfTunbridgeWells 4 August 2019 в 20:12
поделиться

Альтернатива строгому управлению версиями должна разделить данные на 2 таблицы: ток и история.

текущая таблица имеет все живые данные и обладает преимуществами всей производительности, в которой Вы создаете. Любые изменения сначала пишут текущие данные в связанную таблицу "истории" наряду с маркером даты, который говорит, когда это изменилось.

2
ответ дан Jim T 4 August 2019 в 20:12
поделиться

Техника, которую я использовал для этого в том прошлом, должна была иметь понятие "поколений" в базе данных, каждое изменение увеличивает текущее число поколения для базы данных - при использовании подрывной деятельности думайте изменения. Каждая запись имеет 2 числа поколения, связанные с ним (2 дополнительных столбца на таблицах) - поколение, что запись начинает быть допустимой для, и поколение, для которого это прекращает быть допустимым. Если бы данные в настоящее время допустимы, второе число было бы ПУСТЫМ или некоторый другой универсальный маркер.

Так для вставки в базу данных:

  1. увеличивают поколение номер
  2. , вставляют данные
  3. , отмечают время жизни тех данных с допустимым от и допустимым к ПУСТОГО УКАЗАТЕЛЯ

, Если Вы обновляете некоторые данные:

  1. метка все данные это собирается быть измененным, поскольку допустимый к текущему поколению инкремент номер
  2. поколение номер
  3. вставляет новые данные с текущим удалением поколения номер

, просто вопрос маркировки данных как завершающийся в текущем поколении.

Для получения конкретной версии данных найдите, какое поколение Вы после и ищете данные, допустимые между теми версиями поколения.

Пример:

Создают человека.

|Name|D.O.B  |Telephone|From|To  |
|Fred|1 april|555-29384|1   |NULL|

Обновление номер телефона

|Name|D.O.B  |Telephone|From|To  |
|Fred|1 april|555-29384|1   |1   |
|Fred|1 april|555-43534|2   |NULL|

Удаляют fred:

|Name|D.O.B  |Telephone|From|To  |
|Fred|1 april|555-29384|1   |1   |
|Fred|1 april|555-43534|2   |2   |
12
ответ дан Jim T 4 August 2019 в 20:12
поделиться

Простой надежный путь, состоит в том, чтобы добавить столбец версии к Вашим таблицам и сохранить версию Объекта и выбрать соответствующую прикладную логику на основе того номера версии. Таким образом, Вы также получаете назад совместимость для небольшой стоимости. Который всегда является хорош

0
ответ дан Robert Gould 4 August 2019 в 20:12
поделиться

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

Тогда каждая дочерняя таблица использует основной рекордный идентификатор + версия не как часть первичного ключа.

Это может быть сделано без основной таблицы, но по моему опыту это будет иметь тенденцию делать SQL-операторы намного более грязными.

1
ответ дан Roy Tang 4 August 2019 в 20:12
поделиться

ZoDB + ZEO реализует основанную на пересмотре базу данных с полным откатом к любой поддержке момента времени. Пойдите проверяют его.

Плохая Часть: это - связанный Zope.

0
ответ дан lms 4 August 2019 в 20:12
поделиться

Если вы используете Hibernate, JBoss Envers может быть вариантом. Вам нужно только аннотировать классы с @Audited, чтобы сохранить их историю.

2
ответ дан 26 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: