
Nick
19.12.2017
13:41:00
потому что из доклада следует, что протокол как раз умеет
а сишная реализация нет

Юрий
19.12.2017
13:41:24
Возможно имелось в виду что-то другое

Nick
19.12.2017
13:41:58
@odomontois прокомментируй

Google

Юрий
19.12.2017
13:42:49
https://www.postgresql.org/message-id/flat/CAMsr+YFUjJytRyV4J-16bEoiZyH=4nj+sQ7JP9ajwz=B4dMMZw@mail.gmail.com#CAMsr+YFUjJytRyV4J-16bEoiZyH=4nj+sQ7JP9ajwz=B4dMMZw@mail.gmail.com
Вроде как есть планы по прикручиванию асинхронности в протокол
Нашел

Nick
19.12.2017
13:43:40
там речь идет про libpq
а не про протокол

Oleg
19.12.2017
13:44:43
libpq также именуемая выше как "говнолиба"

Юрий
19.12.2017
13:48:12
Ну тогда круто, че

Oleg
19.12.2017
13:50:25
https://www.postgresql.org/docs/devel/static/protocol-flow.html#id-1.10.5.7.4
It is not actually necessary for the frontend to wait for ReadyForQuery before issuing another command, but the frontend must then take responsibility for figuring out what happens if the earlier command fails and already-issued later commands succeed.

Юрий
19.12.2017
14:01:06
А на практике можно ли различить ответы?

Oleg
19.12.2017
14:06:48
Ну ты же помнишь, в каком порядке ты их отправлял

Nick
19.12.2017
14:08:32
там скорее всего есть id

Oleg
19.12.2017
14:10:42

Юрий
19.12.2017
14:11:41

Oleg
19.12.2017
14:14:48

Google

Юрий
19.12.2017
14:16:01
Тогда непонятно, как достигается асинхронность
Вот отправил я запрос долгий. А после него простой, но с ошибкой. Если порядок строгий - то ответ второго будет ждать долгий запрос?

Oleg
19.12.2017
14:25:22
Её нет

Юрий
19.12.2017
14:26:07
Ну я о ней говорил
Пайплайнинг без асинхронности ничего не даёт

Oleg
19.12.2017
14:26:49
В определённых кейсах

Юрий
19.12.2017
14:27:32
Все равно странно, что нету асинка

Oleg
19.12.2017
14:28:22
Зачастую ты сам можешь предсказать с какой-то погрешностью сложность запроса

sherzod
19.12.2017
14:28:49
async должен на пользовательском уровне делаться мне кажется. зачем это в бекенд тащить

Oleg
19.12.2017
14:28:55
И гонять кучи мелких независимых запросов в отдельном подключении
На уровне СУБД асинхронность есть, быстрые запросы могут обрабатываться независимо от долгих. А на уровне протокола воспользоваться этим затруднительно

Юрий
19.12.2017
14:36:08

sherzod
19.12.2017
14:39:15

Oleg
19.12.2017
14:40:05

sherzod
19.12.2017
14:41:55
знаю ПГ как пользователь, не знаю стоит ли за это платить усложнением работы с бекендом. Мне кажется это проблема на уровене пользовательского кода все-таки.

Юрий
19.12.2017
14:49:04

sherzod
19.12.2017
14:49:23
еще как изменится

Google

sherzod
19.12.2017
14:50:00
Всегда ценил ПГ за простоту. один connection один процесс. Все последовательно внутри процесса. Диагностика супер простая.

Юрий
19.12.2017
14:50:57
ну и нужно открыть 100500 конекшенов для нормальной нагрузки
а так 5 конектов открыл и готов

sherzod
19.12.2017
14:51:42
вот именно. о чём и говорят, надо просто юзать отдельные connection-ы. Не пихать сложную логику асинка в протокол.

Юрий
19.12.2017
14:52:14
соединения не бесплатные
если можно сделать больше работы с одним и тем же количеством соединений - почему нет
а так они большую часть времени стоят и ничего не делают
это же как с соединениями и блокирующими операциями. Можно отправить запрос и заблокировать поток. А можно отправить запрос и продолжить использовать поток для других вещей.

sherzod
19.12.2017
14:57:11
так так и надо делать)) зачем тут протокол? соединения в данном случае копейки, так как все равно вы их держите, и ровно столько сколько можете на стороне ПГ запустить процессов.

Юрий
19.12.2017
14:58:43

sherzod
19.12.2017
14:58:57
это копейки. установить соединение это дорого.

Mikhail
19.12.2017
14:59:04
в телеграме можно как-то к человеку вешать бейджик: "Школьник" ?

sherzod
19.12.2017
14:59:38
если будет 3 соединения и 9 postgres-процессов, то добавить 6 соединений (которые активны) ничего стоить не будет.

Mikhail
19.12.2017
15:00:21
держать в памяти таблицу соединений, которые не используются - это конечно не дорого. но обслуживать ио по множеству активных соединений - это очень дорого.

sherzod
19.12.2017
15:02:05
почему дорого? может расскажете?
от уровня jvm до ОС, как все происходит и сколько всего нужно.

Daniel
19.12.2017
15:02:55

Alexander
19.12.2017
15:04:32
Доклад Олега классный, кассандра тоже

sherzod
19.12.2017
15:04:55

Google

Юрий
19.12.2017
15:05:24

sherzod
19.12.2017
15:05:31
+ усложните работу с сервером. про оракл не скажу. postgres лучший.
ps aux | grep postgres | ... решает 90% проблем.

Юрий
19.12.2017
15:07:34
я согласен, что асинк усложнит опс, но при этом это безусловно будет значительным шагом вперед для постгри

sherzod
19.12.2017
15:08:40

Daniel
19.12.2017
15:09:26

sherzod
19.12.2017
15:10:19
если про ПГ, абсолютно согласен)

Mikhail
19.12.2017
15:11:51

sherzod
19.12.2017
15:13:13
ну да PG не коробочный продукт. linux way

Alexander
19.12.2017
15:16:34
Посоветуйте, есть REST метод, который принимает на вход JSON с кучей параметров, надо его "закэшировать", чтобы повторно не вычислять для тех же самых параметров. Но эти параметры - это класс с вложенными коллекциями, и в целом около 10 параметров разных - то есть класть их все в базу (постгрес) как поля - не вариант. Что если этот класс сериализовать в JSON с одними и теми же настройками сериализации и положить в одно поле базы и по этому полю искать. Нормальное решение или есть лучше варианты?

Admin
ERROR: S client not available

Alexey
19.12.2017
15:23:11
можно посчитать несколько хешей, чтобы на 99.99999 процентов быть уверенным что всё ок и класть в базу только хеши

Alexander
19.12.2017
15:23:44
ну потом всё равно надо будет сравнить с оригинальным запросом, в случае если хэш совпал
но такой вариант тоже норм

Alexey
19.12.2017
15:24:01
ну для этого я предложил считать 2 хеша

Mikhail
19.12.2017
15:24:02

Александр
19.12.2017
15:24:04
но есть нюанс, json не гарантирует же порядок полей

Mikhail
19.12.2017
15:24:26

Alexander
19.12.2017
15:24:41
ну условно гарантирует, если использовать один и тот же механизм

Google

Alexey
19.12.2017
15:25:17
Ну если база резиновая, то можно класть числовой хеш + json

Alexander
19.12.2017
15:25:29
да, вполне резиновая

Alexey
19.12.2017
15:25:44
так будет 100% гарантия и скорость приемлемая

Oleg
19.12.2017
15:26:00
полагаю, что можно выбрать один хороший хеш и забить

Alexey
19.12.2017
15:26:15
Ну вообще да, я тоже так думаю

Oleg
19.12.2017
15:26:29
типа там sha256
но всё равно проблемы с репрезентацией параметров, нужно очень очень быть уверенным, что генерируешь одну и ту же символьную последовательность
а какого рода коллекции?

Юрий
19.12.2017
15:29:00
есть лучшие решения
а почему постгря в качестве кеша?

Alexander
19.12.2017
15:31:05
коллекции - листы, отсортирую их перед сериализацией

Oleg
19.12.2017
15:31:30
листы чего?

Alexander
19.12.2017
15:31:49

sherzod
19.12.2017
15:34:18

Alexander
19.12.2017
15:34:48
параметры анализа, в спарк уходит

sherzod
19.12.2017
15:42:33
а json входящий насколько большой?

Alexander
19.12.2017
15:42:51
да небольшой
смотря сколько UUID-ов в коллекциях

Kyrylo
19.12.2017
17:31:00
Привет! я посмотрел доклад Олега, сериализация типов из скала в касандра типы все класнно, но... может я что не понял. зачем сериализировать getOffer function?? или мы там храним по-сути кэш всех вызовов функции и она автоматом кэшируется неявно в кассандру? я что-то не уловил как использовать либу и что в итоге мы получим

Oleg
19.12.2017
17:32:28

Kyrylo
19.12.2017
17:35:23
прикольно! спасибо, вроде понял. то-есть кэширование истории экзекьюшена, и если вдруг там после обновления что-то поламалось оно будет работать... очень интересно.. спасибо ?