Pull to refresh

Comments 21

А можно было написать на nodejs или golang, тем самым хранить все данные прямо в памяти программы и такими образом отказаться от бд. Вот это скорость )

Честно говоря, почти весь топчик в финале был забит плюсами ;)
nodejs почему-то вообще не взлетел. А вот go — да, дал жару!
Я не сторонник nodejs… А вот вариант попробовать на go был. Но времени на изучение мало. Да если смотреть с другой стороны — весь топ забит go и с++, если посмотреть исходники думаю там будет 90% совпадения кода относительно каждого языка. Задача маленькая особо писать там не чего. Хоть какое-то разнообразие внес на php)
Лучшее решение на nodejs — на 152 месте. Очень плохо она себя показала.

На самом деле если совсем извращаться на PHP можно было бы взять Thread safe версию и сделать php extension на C++ и в нем уже хранить все данные прямо в памяти. Правда я так понимаю придется использовать apache а он вроде как работает через блокирующие сокеты и соответственно решение получится все равно медленным. Кстати если посмотреть на Java решения, вроде бы там тоже в основном через JNI использовали код на C++

Только обертка над epoll. Вся логика и все-все-все были на чистой Java.

А можно вопрос, раз уж Вы в теме? А разве netty проигрывает epoll?

Тут конечно организаторы наверное еще просветят какие технологии использованы в топе, но я предполагаю что победил такой стек: C++, сервер на голом epoll, lockfree структура для хранения данных в памяти. По сути изначально видимо был тонкий намек на использование tarantool, но серверов на tarantool в топе не заявлено. В целом выбор вполне логичный с учетом отсутствия требования на персистентность данных(хотя бы WAL) и необязательность соответствие ACID

А какое было итоговое время?
Я писал на php и swoole. Все данные в памяти.
В старой таблице у меня было 46.9 секунд, а в новой 100к (до середины обстрела отвечаю в среднем за 0.001 секунды), а с середины по 0.3 из-за того что использую только одно ядро процессора из четырёх.
Сейчас переписываю, на два процесса (на четыре мне памяти не хватает). Хочу получить около 1000 секунд.
Во время оптимизации нашёл пару любопытных моментов при работе с массивами. Хочу статью написать на хабре на следующей недели.
image
На старой таблице 156, на новой 805 524. У меня там еще начались проблемы с начальной загрузкой данных, из-за этого не успевал на начало обстрела и дальше все по наклонной — сервер в 502 уходит. Может успею пока песочница открыта подправить.
Пытался монго использовать, результат вышел хуже чем с mysql(
там всё в памяти нужно хранить.
какого типа были таблицы в mysql? MEMORY Storage Engine?
я использовал sqlite в памяти? $pdo = new PDO('sqlite::memory:');
потом переписал на swoole_table (использует shared memory), а сейчас на SplFixedArray().
Пробовал на nodejs — работает медленнее, тестовый пример с отдачей «hello world» работает на 20% медленнее, чем уже полностью написанное приложение на php.
MyISAM, пробовал MEMORY, но не получилось корректно настроить, на маленьких данных прокатывало, на больших ошибки сыпались, возможно в память не помещались данные. Либо я мало выделял. Про swoole_table вообще не слышал.
Эх, жаль, я пропустил все и 6 дней песочнице осталось. Успел пока только собрать образ под Elixir. К реализации сервера пока не приступил.
Пожалуйста, продлите хотя бы на пару недель!
Сервера вскоре потребуются для следующего чемпионата, будем там развлекаться :)
>Тесты выдали 133 штрафные секунды, вместо 250 на InnoDb.
Для тех, кто не учавствовал в конкурсе — это старое время в старом рейтинге, где победитель на C имел около 15 сек штрафа.
В новом рейтинге победитель на С имел около 130.
я хотел сделать сравнение с hyper, у него есть HelloWorld пример, но нет простейшей инструкции как это всё собрать и запустить, где всё очень просто: go get… и поехали
На 36м месте есть решение вроде бы как на rust. Может автор напишет.
Sign up to leave a comment.

Articles