MordorRpBot
Телеграм бот для получения IP адреса и информации об устройстве игрока по его нику на мобильном SA-MP сервере Mordor RP.
Использование: Прислать никнейм игрока. В случае если записей несколько: никнейм игрока и номер записи.
Оригинальные логи хранились в текстовых файлах в крайне неудобном формате и информация об 379453 аккаунтах занимало физически около 9,78 ГБ, а поиск по ним был крайне проблематичной затеей.
Было принято решение написать свою быструю на чтение и поиск базу данных специально для этих логов. После преобразования база стала весить всего лишь 1,34 ГБ.
Структура нашей базы:
first_index.bin
: Содержит никнейм игрока и смещение до second_index.bin
. Благодаря одинаковому размеру всех элементов, можно быстро переходить к любому элементу. А из-за того что ники отсортированы, становится возможным использовать бинарный поиск позволяющий искать ник с минимальным количеством итераций.
second_index.bin
: Так как один никнейм может содержать несколько данных, данный файл содержит количество этих данных и смещений до них в data.bin
, позволяет быстро найти все связанные с ником данные.
data.bin
: Содержит сами данные.
Больше подробностей искать в исходном коде.
Преобразование логов в нашу базу:
Преобразование происходило в четыре этапа:
- Парсинг логов из папок/файлов и их запись как есть в базу. На данный момент база не позволяет производить бинарный поиск и нахождение всех данных связанных с ником.
- Оптимизация первого и второго индекса. Размер базы будет немного уменьшен.
- Сортировка никнеймов в первом индексе. Уже можно применить быстрый поиск.
- Сортировка второго индекса. Данные отсортированы по дате/времени.