Форум сайта python.su
Проектирую БД что то типа веб-кеша: нужно сохранять html-код веб страницы через некоторые промежутки времени, а отсюда и суть задачи, код веб-страницы скажем за 15 мин может измениться несколькими символами, записывать каждый раз данные которые отличающийся несколькими символами расточительно. Можно конечно записывать diff-и (программно реализуемые), но тогда будут проблемы с поиском по тексту. Подскажите как правильно решить такую задачу? С выбором БД еще не решиться но лучше чтоб не зависело от конкретной БД.
P.S. В БД я новичок но погуглил по нету подозреваю что нужно копать в сторону представлений (“виртуальных таблиц”) и хранимых процедур. Короче нужна хранимая процедура типа textdiff но что то нигде не могу найти инфу о существовании такой.
Отредактировано agryn (Март 12, 2013 11:42:51)
Офлайн
Если полнотекстовый поиск нужен по любой версии страницы, то нужно хранить историю именно полного текста.
Иначе, достаточно хранить полный текст текущей версии и историю инкрементных изменений (diff).
При необходимости показать старую версию на лету делаете минус diff любым удобным средством:
- средствами СУБД - ХП,
- сторонними заточенным под это утилитами - patch.
Либо дополнительно хранить первую версию страницы, тогда плюс diff.
Если бы не требование независимости от БД, я бы воспользовался какой-нибудь системой контроля версий.
Тот же Git умеет все правильно хранить, искать и делать слияния с помощью команд и опций.
Офлайн
Какой поиск по тексту нужен? поиск слов в во всех документах или в пределах одного конкретного?
если 2-е, то нужно делать опорные точки и восстанавливать конкретный документ целиком.
+ для этих целей неплохо бы использовать mercurial или git, они для этого и созданы.
записывать каждый раз данные которые отличающийся несколькими символами расточительноничего страшного, тут нужно посчитать, например если средний размер html 10kb, изменяем по 100 раз на дню = 1Мб в день, значить 10Гб хватит на 27 лет, + можно ещё архивировать на лету - проще чем с дифами возиться.
Офлайн
LexanderТут смотря как искать, например если использовать sphinx - скармливаем полную версию и храним дифф.
Если полнотекстовый поиск нужен по любой версии страницы, то нужно хранить историю именно полного текста.
Офлайн