Подготовка тестового набора данных и структуры таблиц
Для эксперимента потребуется однородный массив данных. Стандартный формат логов веб-сервера Nginx Combined Log Format содержит IP-адрес клиента, дату и время запроса, HTTP-метод, запрашиваемый URL-путь, код ответа сервера и размер переданного ответа. В обеих базах данных нужно создать идентичные по смыслу таблицы, учитывая различия типов данных.
В PostgreSQL для сетевых адресов существует специализированный тип INET, а для дат — TIMESTAMP WITH TIME ZONE. В SQLite встроенной поддержки сетевых типов нет, поэтому IP-адрес сохраняется обычной строкой TEXT, а дата превращается в целое число формата UNIX Epoch или ISO-строку. В теоретической части работы обязательно опиши это различие, поскольку разница в хранении типов напрямую влияет на потребление оперативной памяти и скорость сканирования диска.
Методика измерений и нагрузочные сценарии
Сравнение производительности строится на четырёх изолированных тестах, которые запускаются на одной и той же машине через скрипт автоматизации.
- Скорость пакетной вставки 10 000 подготовленных строк с диска в базу данных.
- Вычисление топ-10 IP-адресов с максимальным числом обращений через группировку и сортировку.
- Подсчёт общего объёма переданного трафика и количества ошибок с кодами 4xx и 5xx с фильтрацией по диапазону времени.
- Повторное выполнение аналитических запросов после создания 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 на результаты расчётов.