recoder: (Default)
recoder ([personal profile] recoder) wrote2015-08-03 07:06 am
Entry tags:

Приходил тут к нам Python, ел на завтрак JSON

Случилась тут у нас на работе загогулина. В процессе декомпозиции всех наших проектов на микросервисы решили мы воспользоваться шансом и поотпимизировать что можно. В частности - решили поменять JSON парсер, а то он у нас был самодельный, с поддержкой XML и хитрой валидации, но зато несовместимый ни с чем.

Пошли профайлить плюсовые JSON парсеры. Потыкали boost с его свойственными деревьями - оказалось на удивление медленно, причём и в компиляции и в рантайме. Посмотрели на Poco::JSON - более менее фурычит, хотя звёзд с неба и не хватает. Пошли смотреть что ещё бывает в современном мире C++...

А потом по приколу прогнали Python парсер на тех же тестовых данных. И тихо офигели: мерзкий питон уделал наши крутые библиотки в несколько раз. Проверили в разных аспектах - всё верно, питон быстрее плюсов. Даже для эксперимента вызвали из плюсов питоновский парсер - и он всё равно летает.

Как теперь жить с этим знанием? Переписывать всё нафик на Питоне? Таскать везде с собой кусок питона? И самый главный вопрос - как вообще такое могло получиться?!

coding

[identity profile] bash-i-buzuk.livejournal.com 2015-08-03 11:51 am (UTC)(link)
Наворочено не значит быстро :)
А GSON не смотрели? или он только на java?

[identity profile] sprocket1.livejournal.com 2015-08-03 12:56 pm (UTC)(link)
Он не мог как-то дополнительные вычислительные ресурсы задействовать? Многопоточность, например?

[identity profile] sply.livejournal.com 2015-08-03 01:02 pm (UTC)(link)
Если вы не завязаны на посторонних клиентов, то для микросервисов может оказаться удобнее MessagePack (http://msgpack.org) - можно сказать, бинарный аналог JSON. Списки, хэши поддерживает. То есть хоть бинарно, но не такая жестко как в старом RCP.

[identity profile] zubian.livejournal.com 2015-08-03 01:07 pm (UTC)(link)
flex & bison пробовали использовать?

[identity profile] juan-gandhi.livejournal.com 2015-08-03 02:13 pm (UTC)(link)
Тут два вопроса:
- а как это?
- а какая разница, все равно ж на проводах время теряется?

[identity profile] zubian.livejournal.com 2015-08-03 02:31 pm (UTC)(link)
ну это классика - генератор шифт-редьюсных парсеров на си, они как раз хороши для простых относительно грамматик, зато пипец какие быстрые - там переходы прямо через таблицу состояний идут, расходов в принципе никаких. в инете полно описаний.

[identity profile] juan-gandhi.livejournal.com 2015-08-03 02:40 pm (UTC)(link)
Два мега, нехило. Тогда да.

[identity profile] jdevelop.livejournal.com 2015-08-03 02:55 pm (UTC)(link)
а потом окажется, что жабий парсер уделает в несколько раз петоний ;)

[identity profile] mpak666.livejournal.com 2015-08-03 03:33 pm (UTC)(link)
прикольно жеж!
надо вывалить на суд общественности бенчмарки и исходники, авось и объяснения нашлись бы?!

[identity profile] vtimonin.livejournal.com 2015-08-03 03:38 pm (UTC)(link)
https://github.com/miloyip/nativejson-benchmark

Не знаю, как оно там относительно питона, но скорее всего RapidJSON быстрее будет.

[identity profile] proxfessor.livejournal.com 2015-08-03 05:20 pm (UTC)(link)
Вот даже кто-то уже попробовал: https://gist.github.com/justjkk/436828. Замечательная идея, между прочим.

[identity profile] proxfessor.livejournal.com 2015-08-03 05:23 pm (UTC)(link)
На ту же тему: читал на днях таблицу из 73000 строк и 55 колонок Питоном (pandas.readcsv) и R (readcsv). Питон прочитал а 7 раз быстрее. Крутое земноводное!

[identity profile] http://users.livejournal.com/_winnie/ 2015-08-03 05:56 pm (UTC)(link)
Если питонячий, python-only уделывает C++ - значит, в C++ какой-то ахтунг (лишние malloc, memcpy, неявные O(N^2) и тп).


Вообще вот : http://lionet.livejournal.com/118853.html




[identity profile] sleepy-drago.livejournal.com 2015-08-03 06:29 pm (UTC)(link)
обычно дело в методике теста. гдето 24 раза ничего не делается и потом ух ты как быстро. пока автор не проверит в работе ничего делать не надо тк нет смысла им мешать встраивать питон =)

[identity profile] zubian.livejournal.com 2015-08-03 06:54 pm (UTC)(link)
отлично, вот даже готовый есть по сути, хотя там его сделать вообще не проблема - JSON вообще идеальный пример для реализации.

[identity profile] the-drmad.livejournal.com 2015-08-04 12:12 pm (UTC)(link)
flex и bison это не совсем классика, это современные кликухи для lex и yacc - а вот это, действительно, классика. Может, Recoder их под этими именами знает. Впрочем, насколько я понимаю, они там своими JSON парсерами немножко другие задачи решают.