Alexander
у Никиты libpq но бинарный протокол его
Alexander
т.е. все те же проблемы остаются
Cheese
я всегда думал, что libpq — это самый нативный способ. то есть ниже идёт только внутренный протокол, совместимость которого никто не гарантирует
Aleksei (astynax)
Потому что в Go линковать внешее не любят
Alexander
вон у Дениса, пришлось на RTS=-N1 переходить
Alexander
ибо тормозило
Aleksei (astynax)
Кмк, поддерживать свою версию либы для постгри, это тяжко
Alexander
лучше иметь говно, которое убивает производительность на 20-99%?
Alexander
или переписать pg-simple (что не факт, что в принципе возможно)
Cheese
там свой шедулер, конкурирующий с нашим RTS?
Alexander
я думаю там выделение памяти попадающее в largeobjects или как-то на одну капабилитю
Alexander
в итоге параллельная сборка мусора деградирует до того, что только 1 тред работает
Alexander
а остальные на спинлоке
Alexander
т.е. в бизилупе
Alexander
так что работает все, а работу делает только 1
Alexander
в общем по мне так нативный драйвер (написанный в основном), это лучше чем воевать с pg-simple
Alexander
тем более, что в других языках (более чем одном) этим путем пошли достаточно успешно
Dmitrii
тем более, что в других языках (более чем одном) этим путем пошли достаточно успешно
Насколько сложно будет реализовать такой драйвер на Haskell? Например, человеку, который не писал драйверы для БД никогда, но знает сносно Haskell? Достаточно ли реализовать только протокол (и вообще, где этот протокол-то описан) или нужно применить мозг, чтобы аккуратно подумать о перформансе и многопоточности?
A64m
уже реализован
Alexander
но он есть
Alexander
https://github.com/postgres-haskell/postgres-wire
Dmitrii
но он есть
То есть уже можно тащить в продакшн вместо postgresql-simple смело, например?
Alexander
но там нужно: 1. привязки к библиотекам persistent, opaleye, hasql, чтобы можно было взять и заменить и посмотреть что с твоим проектом 2. документация / туториалы (?) 3. утилиты (?) типа как в pgsimple есть много дополнительных фич
Alexander
нет
Alexander
т.е. нужна ещё работа поверх
Alexander
как сказал @VividDesires сделать совместимый интерфейс с pg-simple тяжело, но вот заставить более высокие либы работать поверх pg-wire можно
Alexander
вообще было желание сделать хакатон по всему этому, но не факт, что взлетит
NC
А это асинхронный с бинарным форматом
NC
В теории можно переключить на текстовый и засинхронить, но у коллеги возникли дополнительные проблемы с этим год назад
NC
Собственно он подавляющую часть кода написал
Alexander
@VividDesires вообще если ты сможешь скординировать как-то effort то можно начать (у меня правда ничерта времени на opensource пока нет)
NC
Как минимум я сам начну
Alexander
вон у ребят вроде есть целые полдня*человек на opensource
Dmitrii
У нас пока еще не все свои идеи кончились для своих проектов, чтобы еще БД заниматься) Мы пока на проде используем postgresql-simple и это все равно бекенд работает в целом намного быстрей чем прошлый, написанный на Node.js И так не для всего есть библиотеки, что приходится самим писать, поэтому еще и postgresql тащить нет сил... Могу разве что так сделать! * https://github.com/morphismtech/squeal/issues/63
NC
Это будет считаться за рекламу компании, хех
Alexander
а у меня где встречалось решение сделать 1 капабилитю было ок
Alexander
а в другом и сможет выдержать нормально нагрузку раз в 10 выше текущей
Anonymous
у нас нету ни одной приличной low level либы работающей с pg
У вас и по качеству кода нет ни одного хорошего драйвера. Помню как-то ради интереса выбрал одну реализацию, чтобы посмотреть как промышленный код на хаскелл выглядит. А там сплошной liftM5/liftA5. Выглядело так себе, крякнул и закрыл
Anonymous
А в чём проблема с liftM5/liftA5? Ну, кроме функций принимающих 5 аргументов.
У меня с непривычки глаз задергался. И это я еще тогда не знал о монад трансформерах.
Λrtem
Я как-то раз открыл код проекта на языке X, не понял его, и решил, что на языке X не бывает хорошего кода
NC
Я ковырялся в либах 2002ого и они норм были написаны
Зигохистоморфный
Я как-то раз открыл код проекта на языке X, не понял его, и решил, что на языке X не бывает хорошего кода
так делают жсеры, потом говорят, что хаскель страшный и не практичный
саша
кислота пошла
Anonymous
и на чем же ты пишешь родной?
На чем потребуется. Сейчас бы спрашивать на чем, вместо "что".
Зигохистоморфный
Anonymous
> нет ни одного > выбрал одну правильно
На какую версию мне стоит посмотреть?
Alexander
драйвера к postgres?
Anonymous
драйвера к postgres?
Да. Чтобы получить представление о хорошем и эффективном коде
Alexander
есть 3 либы которые можно назвать драйвером: - postgres-wire (ссылку вы видели выше) - postgresql-libpq - odbc посмотрите например postgresql-libpq например как самую популярную
Alexander
хотя я не уверен, что там хороший и эффективный код
Alexander
liftA* там нету
Alexander
даже не знаю в какой либе дров к pg они могли быть
Alexander
но учитывая, что это байндинг к либе - код там специфический
Vladislav
первая часть курса по хаскелю
Vladislav
вторая часть курса по хаскелю
Vladislav
15 процентов дошли до «конца» в первый раз. из них дошло 9 процентов на втором курсе. итого, в хаскеле до финала доходит 1,6 процентов.
Vladislav
Это со степика
Alexander
вторая часть скучновата и сбивчива
Alexander
там возникает очущение, что ты что-то делаешь, но не ясно зачем
Alexander
в формате степика даже не знаю
саша
там возникает очущение, что ты что-то делаешь, но не ясно зачем
ну часть с парсером весёлая, но это самое начало
Alexander
ну там начинаются копипасты инстансов 100500 раз
Vladislav
конечно, о хаскелистах как о небожителях думают, раз они прошли такой отбор.
Alexander
т.е. оно *нужно* для понимания
Alexander
но не все выдержат
Alexander
демидовича тоже не все прорешивают
Anonymous
даже не знаю в какой либе дров к pg они могли быть
Вот еще вариант https://github.com/nikita-volkov/hasql Тот код, найти не могу, но мне точно не привидилось