Решено Прошу совета по оптимизации веб-сайта

Gandliar

Well-Known Member
Lotus team
16.02.2004
327
6
#1
Есть веб-сайт с документами (~1000 документов)
Задача иметь иметь по каждому документу ежемесячную статистику уникальных просмотров по каждому разделу.
Также необходимо в дневное время добиться максимально быстрой загрузки документов на веб-сайте.
Ежедневно происходит порядка 10 000 просмотров суммарно.
Предполагаемый процент неуникальных и ботов ~ 20%
Сейчас реализован подсчет лотусовым агентом по первому варианту, вопрос есть ли смысл например перейти на второй вариант или как то еще реализовать?

1 вариант
Есть документы месячной статистики (месяц, количество показов А, количество показов Б, количество показов С)
Есть документы ежедневной статистики (дата, ip, тип показов (А, Б или С), куки, броузер инфо)
Когда документ открывается в разделе (А,Б или С), запускается агент, который находит документ месячного показа или создает его, если его нет.
Затем в документе месячного показа, для соответствующего типа проверяется уникальность по ip и исключаются боты.
Если показ уникальный, то прибавляется 1 к показам и создается документ ежедневной статистики.
Ежедневная статистика старше 2х месяцев - просто удаляется.

2 вариант
Когда документ открывается, запускается агент, который пишет документ ежедневной статистики (неуникальный и с ботами) в базу.
Ночью агент обрабатывает документы ежедневной статистики (проверяет на уникальность по ip) и модифицирует или создает документы месячной статистики.
а) Неуникальные документы/боты и ежедневная статистика старше 2х месяцев - просто удаляется.
б) В базе статистики документ не удаляется, а "очищается", а при записи сначала берутся "очищенные", а затем если "очищенных" нет, то создаются новые.

--------------

Для ежедневной статистики сделана отдельная база, в ней порядка 226 000 доков и размер 5гб используемое место в ней 15%.

Месячная статистика находится в той же базе что и документы, доков статистики в ней 44 000 за несколько лет.

Вот думаю как минимум вынести месячную статистику в отдельную базу, чтобы ускорить открытие страниц. Заодно думаю, есть ли смысл переписать все на второй вариант, указанный выше?

Спасибо за внимание.
 

Gandliar

Well-Known Member
Lotus team
16.02.2004
327
6
#2
Вот что показывает профилирование текущего агента

base-wqo Profile
14.02.2016 14:06:04 ZE3
Elapsed time: 63 msec
Methods profiled: 18
Total measured time: 32 msec
Class Method Operation Calls Time
Document Save 2 16
View GetDocumentByKey 1 16
Document [expandedname] Set 18 0
Document [expandedname] Get 13 0
Document GetItemValue 5 0
Document ReplaceItemValue 4 0
Document UniversalID Get 2 0
DateTime LSLocalTime Get 2 0
DateTime DateOnly Get 2 0
Database GetView 1 0
Item ValueLength Get 1 0
Document GetFirstItem 1 0
Session CurrentDatabase Get 1 0
Session DocumentContext Get 1 0
DateTime TimeDifference 1 0
View Refresh 1 0
Database OpenByReplicaID 1 0
Database CreateDocument 1 0
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 483
360
#3
статистика, быстрая отдача статики - это все вопросы фронтэнда
его и надо ставить/настраивать
 

Gandliar

Well-Known Member
Lotus team
16.02.2004
327
6
#4
статистика, быстрая отдача статики - это все вопросы фронтэнда
его и надо ставить/настраивать
С общей статистикой вполне справляется яндекс метрика и гугл аналитик.
Задача стоит посчитать и отобразить в разрезе просмотров 1 документа в различных разделах.
Также уникальный просмотр является конверсией для учета тем же гугл аналитиком и другими системами.

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

Ведь все можно сделать и на лотусе :)
 

garrick

Well-Known Member
Lotus team
26.10.2009
877
75
#5
Мне кажется второй вариант более эффективный. Более того, я бы не стал заморачится с поиском какого-либо документа (это время), а просто писал бы при открытии документа в базу новый документ с необходимыми данными (Дата/Время, Код страницы/документа = UNID, IP и пр. того, кто открывает документ). Потом, ночью, по этим данным можно строить любые отчёты, собирать статистику и пр.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 483
360
#7
вот пример лога nginx
somehost - - [15/Feb/2016:12:58:36 +0300] "GET / HTTP/1.1" 200 663 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /homepage.nsf/Home?OpenPage HTTP/1.1" 200 500 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /homepage.nsf/TechPage!OpenPage&BaseTarget=FBody HTTP/1.1" 200 1036 "
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /homepage.nsf/CommonPage!OpenPage&BaseTarget=FBody HTTP/1.1" 200 915 "
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /homepage.nsf/Refresh?OpenForm&BaseTarget=FBody HTTP/1.1" 200 743 "
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /homepage.nsf/ToolBarPage!OpenPage HTTP/1.1" 200 903 "
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /homepage.nsf/stylesheet.css HTTP/1.1" 200 2579 "
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /homepage.nsf/toolbar.css HTTP/1.1" 200 2556 "
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /homepage.nsf/2c2870437213126dc325696900510748/$Body/0.EE!OpenElement&FieldElemFormat=gif HTTP/1.1" 200 3349 "
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /homepage.nsf/Information/StartPage!OpenDocument HTTP/1.1" 200 2007 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /homepage.nsf/Styles/infosheet.css!OpenDocument HTTP/1.1" 200 2603 "
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /homepage.nsf/home.gif!OpenImageResource HTTP/1.1" 200 213 "
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
somehost - - [15/Feb/2016:12:58:36 +0300] "GET /icons/ecblank.gif HTTP/1.1" 200 45 "
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
" "Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
кот. фронтом к домине и awstat спокойно покажет кол-во посещений страниц и чего угодно
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
как настроить фронт я уже описывал в админ разделе (для https)
 

Gandliar

Well-Known Member
Lotus team
16.02.2004
327
6
#9
То есть, как вариант, еженощно брать вчерашний текстовый файл лога домино и скриптом его распарсить, вытянув оттуда необходимые данные, верно? А для простоты исключить из этого лога запись туда запросов картинок и ботов в настройках сервера.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 223
24
#11
Ведь все можно сделать и на лотусе
еще как можно
только насколько это будет оптимизировано, будет зависеть только от вашего знания механики сервера

как минимум domlog.nsf положить на отдельный SSD как и TL
вот это уже будет шаг на встречу оптимизации ;)
 

Gandliar

Well-Known Member
Lotus team
16.02.2004
327
6
#12
еще как можно
только насколько это будет оптимизировано, будет зависеть только от вашего знания механики сервера

как минимум domlog.nsf положить на отдельный SSD как и TL
вот это уже будет шаг на встречу оптимизации ;)
Настроил, чтобы домино писало в текстовый файл - быстрее получается, чем в nsf. Также в настройках указал, чтобы не писало загрузки картинок, файлов, js. Еще думаю заодно исключить из лога ботов.
А винты поставил изначально sas с зеркалированием.


Спасибо за рекомендации по поводу разборки именно лога - стер эти громадные базы нафиг :) в которые писал детальную статистику. Стало работать быстрее в частности и в целом.

Осталось разобраться с месячной статистикой. Пришла мысль опробовать для этого профильные документы. Вроде как они в памяти постоянно висят.
 

Gandliar

Well-Known Member
Lotus team
16.02.2004
327
6
#13
Перевел подсчет месячной статистики на профильные документы. Работает быстро.