"Темы с моим участием"
shixaro
Минувшей ночью дошли руки до выполнения 619го таска, а именно: "Сделать систему как на марковском форуме, завернуть в спойлер, включать из профиля(по умолчанию - откл)".

Родная таблица phpbb_watch_topics для этих целей не очень пригодна. Лазить в таблицу с постами для выявления в каких топиках каждый отдельно взятый пользователь наследил - тоже расточительно по отношению к процессорному времени узла с СУРБД. Для хранения актуальной карты соответствий топиков и юзеров, оставивших посты там, новую таблицу сделал:



tracker=# create table phpbb_topics_withme (user_id integer not null default 0, topic_id integer not null default 0, show_topic boolean default true);
CREATE TABLE


Группа запросов, объединенная в транзакцию, для добавления новых постов на форуме у нас давно перенесена внутрь СУБД. Ее логику поправили таким образом, что при добавлении нового поста она смотрит, есть ли уже в карте (phpbb_topics_withme) связка топика, в который добавляется пост, и юзера, который этот пост сейчас пишет. Если нет, то соответственно добавляется.

Следующий этап это вывод самих таких тем. Обслуживающий эту задачу SQL-код завернут в хранимую процедуру.

Создаем новый тип:

CREATE TYPE ot_topics_with_me_type AS (topic_id INTEGER, topic_title CHARACTER VARYING, forum_id INTEGER, forum_name CHARACTER VARYING, user_id INTEGER, username CHARACTER VARYING, post_id INTEGER, topic_poster INTEGER, topic_replies INTEGER, post_time INTEGER, poster_name CHARACTER VARYING);


Пишем процедуру:

CREATE OR REPLACE FUNCTION ot_topics_with_me (INTEGER) RETURNS SETOF ot_topics_with_me_type AS $$
### Получаем параметры на входе функции
my ($uid) = @_;

my $row, $plan;
### Биндим переменные, необходимые для поиска, в запрос

$plan = spi_prepare('SELECT t.topic_id, t.topic_title, f.forum_id, f.forum_name, u.user_id, u.username, p.post_id, t.topic_poster, t.topic_replies, p.post_time
,(SELECT username FROM phpbb_users WHERE user_id=t.topic_poster) poster_name
FROM
phpbb_topics t,
phpbb_forums f,
phpbb_users u,
phpbb_posts p,
phpbb_topics_withme tw
WHERE
t.forum_id=f.forum_id
AND p.topic_id=t.topic_id
AND p.poster_id=u.user_id
AND p.post_id=t.topic_last_post_id
AND tw.user_id=$1
AND u.user_id!=tw.user_id
AND t.topic_id=tw.topic_id
AND tw.show_topic=true
AND f.cat_id<>30
GROUP BY t.topic_id, t.topic_title, f.forum_id, f.forum_name, u.user_id, u.username, p.post_id, t.topic_poster, t.topic_last_post_id, t.topic_replies, p.post_time
ORDER BY t.topic_last_post_id DESC ', 'INTEGER');

### Генерируем список согласно заданных условий
$sth = spi_query_prepared( $plan, $uid );
while (defined ($row = spi_fetchrow($sth))) {

return_next({
topic_id => $row->{topic_id},
topic_title => $row->{topic_title},
forum_id => $row->{forum_id},
forum_name => $row->{forum_name},
user_id => $row->{user_id},
username => $row->{username},
post_id => $row->{post_id},
topic_poster => $row->{topic_poster},
topic_replies => $row->{topic_replies},
post_time => $row->{post_time},
poster_name => $row->{poster_name},

});
}

return;
$$ LANGUAGE plperl;


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

А пока это не нужно. В карте мало записей:

tracker=# select count(*) from phpbb_topics_withme;
count
--------
484723


Скорость работы тоже удовлетворительная:

tracker=# EXPLAIN ANALYZE SELECT * FROM ot_topics_with_me(2);
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------
Function Scan on ot_topics_with_me (cost=0.25..10.25 rows=1000 width=156) (actual time=118.244..118.366 rows=2246 loops=1)
Total runtime: 120.428 ms

Доступ к opentorrent.ru
kolras
С утра форум стал недоступен.
Над решением данной проблемы уже работают. Причиниы возникшей проблемы тоже выясняются.

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

Дополнение к upd. По поводу деградации... Причина кроется в самопроизвольном переключений линка между машинами (тачками) на 100 Mb HF (ранее был гигабит). Но как было написано выше, над проблемой пока работают.

Доступ ко всем ресурсам izhnet.org
kolras
Ночью с 3 на 4 сентября 2011 года возникли проблемы с доступом на ресурсы izhnet.org.
Причины выясняем. Об восстановлении работоспособности сообщим позже.

upd. Работа восстановлена, но причины пока выячняются. Все последующие подробности будут тут http://opentorrent.ru/viewtopic.php?t=136632

Недоступность ресурсов izhnet.org
kolras
Ночью с 14 на 15 августа ресурсы izhnet.org стали недоступны. Причины выясняются.

upd. 11.00. Форум восстановлен, но с небольшим урезанным функционалом, кой со временем тоже вернем.

Разработка и развитие ОТ
shixaro
Длительное время разработкой занимался только я. В том числе и полностью переездом на другую СУБД, который тянулся долго, ибо резать по живому - это не очень удобно. Катастрофическая нехватка времени и новые задачи, разработка новых проектов диктуют свои условия. Чтобы мы жили и развивались дальше, двое администраторов в лице Романа Скаерова (SkYer) и Антона Бобикова (b0b1k) переквалифицированы в разработчиков.

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

Перебои со связью-2
shixaro
У аплинка нашего оператора связи наблюдаются небольшие проблемы, ввиду чего, соответственно, наблюдаются проблемы со связью и до нас из всех сетей кроме Ижевск.нэт.

Возможные кратковременные перебои со связью 13.05.2011
shixaro
Завтра с утра возможны кратковременные разрывы до нас ввиду работ по сети на тех.площадке нашего оператора связи. Ничего страшного, в общем.

Журнал изменений настроек и характеристик учетной записи
shixaro
Запилен сабж: http://opentorrent.ru/viewtopic.php?t=133705
Мы не заигрались с триггерами. Мы просто научились их правильно использовать. :D


Очередная авария
shixaro
Без аварий у нас никак.

Примерно в 13:50 стала копиться очередь к трекеру и форуму. Исследование инцидента показало, что произошло рассогласование на уровне сетевых интерфейсов между двумя нашими машинами, благодаря чему пинг резко возрос и ответы от сервера СУБД стали ходить с огромной задержкой. Почему такая хреновина произошла - пока выясняем.
А вообще, сейчас уже все работает.

Работа поиска
shixaro
Наконец-то закопано тяжкое наследие phpbb со всеми его костылями и припарками, и жалким подобием имитации FTS. За последние несколько дней трекерный поиск был переписан вообще с нуля. Все фильтры и логика работы теперь очень прозрачны. По крайней мере, для тех.персонала ресурса. :)
Теперь механизм поиска - это небольшая процедура в 130 строчек (включая комментарии) на plperl, активно использующая мощь СУБД postgresql, perl и FTS. Ну и да, активно используется предподготовка запросов, биндинг переменных, поэтому SQL-инъекции бесполезно пытаться проводить, вобщем-то. Хотя желающие, конечно, могут и будут пробовать.

http://opentorrent.ru/viewtopic.php?t=133684


Впрочем, надо признать, что иногда есть ситуации, когда никакой FTS не поможет:
user: 235414 | search_text: Дренные дечонки | sql_add: | search_poster: | time: Sun Apr 24 13:41:30 MSD 2011

?

Log in