Forums / National / Russian / Тех. поддержка / Зачем в базе 2 раза сохраняется текст?

12>>>

jcrush
#1 2009-07-29 07:56
Заметил что в таблице постов форума, как подозреваю и страницах мы храним два раза один и тот же текст - тело сообщения 1. в text и html, как я понимаю это надо для ббкоде, но все же за счет этого вся база в 2 раза растет неоправданно, разве других решений нет?

`sed_forum_posts` - `fp_html
SEO блог: http://blog.stfw.ru/
Sergeich
#2 2009-07-29 12:56
В поле html хранится отпарсеный ББ-код, собственно, это тот самый html-кеш :). При формировании страницы движок берёт готовый кусок кода, а не парсит каждый раз ББ.
Boss
#3 2009-07-29 12:58
Там в админке вроде отключается если тебе не надо HTML-кеш. Запись будет производится только в text.
jcrush
#4 2009-07-29 13:45
т.е. кеш не на всю базу? а только на часто открываемые страницы? как бы так по хорошему должно быть...
SEO блог: http://blog.stfw.ru/
Trustmaster
#5 2009-07-29 15:41
А чем оно мешает?
May the Source be with you!
jcrush
#6 2009-07-29 21:18
все равно какой смысл два раза в базе одно и тоже? хранить все в хтмл а парсить при редактировании добавлении.
SEO блог: http://blog.stfw.ru/
Trustmaster
#7 2009-07-29 22:13
А как ты собираешься редактировать ббкоды, если всё уже в HTML? Это ведь отнюдь не взаимно-однозначное преобразовние.
May the Source be with you!
jcrush
#8 2009-07-30 07:43
Что там неравнозначного? основные ббкоды можно в хтмл парсить и обратно, в DLE это прекрасно реализовано!
SEO блог: http://blog.stfw.ru/
Sergeich
#9 2009-07-30 13:20
А как разбор пользовательских тегов делать?
Sergey
#10 2009-07-30 13:34
Надо поставить парсер http://greg.chiaraquartet.net/archives/137-a-parser-generator-for-PHP-finally.html настроить таблицу тегов и получим скоростной парсер с исправлением ошибок - дело за малым: решиться.
www.cotonti.mobi
Boss
#11 2009-07-30 13:52
По-моему сейчас реализация самая правильная. Постоянно преобразовывать тест из BB в HTML и обратно глупо. Благо разработчики это понимают. Если бы было постоянно преобразование, то на котонти можно было бы смело ставить крест.

Конечно, база стала в два раза больше, но полезность кэша очевидна.

ps: Статистика моей базы на котонти:

БД SQL, число строк 244601
БД SQL, размер индекса (KB) 145 502.0
БД SQL, размер данных (KB) 111 872.1
БД SQL, общий размер (KB) 257 374.1

У кого-нибудь есть больше?
Sergeich
#12 2009-07-30 14:11
Sergey, одна из фич котонти - возможность добавлять свои теги довольно простым путём, причём теги можно мутить довольно сложные и специфичные. Если внедрять парсер туда-сюда-обратно, то придётся, если я правильно понимаю, для каждого тега прописывать ещё и правила обратных преобразований не забывая о безопасности, плюс каждое преобразование - дополнительная нагрузка на сервер. Это, на мой взгляд, уже перебор. Я из двух зол выбираю меньшее - увеличение базы за счёт раздельного хранения html и bb, тем более дисковое пространство сейчас наименее затратная часть хостинга.
Sergey
#13 2009-07-30 14:37
Для того,чтобы понять как работают такие парсеры, достаточно познакомится с YACC и LEX в юниксе. Как это работает. Пишется грамматическое дерево разбора и отдельно пишется лексический анализатор все очень похоже на существующую базу ббкодов. В чем фишка парсера (YACC) он транслирует не текст страниц, он транслирует в дерево разбора сам разбор ббкодов. В результате получается компактная таблица переходов анализатора разбора - получается автомат. Затем, имеется очень короткая программа, которая просто читает текст в один проход!! и обнаружив ликсему типа [имя] или [/имя] генерирует код лексемы, программа, будем называть ее реализатор (она как правило крайне мала по размерам) в соответствии с таблицей разбора, назначает действие из другой таблицы (каждое правило грамматического разбора подразумевает действие). В чем прелесть такой системы. Прежде всего рекурсивность разбора, что дает делать совершенно немыслимые действия. А что вставляется в серверную часть? как раз не парсер, а вот этот реализатор с таблицей. Сам парсер запускают один раз, в случае изменения либо набора лексем, либо правил грамматического разбора. А какова скорость работы таких реализаторов, как правило совпадает со скоростью чтения файла, т.е чтения кэша. А возможности? Они беспредельны для дизайнеров типовых решений: например: вот как будет с рекурсивным разбором (придумано по ходу)
[b[red]] текст та-та - та и что- то написано красным что-то на выходе отмеченное красным будет еще и жирным. И так далее. Тут главное придумать смелые правила - рекурсия решает многое.
www.cotonti.mobi
jcrush
#14 2009-07-30 14:48
не вижу очевидных плюсов такого парсера, в одном плюс в другом большой минус, а пользовательские ббкоды немногие юзают.
SEO блог: http://blog.stfw.ru/
Sergey
#15 2009-07-30 14:53
# jcrush : не вижу очевидных плюсов такого парсера, в одном плюс в другом большой минус, а пользовательские ббкоды немногие юзают.
Без обид. А вы когда-нибудь писали для YACC и LEX? А вы знаете как устроены трансляторы, анализаторы и пр.?
www.cotonti.mobi

12>>>