- 1,214
- 1,043
Бот для получения IP адреса и информации об устройстве игрока по его нику на мобильном SA-MP сервере Mordor RP. База содержит информацию о 379 453 никнеймах и актуальна на 28.11.2020.
Использование: Прислать никнейм игрока. В случае если записей несколько: никнейм игрока и номер записи.
Ссылка: t.me/MordorRpBot
Апрель 6-го, 2023: Бот проработал более 2-ух лет и может быть остановлен в любое время (данные все равно довольно старые), юзернейм могу отдать владельцам сервера (желательно с копеечкой).
За ссылку на базу спасибо: @Aniki. За относительно недавнюю веселуху на сервере еще и @randazzo, @memir.
GitHub: https://github.com/RinatNamazov/MordorLogs
Использование: Прислать никнейм игрока. В случае если записей несколько: никнейм игрока и номер записи.
Ссылка: t.me/MordorRpBot
Апрель 6-го, 2023: Бот проработал более 2-ух лет и может быть остановлен в любое время (данные все равно довольно старые), юзернейм могу отдать владельцам сервера (желательно с копеечкой).
За ссылку на базу спасибо: @Aniki. За относительно недавнюю веселуху на сервере еще и @randazzo, @memir.
Изначально логи хранились в текстовых файлах в крайне неудобном формате и занимали физический около 9,78 ГБ, а быстрый поиск по ним было не реализовать.
Было принято решение написать свою быструю на поиск и чтение базу данных специально для этих логов. После преобразования база стала весить всего лишь 1,34 ГБ.
В качестве языка программирования использовался Golang.
# Проблемы:
1. Логи занимали слишком много места из-за кучи маленьких файлов и их не бинарной природы.
2. Поиск по ним происходил очень долго, если его вообще ждать.
# Структура нашей базы:
first_index.bin: Содержит никнейм игрока и смещение до second_index.bin. Благодаря одинаковому размеру всех элементов, можно быстро переходить к любому элементу. А из-за того что ники отсортированы, становится возможным использовать бинарный поиск позволяющий искать ник с минимальным количеством итераций.
second_index.bin: Так как один никнейм может содержать несколько данных, данный файл содержит количество этих данных и смещений до них в data.bin, позволяет быстро найти все связанные с ником данные.
data.bin: Содержит сами данные.
Больше подробностей искать в исходном коде.
# Преобразование логов в нашу базу:
Преобразование происходило в четыре этапа:
1. Парсинг логов из папок/файлов и их запись как есть в базу. На данный момент база не позволяет производить бинарный поиск и нахождение всех данных связанных с ником.
2. Оптимизация первого и второго индекса. Размер базы будет немного уменьшен.
3. Сортировка никнеймов в первом индексе. Уже можно применить быстрый поиск.
4. Сортировка второго индекса. Данные отсортированы по дате/времени.
Парсер написан без использования регулярных выражений и подобного, что тоже позволяет увеличить производительность.
Весь процесс занял около трех часов на последних версиях алгоритмов, первые версии были крайне не оптимальны.
Исходный код вместе с базой данных: *ТыК*
Было принято решение написать свою быструю на поиск и чтение базу данных специально для этих логов. После преобразования база стала весить всего лишь 1,34 ГБ.
В качестве языка программирования использовался Golang.
# Проблемы:
1. Логи занимали слишком много места из-за кучи маленьких файлов и их не бинарной природы.
2. Поиск по ним происходил очень долго, если его вообще ждать.
# Структура нашей базы:
first_index.bin: Содержит никнейм игрока и смещение до second_index.bin. Благодаря одинаковому размеру всех элементов, можно быстро переходить к любому элементу. А из-за того что ники отсортированы, становится возможным использовать бинарный поиск позволяющий искать ник с минимальным количеством итераций.
second_index.bin: Так как один никнейм может содержать несколько данных, данный файл содержит количество этих данных и смещений до них в data.bin, позволяет быстро найти все связанные с ником данные.
data.bin: Содержит сами данные.
Больше подробностей искать в исходном коде.
# Преобразование логов в нашу базу:
Преобразование происходило в четыре этапа:
1. Парсинг логов из папок/файлов и их запись как есть в базу. На данный момент база не позволяет производить бинарный поиск и нахождение всех данных связанных с ником.
2. Оптимизация первого и второго индекса. Размер базы будет немного уменьшен.
3. Сортировка никнеймов в первом индексе. Уже можно применить быстрый поиск.
4. Сортировка второго индекса. Данные отсортированы по дате/времени.
Парсер написан без использования регулярных выражений и подобного, что тоже позволяет увеличить производительность.
Весь процесс занял около трех часов на последних версиях алгоритмов, первые версии были крайне не оптимальны.
Исходный код вместе с базой данных: *ТыК*
GitHub: https://github.com/RinatNamazov/MordorLogs
Последнее редактирование: