|
|
|
Как сделать версионность (diff-и) текста
|
|||
|---|---|---|---|
|
#18+
Проектирую БД что то типа веб-кеша: нужно сохранять html-код веб страницы через некоторые промежутки времени, а отсюда и суть задачи, код веб-страницы скажем за 15 мин может измениться несколькими символами, записывать каждый раз данные которые отличающийся несколькими символами расточительно. Можно конечно записывать diff-и (программно реализуемые), но тогда будут проблемы с поиском по тексту. Подскажите как правильно решить такую задачу? С выбором БД еще не решиться но лучше чтоб не зависело от конкретной БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 04:12 |
|
||
|
Как сделать версионность (diff-и) текста
|
|||
|---|---|---|---|
|
#18+
pH20Проектирую БД что то типа веб-кеша: нужно сохранять html-код веб страницы через некоторые промежутки времени, а отсюда и суть задачи, код веб-страницы скажем за 15 мин может измениться несколькими символами, записывать каждый раз данные которые отличающийся несколькими символами расточительно. Можно конечно записывать diff-и (программно реализуемые), но тогда будут проблемы с поиском по тексту. Подскажите как правильно решить такую задачу? С выбором БД еще не решиться но лучше чтоб не зависело от конкретной БД. путь номер раз: разбить html код на части - благо он структурированный. И хранить их в отдельно . Соответсвенно при изменении (для отслеживания изменений можно юзать хэши) вставлять только новый изменившийся кусок, а не всю страницу. Для удобства можно прикрутить вьюху (матвтюху) собирающую из последних версий всех кусков целую страницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 13:30 |
|
||
|
Как сделать версионность (diff-и) текста
|
|||
|---|---|---|---|
|
#18+
Я понял что нужно копать в сторону хранимых процедур, но нигде не могу найти пример функции c использованием diff-ов, я пишу на python в нем есть прекрасная библиотека для таких целей difflib ( http://docs.python.org/2/library/difflib.html) также я узнал что в PostgreSQL есть возможность писать хранимые процедуре на Python - PL/Python ( http://www.postgresql.org/docs/9.0/static/plpython.html) но пролистал мануал я так и не понял можно ли подключить библиотеку. Так что вопрос трансформировался в такой: кто знает как реализовать diff-алгоритм ка встроенную процедуру или функцию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 14:18 |
|
||
|
Как сделать версионность (diff-и) текста
|
|||
|---|---|---|---|
|
#18+
pH20, Почему-бы не сделать дополнительный слой логики на Python'e и инкапсулировать всю diff-логику там, а в базе хранить только результаты вычислений этих diff-ов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 15:57 |
|
||
|
Как сделать версионность (diff-и) текста
|
|||
|---|---|---|---|
|
#18+
Такая идея былла с самого начала. Но вопрос в том что в перспективе должен быть полнотекстовый поиск, хотел сразу воспользоватся встроенными возможностями по поиску в БД. А если логику diff-ов организовывать программно, значит и логику полнотекстового поиска также нужно писать заново что чревато усложнением кода. Сейчас разберусь не можно ли подключить python-код как UDF в Firebird - читал там можно на каком угодно языке реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 16:31 |
|
||
|
Как сделать версионность (diff-и) текста
|
|||
|---|---|---|---|
|
#18+
pH20, работа через хранимые процедуры Вам очень вряд ли поможет в плане натравливания на Diff-ы встроенных в БД средств полнотекстового поиска. UDF-ы - теоретически могут помочь, но 1. сомневаюсь, что UDF-ы Вам дадут делать на внешнем языке 2. производительность этого будет, думаю, хуже чем если хранить тексты целиком, безо всяких диффов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2013, 17:09 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38180693&tid=1541343]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
135ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 410ms |

| 0 / 0 |
