Правильная ссылка на эту страницу
http://az-design.ru/Support/DataBase/SQL/StatSQL002.shtml

Создание базы данных
для сбора статистики посещений WEB-сайта

       Теперь, когда у нас появились данные, их нужно положить в какую-либо упаковку. Необходимо создать базу данных, которая вмещала бы все эти данные, и разложить все данные по полочкам, т.е. по таблицам.
       База данных будет создаваться с нуля, так же как создается любой новый проект - сначала данные, потом таблицы, потом интерфейс. Следовательно и методы создания будут самые простые.
       Обычно для создания базы данных используются различные программы типа Marathon, IBToolsPro, IB_Desktop и др. Не будем обсуждать достоинства или недостатки этих программных средств. Главная проблема в том, что при интерактивном изменении структуры БД возрастает вероятность ошибки (трудно запомнить, что делал вчера). Самый простой способ - написать SQL-скрипт и запустить его через WI_SQL (IB_SQL). Для других СУБД используется подобный инструмент, входящий в состав этих СУБД. Преимущество этого способа не только в его простоте. Первое - это то, что все действия фиксируются, как нормальной программе, второе - WI_SQL записывает в отчет ошибки выполнения SQL команд. Таким образом поиск глупых ошибок можно переложить на СУБД. И в-третьих, пока проект находится на стадии ИДЕИ, не требуется разработка каких-либо дополнительных средств.
       Итак, начнем. Во-первых, нужно настроить параметры сессии и создать саму Базу Данных:

/*** СОЗДАНИЕ БАЗЫ ДАННЫХ АНАЛИЗА ПОСЕЩЕНИЙ САЙТА  ***/
/* начало работы 02.01.2002г
  СУБД InterBase v_5.6
 
*/
SET NAMES WIN1251; /* Устанавливает кодировку для сессии */
SET TIME ON;       /* Для полей Date показывает время    */
SET STATS OFF;     /* Включить/выключить статистику      */
SET AUTODDL ON;    /* Включить/выключить Auto Commit DLL */
SET ECHO ON;       /* Включить выключить эхо             */
 
CREATE DATABASE 'azbook.rt-press.ru:D:\Firms\AZDesign Corp\wwwStat.gdb'
                 USER 'SYSDBA'  PASSWORD 'masterkey'  
                 PAGE_SIZE=4096 DEFAULT character set win1251;
COMMIT;
/* Измените путь к базе данных и ее имя на реальные */

       Для того, чтобы указанный к базе данных путь "azbook.rt-press.ru" работал, требуется правильно настроенный DNS в протоколе TCP/IP. (Естественно, что путь к Базе Данных нужно прописать тот, который используется у Вас.) В противном случае можно использовать другой вариант:

CREATE DATABASE '\\AZSRV\D:\Firms\AZDesign Corp\wwwStat.gdb'
                 USER 'SYSDBA'  PASSWORD 'masterkey'  
                 PAGE_SIZE=4096 DEFAULT character set win1251;

       После создания Базы Данных, к ней нужно подключиться:

CONNECT 'azbook.rt-press.ru:D:\Firms\AZDesign Corp\wwwStat.gdb' 
         USER SYSDBA  PASSWORD masterkey  CACHE 1000;
COMMIT;


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

/* Domain definition - описание доменов   */
CREATE DOMAIN AZLEGEND as CHAR(2046)      character set WIN1251;
CREATE DOMAIN AZTITLE  as CHAR(254)       character set WIN1251;
CREATE DOMAIN AZLNAME  as CHAR(62)        character set WIN1251;
CREATE DOMAIN AZNAMES  as CHAR(30)        character set WIN1251;
CREATE DOMAIN AZNOTXT  as CHAR(16)        character set WIN1251;
COMMIT;

       После чего создаем таблицы. Первая таблица VizitLog нужна для хранения тех данных, которые мы получаем от сайта, как результат работы StatSQL.cgi. Это не значит, что данные всегда будут храниться в ней - это слишком расточительно и неудобно. Кроме того, если приглядеться к полям таблицы VizitLog, окажеться что некоторые лишние или не используются. Это связано с тем, что сначала использовались все значения, которые дают переменные окружения в Perl, после анализа поступающих данных какие-то поля отбрасывались, какие-то меняли свои назначения.

/* Первичный протокол посещений (результат StatSQL.cgi) */
CREATE TABLE VIZITLOG (
       VizDate        Date,                            /* Дата визита                              */
       UserID         Integer,                         /* Код пользователя – через соккет          */
       DateFirst      Date,                            /* Дата первого визита                      */
       DateLastA      Date,                            /* Дата визита                              */
       DateLastB      Date,                            /* Дата последнего визита                   */
       RemoteIP       Integer,                         /* Адрес удаленного компьютера              */
       RemoteAddr     Char(16) character set Win1251,  /* Адрес удал. компьютера ххх.ххх.ххх.ххх   */
       RemotePort     Integer,                         /* порт удаленного компьютера               */
       RemoteHost     AZLEGEND,                        /* Имя удаленного компьютера                */
       http_via       AZLEGEND,                        /* имя Proxy-сервера                        */
       http_agent     AZLEGEND,                        /* имя браузера посетителя                  */
       http_lang      AZTITLE,                         /* языки поддерживаемые пользователем       */
       http_cache     AZTITLE,                         /* контроль состояния Cache                 */
       Server_Name    AZTITLE,                         /* Имя сервера (совпадает с именем домена?) */
       Server_Soft    AZTITLE,                         /* Программное обеспечение на сервере       */
       Server_admin   AZTITLE,                         /* E-Mail администратора домена             */
       http_host      AZTITLE,                         /* имя домена текущего сайта                */
       Server_Port    Integer,                         /* Порт сервера – 80, 8080, 8081 и т.д.     */
       Query_string   AZTITLE,                         /* Строка запроса по GET или POST           */
       http_ref       AZLEGEND,                        /* адрес страницы, откуда пришел посетитель */
       http_page      AZLEGEND,                        /* адрес страницы, куда пришел посетитель   */
       doc_uri        AZLEGEND,                        /* uri страницы, куда пришел посетитель     */
       doc_name       AZTITLE,                         /* имя документа                            */
       doc_size       Integer,                         /* размер документа в байтах                */
       doc_aDate      Date,                            /* дата последнего доступа                  */
       doc_lmDate     Date);                           /* дата последнего изменения документа      */
COMMIT;

       Итак, таблица VizitLog служит для первичного хранения данных. В основном назначение полей не требует обяснения. Поле DateFirst содержит дату первого визита пользователя, точнее дату и время, когда скрипту удалось в первый раз установить пользователю cookie. Поля DateLastA, DateLastB служат для записи даты последнего посещения. Два значения требуется для того, чтобы показывать пользователю действительно время последнего посещения(DateLastA), не не текущее.
       Поля RemoteIP и RemoteAddr, отражают одну и ту же информацию, но в разных форматах. Принято адрес компьютера в сети отображать как '193.125.19.152', т.е. четыре числа разделенных точками. Скрипт StatSQL.cgi немного модифицирует эту форму, добавляя пробелы перед каждым числом, если оно меньше 3 знаков, т.е. '193.125. 19.152' и записывает в RemoteAddr. В таком варианте адреса можно правильно сортировать при выборке из таблицы. Однако, реально адрес компьютера выражается 32-х разрядным целым числом - '-1048767592', и в таком виде он записывается в RemoteIP.
       Server_Name и http_host, как показала практика дают одно и тоже значение. Поле doc_aDate, как оказалось не имет смысла (в данном случае), так как всегда показывает время текущего доступа к странице.
       Поле Server_Soft полезное, но оно его значение всегда постоянно (мы ведь не меняем провайдера каждый день), поэтому имеет смысл его заполнить один раз, а потом отключить.
       Необходимость использования других полей будет определяться по результатам наблюдения и анализа поступающей информации.

       Таблица для данных протокола создана и нужно заполнить ее конкретными данными. Для этого нужно:
       1. Сохранить протокол, полученный по e-mail от StatSQL.cgi, в формате .txt
       2. В начало полученного файла добавить строку "/*", начинающую комментарий. Окончание комментария уже сформировано скриптом.
       3. Если в БД будет вводится только один файл, то в начало файла добавить команды подключения к БД:

SET NAMES WIN1251; /* Устанавливает кодировку для сессии */
SET TIME ON;       /* Для полей Date показывает время    */
SET STATS OFF;     /* Включить/выключить статистику      */
SET AUTODDL ON;    /* Включить/выключить Auto Commit DLL */
SET ECHO ON;       /* Включить выключить эхо             */
 
CONNECT 'azbook.rt-press.ru:D:\Firms\AZDesign Corp\wwwStat.gdb' 
         USER SYSDBA  PASSWORD masterkey  CACHE 1000;
COMMIT;


       Если файлов несколько, то сначала желательно объединить их в один, а потом добавить команды подключения к БД.
       Далее запускаем программу Interactive SQL и выбираем в меню "Run script" –

и выбираем созданный нами скрипт SQL

и на вопрос "Save output a file?" желательно ответить утвердительно, потому что в выходном файле сохраняться и сообщения об ошибках, которые помогут отладить программу.

Продолжение следует

Оглавление
Главная страница




Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:44 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/DataBase/SQL/StatSQL002.shtml