Подготовка тестового набора данных и структуры таблиц

Для эксперимента потребуется однородный массив данных. Стандартный формат логов веб-сервера Nginx Combined Log Format содержит IP-адрес клиента, дату и время запроса, HTTP-метод, запрашиваемый URL-путь, код ответа сервера и размер переданного ответа. В обеих базах данных нужно создать идентичные по смыслу таблицы, учитывая различия типов данных.

В PostgreSQL для сетевых адресов существует специализированный тип INET, а для дат — TIMESTAMP WITH TIME ZONE. В SQLite встроенной поддержки сетевых типов нет, поэтому IP-адрес сохраняется обычной строкой TEXT, а дата превращается в целое число формата UNIX Epoch или ISO-строку. В теоретической части работы обязательно опиши это различие, поскольку разница в хранении типов напрямую влияет на потребление оперативной памяти и скорость сканирования диска.

Методика измерений и нагрузочные сценарии

Сравнение производительности строится на четырёх изолированных тестах, которые запускаются на одной и той же машине через скрипт автоматизации.

  1. Скорость пакетной вставки 10 000 подготовленных строк с диска в базу данных.
  2. Вычисление топ-10 IP-адресов с максимальным числом обращений через группировку и сортировку.
  3. Подсчёт общего объёма переданного трафика и количества ошибок с кодами 4xx и 5xx с фильтрацией по диапазону времени.
  4. Повторное выполнение аналитических запросов после создания B-tree индекса по колонке IP-адреса и коду ответа.

Для объективности каждый запрос выполняется от 5 до 10 раз подряд. Первый «холодный» запуск фиксирует время чтения данных с диска в буферный кэш, а последующие показывают скорость обработки запроса в оперативной памяти. В итоговую таблицу проекта заносится медианное значение времени работы.

Что проверяет преподаватель

Учитель информатики оценивает научную строгость эксперимента, а не просто графики со столбиками времени. В проекте должны быть четко зафиксированы аппаратные характеристики испытательного стенда: модель процессора, объём оперативной памяти, тип накопителя (SATA SSD, NVMe или HDD) и операционная система.

Особое внимание обратят на понимание архитектуры. Преподаватель ожидает объяснения, почему SQLite при пакетной вставке в один поток способна опередить PostgreSQL за счёт отсутствия сетевых накладных расходов TCP/IP, но уступает ей в сложных агрегирующих выборках с параллельной обработкой данных.

Источники логов и инструментов

  • Открытые датасеты логов веб-серверов с платформ Kaggle или архивов NASA HTTP Server Access Logs, содержащие сотни тысяч реальных строк.
  • Скрипты на языке Python со стандартным модулем sqlite3 и библиотекой psycopg2 либо asyncpg для PostgreSQL.
  • Команда EXPLAIN ANALYZE в PostgreSQL и EXPLAIN QUERY PLAN в SQLite для демонстрации планов выполнения запросов.
  • Официальная документация SQLite по оптимизации транзакций через PRAGMA synchronous = NORMAL и режим WAL.

Частые вопросы

Хватит ли 10 000 строк для наглядной разницы?

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

Где должен работать PostgreSQL при тестировании?

Установи сервер локально на тот же компьютер, где выполняется скрипт замера, и подключайся через localhost. Это исключит влияние нестабильности домашней сети или Wi-Fi на результаты расчётов.