Думаю, многие пользователи Хабра уже знают, что на прошлой неделе завершился HighLoadCup от Mail.ru (из-за обилия статей участников).
Я также хотел бы поделиться своим решением с сообществом.
Описание задачи
Существует три типа сущностей: Пользователь, Местоположение, Посещение.Для доступа к ним необходимо написать REST-API, т.е.
получается, что нужно обработать 6 запросов.
- {GET, POST} /user/:id — получение или смена пользователя
- {GET, POST} /location/:id — получение или изменение местоположения
- {GET, POST} /visit/:id — получение или изменение посещения пользователем локации
- POST /user/new — добавление нового пользователя
- POST /location/new — добавление нового местоположения
- POST /visit/new — добавление нового посещения локации пользователем
Начинать
Изначально я начал писать на C++, но так и не успел его выпустить.Увидев в топе большое количество решений на Go, я решил тоже попробовать.
Мне этот язык показался гораздо более подходящим для разработки серверных приложений; он имеет весь необходимый функционал «из коробки» и очень качественный.
Однако после первых тестов стало ясно, что ни net/http, ниcoding/json не подходят для этого конкурса из-за большого количества мусора, который генерируется внутри них.
Первый раунд
Изначально данные составляли всего 200 МБ в распакованном виде, поэтому я подумал, что, возможно, можно даже хранить готовые строки JSON для каждой сущности.В качестве http-сервера по совету конкурсных гошников (спасибо им большое за помощь на старте знакомства с языком) я выбрал быстрыйhttp , для анализа JSON бугер/jsonparser (позволяет парсить без аллокаций и работать только с необходимой информацией, игнорируя остальную), а генерация производилась вручную, так как не требовалась обработка русскоязычных строк.
Теги: #Go #highloadcup #Высокая производительность #Gotype User struct {
-
Развитие Беспроводных Технологий В Erp
19 Oct, 24 -
Вм Или Докер?
19 Oct, 24 -
Оптимизация Поиска Решений На Github
19 Oct, 24 -
Плагин Для Маскировки Ввода Номера Во Входе
19 Oct, 24