CouchDB и управление версиями документов

В настоящее время я работаю над приложением wiki-esque, используя CouchDB, и пытаюсь реализовать схему управления версиями документов. Как я вижу это, есть два способа сделать это:

  1. Сохранять каждую версию в виде отдельного документа
  2. Храните старые версии в виде вложений в один документ.

Сейчас у меня есть форма № 1. Когда пользователь редактирует документ и сохраняет его, он сначала копирует предыдущую ревизию в новый документ, а затем сохраняет новую версию. Каждый документ имеет массив «history», содержащий данные для каждой версии (документ _id старой версии, временную метку, редактор и т. Д.).

Поскольку этот массив истории может быть довольно длинным для часто обновляемого документа, у меня есть представление, которое извлекает документ без истории во время обычного чтения (и другого представления для извлечения истории).

Мой вопрос таков: я чувствую себя неловко из-за моего нынешнего подхода и думал об изменении метода «привязанности». Но я не уверен. Я надеюсь, что кто-то знает CouchDB лучше, чем я (я был на это всего пару недель - и это мой первый проект с использованием CouchDB ... и NoSQL) может рассказать мне, что за плюсы и минусы каждого из них подход. Или может быть какая-то другая схема управления версиями, которую я пропускаю?

11 голосов | спросил James Adam 3 +04002014-10-03T03:28:50+04:00312014bEurope/MoscowFri, 03 Oct 2014 03:28:50 +0400 2014, 03:28:50

2 ответа


1

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

Когда вы измените значение ключа в своем документе, добавьте новый ключ с именем _h_i_s_<key_name>. Во вновь созданной (или созданной во время последнего обновления) добавьте объекты, как показано ниже, после каждого редактирования /обновления: -

{
key_name: "Hello",
_h_i_s_key_name:{time_of_update:value_of_key_name_before_update},
....
}

или

    {
    key_name: "Hello",
    _h_i_s_key_name:[{time:time_of_update,value:value_of_key_name_before_update}, {time:time_of_last_update,value:value_of_key_name_before_last_update}],
    ....
    }

Этот подход позволит сэкономить большое количество дискового пространства и ширины репликации в долгосрочной перспективе.

ответил Ravinder Payal 5 J000000Wednesday17 2017, 16:09:16
0

Без знания CouchDB. Хранение каждой версии, хотя может только отличаться от ее предшественника, является пустой тратой памяти. Я бы рекомендовал хранить изменения только.

Возможно, вы захотите посмотреть здесь или найти управление версиями данных.

ответил xuma202 30 AMpThu, 30 Apr 2015 02:22:04 +030022Thursday 2015, 02:22:04

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132