Перейти к контенту

Подрезаем БД: сброс постов в файлы


Рекомендуемые сообщения

таблица в MySQL представлена тремя файлами

MYI - индекс

MYD - данные

frm - структура

И при "подрезке" базы пропорционально уменьшаются как MYD, так и MYI.

Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 99
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Теперь ближе к IP.B. Таблица постов не имеет индекса по полю post (за исключением FULLTEXT). Следовательно изменение данных в post в процессе "сархивирования" не приводит к изменению индекса, а лишь к изменению в данных. Итого получаем уменьшение MYD, при старом MYI.
Опять не соглашусь. Полнотекстовый индекс меняется всякий раз при изменении значений полей, входящих в этот индекс. В обработке FatCat-а эти значения изменяются - заменяются на ссылку на javascript или совсем стираются (сорри, не вчитывалась в подробности). Значит, и полнотекстовый индекс меняется.

 

Как ты думаешь, если файл станет меньше по размеру в n раз скорость его обработки не уменьшится?
Смотря что ты подразумеваешь под обработкой ;) Если это поиск нужного блока внутри индексного файла, то, когда мы обращаемся к одному из индексов, при чем тут количество и размер других индексов этого файла? это все равно что утверждать, что если у нас в папке 10 файлов, то работа с одним будет тем медленнее, чем больше размер соседних файлов.

 

Что-то вы, товарищи, заблудились в трех соснах :D

Ссылка на комментарий
Поделиться на других сайтах

это все равно что утверждать, что если у нас в папке 10 файлов, то работа с одним будет тем медленнее, чем больше размер соседних файлов.

Для того жесткий диск и разбит на кластере, чтобы не было медленнее.

На СиДишнике именно так и будет: при одинаковом числе файлов на диске время доступа к одинаковому файлу будет тем больше, чем больше размер других файлов.

Причина в том, что искать приходится не кластеры, а начало и конец части потока. Чем длинней поток, тем дольше искать.

 

Аналогично и с файлом индекса. Он же не разбит на физические кластеры; ячейки таблицы имеют начало и конец в потоке данных.

Чем меньше будет размер файла - тем быстрее нахождение.

 

А лучше не мудрить теориями, а поставить копию форума на локалку и проверить.

Я когда увидел, насколько быстрее стал форум грузиться после подрезки БД - меня никакими теориями не переубедишь, что от размера БД скорость не зависит.

Да, именно загрузка страниц топиков ускорилась, а не только поиск по форуму.

Ссылка на комментарий
Поделиться на других сайтах

Опять не соглашусь. Полнотекстовый индекс меняется всякий раз при изменении значений полей, входящих в этот индекс. В обработке FatCat-а эти значения изменяются - заменяются на ссылку на javascript или совсем стираются (сорри, не вчитывалась в подробности). Значит, и полнотекстовый индекс меняется.

Написано было "(за исключением FULLTEXT)." Что означает, что я его просто не рассматривал.

 

И при "подрезке" базы пропорционально уменьшаются как MYD, так и MYI.

правильно, FULLTEXT индекс перестраивается.

Ссылка на комментарий
Поделиться на других сайтах

А лучше не мудрить теориями, а поставить копию форума на локалку и проверить.
не забудь только mysql настроить. Т.е. в тестах надо исключать посторонние факторы.

 

На СиДишнике именно так и будет: при одинаковом числе файлов на диске время доступа к одинаковому файлу будет тем больше, чем больше размер других файлов.
а индексный файл mysql - не сидишник. Индексы не считываются целиком. Они считываются блоками (аналог "кластеров").
Ссылка на комментарий
Поделиться на других сайтах

А лучше не мудрить теориями, а поставить копию форума на локалку и проверить.
не забудь только mysql настроить. Т.е. в тестах надо исключать посторонние факторы.

Я не такой спец в серверных технологиях. Я вообще-то врач, и форумами занимаюсь постольку-поскольку.

Ставил денвер, ничего в нем не менял; как встал по умолчанию, так и тестировал.

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

Ссылка на комментарий
Поделиться на других сайтах

FULLTEXT индекс перестраивается

А где смотреть, Фуллтекст у меня или нет? :D

 

(Скриптег у меня кстати что-то не запустился на Денвере. Просто как бы тупо обновляется, ничего не делая)

Ссылка на комментарий
Поделиться на других сайтах

(Скриптег у меня кстати что-то не запустился на Денвере. Просто как бы тупо обновляется, ничего не делая)

Попробуй мой: http://pharm-forum.ru/uploads/sqlexport.zip

Просто кинь в корень форума и запускай. Настройки БД он сам подсосет из conf_global.php :D

Ссылка на комментарий
Поделиться на других сайтах

А где смотреть, Фуллтекст у меня или нет? :D

Выполнить запрос

SHOW CREATE TABLE ibf_posts

, если в результате в запросе будет FULLTEXT KEY `post` (`post`), то фултекст.

 

А так это можно посмотреть в настройках поиска в админцентре.

Ссылка на комментарий
Поделиться на других сайтах

Как ты думаешь, если файл станет меньше по размеру в n раз скорость его обработки не уменьшится?
Смотря что ты подразумеваешь под обработкой ;)

Что-то вы, товарищи, заблудились в трех соснах :D

 

А я ж написал:

Правильно. Ключевая фраза "в поисках нужного блока" после того как блок станет известным из индекса.

Поиск блока - это открытие файла с данными и перешагивание к нужному сегменту.

Вот именно эта операция и станет быстрей.

 

Опять не соглашусь. Полнотекстовый индекс меняется всякий раз при изменении значений полей, входящих в этот индекс. В обработке FatCat-а эти значения изменяются - заменяются на ссылку на javascript или совсем стираются (сорри, не вчитывалась в подробности). Значит, и полнотекстовый индекс меняется.

Бред.

Полнотекстовый индекс - это индекс слов, входящих в конкретный пост.

Если слов в посте становится меньше, то и индекс становится меньше. Он перестраивается.

А собственно почему он должен содержать указания на несуществующие слова?

 

Кстати.

Модификация давно сделана, поэтому переезжаем в Tips&Tricks

Ссылка на комментарий
Поделиться на других сайтах

Если слов в посте становится меньше, то и индекс становится меньше. Он перестраивается.

А собственно почему он должен содержать указания на несуществующие слова?

Именно это я и имела в виду - что полнотекстовый индекс уменьшается при удалении значений. Где у меня написано обратное?

 

Поиск блока - это открытие файла с данными и перешагивание к нужному сегменту.
Вот именно эта операция и станет быстрей.
Какого файла - с данными? Ну, это будет оочень тонкая разница в производительности... и то - если не забыть сделать оптимизацию после "подрезания".

 

На провайдера мне грех жаловаться
мне бы такой не подошел. Если он от ibf_posts размером в 60 мб начинает тормозить, то с моими 1.4 гб (данные + индекс) он вообще бы не справился.

 

Больше не хочу мешать :D пусть этим модом пользуются те, кто считают его полезным.

Изменено пользователем l-k
Ссылка на комментарий
Поделиться на других сайтах

Для модификации от theIggs добавил возможность архивации в файлы с последующим инклайдом на страницы.

Кроме , проблем с отображением топиков нет.

 

http://www.ibresource.ru/forums/index.php?...st&p=294581

Ссылка на комментарий
Поделиться на других сайтах

  • 4 недели спустя...

мдя.. везет вам проггерам...

соображаете во всём этом ))

 

вот у меня тоже свой сервер..... 2 гига оперативы...

под мускуль определено 512 мб + 128 мб....

 

табличка posts такая...

Данные 397,220 КБ

Индекс 267,948 КБ

Всего 665,168 КБ

 

вся база форума чуть больше 700 мб...

 

-----------

 

я уже наблюдал небольшие тормоза при увеличивающейся базе.... удалял старые темы, база становилась меньше... тормоза пропадали....

тормоза не при поиске, а именно при открытии страниц в больших темах... и в первую очередь - при модификации базы - создание тем, ответ в тему.... иногда даже сообщение в тему отправлялось.. а потом видимо какие-то процессы пересчета шли.... и страница подвисала.. можно было смело ее закрывать, тема уже создавалась... но просто в статистике у нее было 0 просмотров например...

 

мне объясняли так, что вся табличка помещается в оперативную память... т.е. она весит 700 мб и оперативной памяти стало быть желательно иметь не меньше 700 мб... это так??? в самом упрощенном виде - это так??

 

стало быть я и всегда работал над уменьшением базы...

 

l-k

 

то с моими 1.4 гб (данные + индекс)

 

скажите, пожалуйста, какая у вас конфигурация сервера? интересует прежде всего оперативная память...

 

-------

 

люди, скажите мне...

 

вот у товарища Экслера

http://forum.exler.ru/arc/

 

в чем смысл таких архивов?? как они организованы... можно это как-нибудь определить невооруженным глазом?

Ссылка на комментарий
Поделиться на других сайтах

вот у товарища Экслера

http://forum.exler.ru/arc/

 

в чем смысл таких архивов?? как они организованы... можно это как-нибудь определить невооруженным глазом?

Похоже, что это в поддиректори стоит второй движок, работающий с другой БД. Архивные сообщения удаляются из БД основного форума и переносятся в БД архивного форума.

Ссылка на комментарий
Поделиться на других сайтах

А статистика интересно как от этого считается?.. Всё дело в статистике. Иначе я бы и сам уже 3 форума поставил в разные папки)
Ссылка на комментарий
Поделиться на других сайтах

Технически со статистикой понятно. Статистика хранится в ibf_stats, так что при перемещении постов в архивный форум информация в ней не изменится. Единственное, при пересчёте сообщений через админку нужно дописать в код обращение к другой БД и учёт сообщений в ней.
Ссылка на комментарий
Поделиться на других сайтах

Да может просто другие разделы.

Переносится из раздела в раздел, а таблица одна.

Ссылка на комментарий
Поделиться на других сайтах

скажите, пожалуйста, какая у вас конфигурация сервера? интересует прежде всего оперативная память...
Очень хорошая :D Сейчас-то у нас два сервера (почему так - отдельная история ;) ). На одном из них только mysql и немного статики, памяти 4Гб. Там не только индексы в памяти, там 3Гб данных закэшировано, т.е. фактически вся БД в памяти. Но год назад все, и php, и mysql работали на одном сервере с 2Гб памяти, ibf_posts был где-то 900 тыс. сообщений, и ничего, mysql работал довольно шустро, НО без fulltext. Был обычный поиск внутри отдельных тем, поиск по названиям тем, и был поиск от Гугля.

 

У нас сейчас есть "архив", это просто еще одна таблица с такой же структурой, как ibf_posts, но без того самого полнотекстового индекса. Там сейчас 560 тыс. записей, в основной ibf_posts - 1200 тыс. На нашем форуме много длинных тем "с продолжениями". Когда очередная часть такой темы закрывается, сообщения этой темы сносятся в этот архив. Запись с темой остается в ibf_topics, там есть поле "archived", 0 - обычная тема, 1 - "архивная". Что такая схема дает? Уменьшение fulltext и других индексов. Архив просматривается редко, поиск по всему архиву не нужен, от гостей (и поисковиков) закрыт.

 

тормоза не при поиске, а именно при открытии страниц в больших темах..
У вас какая версия форума - 1.3? Не знаю, какие там запросы при просмотре тем. В 2.0, действительно, чем больше тема, тем дольше открывается, т.к. при этом mysql должен сперва выбрать все записи, относящиеся к теме, отсортировать по pid (или post_date, в зависимости от выбранного типа сортировки), затем выбрать нужную страницу. Это в 2.0 вылечивается добавлением еще одного поля в индекс topic_id - изначально там topic_id,queued, надо добавить pid (или post_date). И в запросах заменить "queued<>1" на "queued=0" :)

 

мне объясняли так, что вся табличка помещается в оперативную память
часто используемые файлы помещаются в оперативную память, так что да, чем больше памяти, тем лучше.

 

Судя по тому, что на форуме Экслера время от времени "идет перенос данных в архив" и форум при этом недоступен, то у них там отдельная БД для архива, куда из основной БД время от времени сносятся закрытые темы и сообщения. Статистика у архива и форума там разная.

Ссылка на комментарий
Поделиться на других сайтах

  • 1 год спустя...

вот как я трахаюсь с уменьшением БД ))

 

Скачиваю все странички флешгетом...

И во фронтпейдже по алгоритму массово меняю куски кодов

 

к примеру:

 

=========================================== 4. заменить

 

"); cur_page = 1;

if ( total_posts % per_page == 0 ) { pages = total_posts / per_page; }

else { pages = Math.ceil( total_posts / per_page ); }

msg = "Введите номер страницы, к которой хотите перейти." + " " + pages;

if ( cur_st > 0 ) { cur_page = cur_st / per_page; cur_page = cur_page -1; }

show_page = 1;

if ( cur_page < pages ) { show_page = cur_page + 1; }

if ( cur_page >= pages ) { show_page = cur_page - 1; }

else { show_page = cur_page + 1; }

userPage = prompt( msg, show_page );

if ( userPage > 0 ) {

if ( userPage < 1 ) { userPage = 1; }

if ( userPage > pages ) { userPage = pages; }

if ( userPage == 1 ) { start = 0; }

else { start = (userPage - 1) * per_page; }

window.location = url_bit + "&st=" + start;

}

}

//-->

</script>

 

<!--IBF.BANNER-->

 

на

 

//-->

 

<!--IBF.BANNER-->

 

=========================================== 5. заменить

 

процедура трудоемкая... требует корректировки постоянной в кодах....

около получаса где-то...

 

на выходе получаем

http://yarportal.ru/arc/ooorsu/topic6869s0.html

через ssi вставляю нужные мне баннеры и счетчики на все полученны хтмл-страницы

 

тему из базы можно грохнуть....

 

------

 

вот автоматизировать бы этот процесс....

написал бы добрый человек какой скриптяру перевода в чистый хтмл и продавал бы...

тысячи 3 нормальная цена этому срипту

Ссылка на комментарий
Поделиться на других сайтах

написал бы добрый человек какой скриптяру перевода в чистый хтмл и продавал бы...

тысячи 3 нормальная цена этому срипту

У меня сделано поболее.

 

1. Большие посты хранятся не в БД, а в файле. Причем, файл на лету жмется в gZ и разжимается при показе; поэтому и места на диске занимает не много. Заодно это позволяет при необходимости править текст сообщения по ФТП. Примеры:

http://vesvalo.net/index.php?showtopic=2964 - сообщение;

http://vesvalo.net/arc/69/585.arc.gz - файл текста сообщения.

 

2. Для старых топиков существует упаковка: все посты автоматически убираются под спойлеры с указанием автора и времени в заголовке спойлера. Таким образом весь топик занимает лишь одну строку в таблице сообщений, да и то инфа сидит в файле. В принтверсии спойлеры развернуты. Примеры:

http://vesvalo.net/index.php?showtopic=205 - архивированный топик;

http://vesvalo.net/index.php?act=Print&amp...p;f=6&t=205 - он же в принтверсии;

http://vesvalo.net/arc/5/115.arc.gz - файл.

 

3. Для "бесконечно продолжающихся" топиков в один клик из опций модератора выносится в архивный топик первая сотня старых ответов; линк на архив добавляется в старт топика. Примеры:

http://vesvalo.net/index.php?showtopic=777 - холивар с кучей ссылок (звездочки) на архивы в топикстарте;

http://vesvalo.net/index.php?act=Print&amp...f=10&t=9065 - одно из архивированных по ссылке;

http://vesvalo.net/arc/189/725.arc.gz - файл.

 

Таким образом, сейчас при 200 000 сообщений в форуме, у меня вес таблицы ibf_posts составляет меньше 50 мб; плюс 27 мб зипок в файлах от архивированных топиков.

 

 

Оно может не так красиво... Зато за час работы я элементарно ужимаю в архив полторы сотни топиков. Да и то бОльшую часть времени отнимает не само ужимание, а принятие решения какой топик будем ужимать, а какой оставить несжатым.

Изменено пользователем FatCat
Ссылка на комментарий
Поделиться на других сайтах

разрабочки ipb странные люди...

все что-то там улучшают косметически...

принципиально нового ничего нет...

 

а вот решение проблемы разраст. базы так и не делают официально...

думают, что форумы вечно мелкие будут

Ссылка на комментарий
Поделиться на других сайтах

Никак не пойму, в чем польза от переноса только одного поля post из таблицы ibf_posts во внешние файлы.... В любом же случае все выборки и запросы прорабатываются по все той же огромной таблице, пусть в ней одно поле и будет поменьше размером....

 

И потом, раз уж решили вынести, почему именно таким образом - через JavaScript? Что мешает чуть-чуть подредактировать скрипты форума, и через fopen вычитывать содержимое внешних файлов сразу в код страницы?

 

Конечно, память и производительность отрисовки просто страницы чуть выигрывает в случае с JS, но, и это важно, каждый визит пользователя будет вызывать еще 30-50 HTTP-запросов за скриптами с контентом... На больших форумах и на старых ПК у пользователей это трудно не почувствовать.

 

Если хочется разгрузить таблицу ibf_posts, логично сделать систему таблиц ibf_archive_{$forum_id}, куда автоматически перемещать записи из ibf_posts для определенных форумов. Придется подправить только mysql-выражения(!), перенаправив запросы на соответствующую форуму таблицу, и можно будет вообще сохранить весь функционал форума. Разве такое решение не выглядит рациональнее?

Ссылка на комментарий
Поделиться на других сайтах

Разве такое решение не выглядит рациональнее?

 

На практике - нужно будет переписать огромное количество кода, чтобы всё работало. На такое кол-во человеко-часов проще купить несколько современных серверов.

Ссылка на комментарий
Поделиться на других сайтах

Никак не пойму, в чем польза от переноса только одного поля post из таблицы ibf_posts во внешние файлы.... В любом же случае все выборки и запросы прорабатываются по все той же огромной таблице, пусть в ней одно поле и будет поменьше размером....

 

И потом, раз уж решили вынести, почему именно таким образом - через JavaScript?

Сударыня, посмотрите дату первого сообщения топика: 2 года назад.

И посмотрите мое вчерашнее сообщение #95 на этой же странице всего двумя сообщениями выше Вашего.

Если после этого останутся "почемуки" и "зачемки", я охотно выслушаю Ваши идеи по улучшению.

 

 

На практике - нужно будет переписать огромное количество кода, чтобы всё работало. На такое кол-во человеко-часов проще купить несколько современных серверов.

Я детально прорабатывал идею возможности интеграции нескольких таблиц сообщений. Увы, это тупиковый путь: на форумах с сотней тысяч постов оно будет давать выигрыш, но уже при миллионе постов начнутся проигрыши.

Проблема выбора двух тупиков:

- если не разрешать в одном топике хранить посты из разных таблиц - архивированные темы должны быть запрещены к записи, исключены из поиска и т.д., то есть никаких преимуществ перед файлами.

- если разрешить - лавинообразное увеличение нагрузки на php, на больших тредах потери производительности php будут превышать выигрыщ в sql...

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.