• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
Есть веб-сайт с документами (~1000 документов)
Задача иметь иметь по каждому документу ежемесячную статистику уникальных просмотров по каждому разделу.
Также необходимо в дневное время добиться максимально быстрой загрузки документов на веб-сайте.
Ежедневно происходит порядка 10 000 просмотров суммарно.
Предполагаемый процент неуникальных и ботов ~ 20%
Сейчас реализован подсчет лотусовым агентом по первому варианту, вопрос есть ли смысл например перейти на второй вариант или как то еще реализовать?

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

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

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

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

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

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

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

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
Вот что показывает профилирование текущего агента

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
7 940
609
BIT
210
статистика, быстрая отдача статики - это все вопросы фронтэнда
его и надо ставить/настраивать
 

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
статистика, быстрая отдача статики - это все вопросы фронтэнда
его и надо ставить/настраивать

С общей статистикой вполне справляется яндекс метрика и гугл аналитик.
Задача стоит посчитать и отобразить в разрезе просмотров 1 документа в различных разделах.
Также уникальный просмотр является конверсией для учета тем же гугл аналитиком и другими системами.

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

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

garrick

Lotus Team
26.10.2009
1 349
151
BIT
176
Мне кажется второй вариант более эффективный. Более того, я бы не стал заморачится с поиском какого-либо документа (это время), а просто писал бы при открытии документа в базу новый документ с необходимыми данными (Дата/Время, Код страницы/документа = UNID, IP и пр. того, кто открывает документ). Потом, ночью, по этим данным можно строить любые отчёты, собирать статистику и пр.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
вот пример лога 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

Lotus Team
16.02.2004
556
26
BIT
40
То есть, как вариант, еженощно брать вчерашний текстовый файл лога домино и скриптом его распарсить, вытянув оттуда необходимые данные, верно? А для простоты исключить из этого лога запись туда запросов картинок и ботов в настройках сервера.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Ведь все можно сделать и на лотусе
еще как можно
только насколько это будет оптимизировано, будет зависеть только от вашего знания механики сервера

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

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
еще как можно
только насколько это будет оптимизировано, будет зависеть только от вашего знания механики сервера

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

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


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

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

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
Перевел подсчет месячной статистики на профильные документы. Работает быстро.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!