программерское

Mar 18, 2009 01:15

Увлечение Scala можно считать серьёзным - нашёл в нёй первую ошибку (Add: и исправил, Add2: commit#17380). Очень приятный язык. Если 5 лет назад, когда я увлекался Scheme (и даже написал её компилятор в JavaScript), была возможность в одном крупном проекте использовать любые языки и средства - я всё-таки не рискнул, а сейчас в такой же ситуации ( Read more... )

it, recommend, scala

Leave a comment

alex14san March 18 2009, 20:44:32 UTC
1) insert на страницу - абсолютно не дело, по уму надо иметь некий буфер, в котором накапливаются данные для вставки, и периодически вставлять в базу сразу всю пачку.

2) в оракле есть такое понятие - materialized view. которая может автоматически обновляться. и содержать всяческие group by.

3) в недобазах где этого нет но есть триггера делается так: заводится табличка campaign_report с первичным ключём, например (день,номер), и триггер при вставке в табличку log делает update campaign_report set x=x+1, y=y+log.y, ... при этом у тебя всегда под рукой данные для отчёта, не требущие никаких group by.

соответственно, если нужны сложные отчёты с детальной разбивкой - все ключи (fromsearchengine и другие), по которым может быть разбивка, добавляешь в campaign_report. или создаешь несколько групповых таблиц для разных отчётов.

80к это 1 запрос в секунду? баловство. даже учитывая что "ровных слоёв" не бывает, и будет 0.1 запрос ночью и 3-5 в час пик. на "рабочих" сайтах - днём, с 8 утра до 8 вечера, на развлекательных типа ннм-клуба он приходится на 10-11 вечера.

Reply

alex14san March 18 2009, 20:45:44 UTC
если нет триггеров то обновления этих агрегированных таблиц делается ручным запросами там же где и пишется log

Reply

alex14san March 18 2009, 20:47:36 UTC
если нужна разбивка по времени - делаешь заранее группировку по часам, или по 10-минутным интервалам, и в отчете можно выбрать не произвольный временной диапазон а только по заранее выбранной гранулярности

Reply

alex14san March 18 2009, 20:49:23 UTC
ну и составные индексы - наше всё

Reply

cathody March 18 2009, 20:50:39 UTC
, по уму надо иметь некий буфер,

Есть проблема: доступа к кронду нет, согласно ТЗ.

баловство

Ага. И очень обидно, когда из-за отчёта лог теряется.

По п.3 - по ТЗ минимальная гранулярность - 10 минут, в чём вся засада.

Reply

alex14san March 18 2009, 21:02:57 UTC
если у пхп есть APC буфер можно хранить в нём. 10 минут вполне нормальная гранулярность, в чём проблема-то?

Reply

cathody March 18 2009, 21:07:25 UTC
Число записей не сильно снижается, но можно попробовать (хотя поиметь 10-15 INSERT-ов на 1 track - это больно) APC буфер - в PHP4 он есть? (ТЗ не я писал, если чо).

Reply

alex14san March 18 2009, 21:28:13 UTC
так тебя число записей волнует или 10-40 секундные select-ы?

Reply

cathody March 18 2009, 21:30:19 UTC
Нащёт записей я ступил - там один доп. инсёрт возникает. Но больше волнуют 10-40 секундные селекты

Reply

alex14san March 18 2009, 21:35:39 UTC
ну и создай для них таблицы с precalculated данными

Reply


Leave a comment

Up