PHPBB хранит посты в двух отдельных таблицах. Почему?

Krishna

Продался Java
PHPBB хранит посты в двух отдельных таблицах. Почему?

Форум phpbb хранит посты в двух отдельных таблицах - uid, ptime и т.п. в одной, а текст поста и заглавие в другой. Как вы думаете, чем это обусловлено? Есть ли выигрыш, ведь приходится делать join при выводе топика?
 

alexhemp

Новичок
А что тут думать - обычная нормализация данных.

Выигрыш от правильного хранения данных есть всегда.
 

Krishna

Продался Java
alexhemp
И в чём же состоит нормализация?
Пост атомарен.
 

alexhemp

Новичок
Krishna

Ну а авторы phpBB2 считают что "пост" не атомарен. Их и нужно спрашивать...
 

Vladson

Сильнобухер
Krishna
Ну там не JOIN а просто выборка из нескольких таблиц (разработчики рнрВВ вообще недолюбливают JOIN) а смысл всей каши давольно прост, по их мнению текст сообщения это лишь часть необходимая для просмотра топика, в то время как расчёты всего остального (с участием uid, ptime но без текста) встречаются часто

Вообще я тоже не считаю что в рнрВВ идеальная структура, однако всё-же по сравнению со многими другими форумами рнрВВ работает немного быстрее... (конечно часто в ущерб функциональности)
 

kruglov

Новичок
Поиск по фиксированной таблице (где нету текстов, варчаров и прочих блобов) даже без индексов осуществляется быстро.

Поэтому на индексах можно сэкономить место.
 

Kelkos

Сам себе программер
Автор оригинала: kruglov
Поиск по фиксированной таблице (где нету текстов, варчаров и прочих блобов) даже без индексов осуществляется быстро.

Поэтому на индексах можно сэкономить место.
да? хм..
Следует учитывать, что внутренним представлением любой величины типа BLOB или TEXT является отдельно размещенный объект - в противоположность всем остальным типам столбцов, для которых память выделяется единовременно для столбца при открытии таблицы.
что то мне намекает, что наличие текстовых полей в таблице невлияет на скорость поиска записей..
 

Krishna

Продался Java
Vladson
Krishna
Ну там не JOIN а просто выборка из нескольких таблиц
А разве это не INNER JOIN? 0:)

а смысл всей каши давольно прост, по их мнению текст сообщения это лишь часть необходимая для просмотра топика, в то время как расчёты всего остального (с участием uid, ptime но без текста) встречаются часто
Звучит логично, первая мысль была такая же, но при более внимательном рассмотрении выясняется, что на самом деле таблица постов считается как раз в основном во viewtopic, а для остальных экранов (функ-ий) данные кешируются в других таблицах - таблице форумов и топиков. Поправьт меня all, если ошибаюсь.

kruglov
Поиск по фиксированной таблице (где нету текстов, варчаров и прочих блобов) даже без индексов осуществляется быстро.

Поэтому на индексах можно сэкономить место.
И такая мысль мне пришла в голову. Но, разрабы пхпбб хранят в таблице и поля переменной длины, что делает её динамической размерности.

[sql]
CREATE TABLE phpbb_posts (
post_id mediumint(8) unsigned NOT NULL auto_increment,
topic_id mediumint(8) unsigned NOT NULL default '0',
forum_id smallint(5) unsigned NOT NULL default '0',
poster_id mediumint(8) NOT NULL default '0',
post_time int(11) NOT NULL default '0',
poster_ip varchar(8) NOT NULL default '',
post_username varchar(25) default NULL,
enable_bbcode tinyint(1) NOT NULL default '1',
enable_html tinyint(1) NOT NULL default '0',
enable_smilies tinyint(1) NOT NULL default '1',
enable_sig tinyint(1) NOT NULL default '1',
post_edit_time int(11) default NULL,
post_edit_count smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (post_id),
KEY forum_id (forum_id),
KEY topic_id (topic_id),
KEY poster_id (poster_id),
KEY post_time (post_time)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251[/sql]

-~{}~ 01.04.06 18:50:

Здесь
poster_ip varchar( 8 ) NOT NULL default '' - понятно что, а
post_username varchar( 25 ) default NULL - имя юзера в случае анонимного поста.
По-этому выгоды по-прежнему не ясны. Может это рудимент?
 

Rammstein

PHPClub::News
Зачем думать. Просто ребята сели выпить и один из них сказал: "А давайте...". И всё тут :) Хотя, я должен сказать, что такое применимо только к России.
[offtop]
У нас в области многие не могут понять, почему один из городов растянулся на 50km, при населении в 200'000. Видимо, по вышеуказанному принципу строили.
[/offtop]
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Rammstein
Зачем думать. Просто ребята сели выпить и один из них сказал: "А давайте...". И всё тут :) Хотя, я должен сказать, что такое применимо только к России.
Не надо нам тут русофобии! Авторы phpBB --- феерические долбо@#ы, в суровом российском климате такие просто не выживают.
 

Positive

Новичок
Я тоже задавался этим вопросом. Ответа не нашел, решил проверить экспериментально - слил в одну таблицу.
Стало слегка тормозить, но не факт что именно поэтому, может сам гдето накосячил.

Форум нормльной нагруженности - 100-150 чел одновременно.

Посмотрел-посмотрел, и вернул как было.
 

Vladson

Сильнобухер
>>> Авторы phpBB --- феерические долбо@#ы
Если вы считаете что можете лучше то почему мы до сих пор не имеем бесплатного двига форума у которого небыло бы недостатков ?
Хвастаться можно сколько угодно, а авторы рнрВВ не 3.14#здят на всех кого не лень, а просто делают доброе дело и не вы ёживаются (конечно недостатки можно найти, но у кого их нет ?)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Krishna
Sad Spirit:
А что-нибудь по существу вопроса можно? :)
По существу вопроса: в PostgreSQL есть такая фишка как TOAST, поля типа text и т.п., размером больше (примерно) пары килобайт хранятся не в основной таблице, а в дополнительной (пользователю этой разницы не видно).

Так что подход имеет право на существование, другой вопрос, насколько аккуратно аналогичная штука сделана в phpBB?

Автор оригинала: Vladson
Если вы считаете что можете лучше то почему мы до сих пор не имеем бесплатного двига форума у которого небыло бы недостатков ?
Хвастаться можно сколько угодно, а авторы рнрВВ не 3.14#здят на всех кого не лень, а просто делают доброе дело и не вы ёживаются (конечно недостатки можно найти, но у кого их нет ?)
Человек может написать крутую программу и т.д. и т.п. но при этом всё же быть феерическим долбо@#ом. Я ваще-то автор русского перевода phpBB, и высказываюсь по мотивам (попыток) общения с его создателями...
 

Vladson

Сильнобухер
Я ваще-то автор русского перевода phpBB
А я утверждаю что всё познаётся в сравнении и огромное количество людей которые его используют в тысячи раз больше долбо@#ы (в процентном соотношении их наверное более 90%) но речь в топике в общем не об этом...

Поиск по фиксированной таблице (где нету текстов, варчаров и прочих блобов)
Сорри кстати за ламерство, тексты и блобы это понятно, а вот варчары разве не фиксированы ?
(просто не приходилось задаваться таким вопросом)
 

kruglov

Новичок
Vladson
Варчары не фиксированы. Чары фиксированы.
В phpmyadmin можно посмотреть в структуре таблицы справа. Формат фиксированный или динамический.
Kelkos
>что то мне намекает, что наличие текстовых полей в таблице невлияет на скорость поиска записей
Ну, если вы создадите таблицу с текст-полем, то увидите, что формат у таблицы будет динамический.
Вообще, по опыту могу сказать, что текст-поля поиск замедляют. Особенно мегабайтные.
 

alexhemp

Новичок
Тут все просто - если размер записи базы фиксирован то по "номеру" записи в таблице легко вычисляется ее смещение в файле. А если нефиксирован - то нужно как миниумум хранить таблицу смещений, что очевидно сказывается на скорости. На маленьких нагрузках будет совершенно незаметно, но на больших могут вылезти отличия.
 
Сверху