Уведомления

Группа в Telegram: @pythonsu

#1 Март 12, 2013 10:40:55

agryn
От: Украина
Зарегистрирован: 2011-12-14
Сообщения: 189
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать версионность (diff-и) текста

Проектирую БД что то типа веб-кеша: нужно сохранять html-код веб страницы через некоторые промежутки времени, а отсюда и суть задачи, код веб-страницы скажем за 15 мин может измениться несколькими символами, записывать каждый раз данные которые отличающийся несколькими символами расточительно. Можно конечно записывать diff-и (программно реализуемые), но тогда будут проблемы с поиском по тексту. Подскажите как правильно решить такую задачу? С выбором БД еще не решиться но лучше чтоб не зависело от конкретной БД.
P.S. В БД я новичок но погуглил по нету подозреваю что нужно копать в сторону представлений (“виртуальных таблиц”) и хранимых процедур. Короче нужна хранимая процедура типа textdiff но что то нигде не могу найти инфу о существовании такой.

Отредактировано agryn (Март 12, 2013 11:42:51)

Офлайн

#2 Март 12, 2013 14:29:46

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Как сделать версионность (diff-и) текста

Если полнотекстовый поиск нужен по любой версии страницы, то нужно хранить историю именно полного текста.
Иначе, достаточно хранить полный текст текущей версии и историю инкрементных изменений (diff).
При необходимости показать старую версию на лету делаете минус diff любым удобным средством:
- средствами СУБД - ХП,
- сторонними заточенным под это утилитами - patch.
Либо дополнительно хранить первую версию страницы, тогда плюс diff.

Если бы не требование независимости от БД, я бы воспользовался какой-нибудь системой контроля версий.
Тот же Git умеет все правильно хранить, искать и делать слияния с помощью команд и опций.



Офлайн

#3 Март 12, 2013 14:35:37

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Как сделать версионность (diff-и) текста

Какой поиск по тексту нужен? поиск слов в во всех документах или в пределах одного конкретного?

если 2-е, то нужно делать опорные точки и восстанавливать конкретный документ целиком.
+ для этих целей неплохо бы использовать mercurial или git, они для этого и созданы.

записывать каждый раз данные которые отличающийся несколькими символами расточительно
ничего страшного, тут нужно посчитать, например если средний размер html 10kb, изменяем по 100 раз на дню = 1Мб в день, значить 10Гб хватит на 27 лет, + можно ещё архивировать на лету - проще чем с дифами возиться.

Офлайн

#4 Март 12, 2013 14:39:38

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Как сделать версионность (diff-и) текста

Lexander
Если полнотекстовый поиск нужен по любой версии страницы, то нужно хранить историю именно полного текста.
Тут смотря как искать, например если использовать sphinx - скармливаем полную версию и храним дифф.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version