Comments 21
А можно было написать на nodejs или golang, тем самым хранить все данные прямо в памяти программы и такими образом отказаться от бд. Вот это скорость )
nodejs почему-то вообще не взлетел. А вот go — да, дал жару!
На самом деле если совсем извращаться на PHP можно было бы взять Thread safe версию и сделать php extension на C++ и в нем уже хранить все данные прямо в памяти. Правда я так понимаю придется использовать apache а он вроде как работает через блокирующие сокеты и соответственно решение получится все равно медленным. Кстати если посмотреть на Java решения, вроде бы там тоже в основном через JNI использовали код на C++
Тут конечно организаторы наверное еще просветят какие технологии использованы в топе, но я предполагаю что победил такой стек: C++, сервер на голом epoll, lockfree структура для хранения данных в памяти. По сути изначально видимо был тонкий намек на использование tarantool, но серверов на tarantool в топе не заявлено. В целом выбор вполне логичный с учетом отсутствия требования на персистентность данных(хотя бы WAL) и необязательность соответствие ACID
Я писал на php и swoole. Все данные в памяти.
В старой таблице у меня было 46.9 секунд, а в новой 100к (до середины обстрела отвечаю в среднем за 0.001 секунды), а с середины по 0.3 из-за того что использую только одно ядро процессора из четырёх.
Сейчас переписываю, на два процесса (на четыре мне памяти не хватает). Хочу получить около 1000 секунд.
Во время оптимизации нашёл пару любопытных моментов при работе с массивами. Хочу статью написать на хабре на следующей недели.
Пытался монго использовать, результат вышел хуже чем с mysql(
какого типа были таблицы в mysql? MEMORY Storage Engine?
я использовал sqlite в памяти? $pdo = new PDO('sqlite::memory:');
потом переписал на swoole_table (использует shared memory), а сейчас на SplFixedArray().
Пробовал на nodejs — работает медленнее, тестовый пример с отдачей «hello world» работает на 20% медленнее, чем уже полностью написанное приложение на php.
Пожалуйста, продлите хотя бы на пару недель!
Для тех, кто не учавствовал в конкурсе — это старое время в старом рейтинге, где победитель на C имел около 15 сек штрафа.
В новом рейтинге победитель на С имел около 130.
Опыт разработки высоконагруженной системы в рамках HighLoad Cup