Size: a a a

pgsql – PostgreSQL

2021 February 25

Z

Zheka_13 in pgsql – PostgreSQL
Александр Хакимов
Смотри, какие варианты локов предлагает PHP
вариант 1 локать вызов PHP скрипта который запущен от какого либо пользователя.
вариант 2 локать вызов PHP скрипта в принципе если он уже запущен.


локать транзакцию какую то конкретную может только база , т.к. это уже её компетенция. Да, вызов лока в БД можно запустить через PHP , чем я сейчас и занимаюсь, но всё равно за это будет отвечать БД.

В моём конкретном случае у меня есть URL адрес на который постоянно идут запросы непрерывно, по очень много запросов в секунду. И делаю я вставку транзакции только в опеределенных случаях, и когда пользователь сделает определенный набор действий та же самая транзакция тоже вставляется.

Бывает так что инициировал пользователь и удаленный сервер вставку одновременно. Я не могу делать недоступной программу т.к. это вызовет огромные тормоза.
я думаю при очень много запросов в секунду и ексклюзивном локе на таблицу все просто встанет.
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
Zheka_13
я думаю при очень много запросов в секунду и ексклюзивном локе на таблицу все просто встанет.
не каждый запрос инициирует создание транзакции, и в 90% завершается даже не дёргая БД
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
или дёргает простым селектиком с лимитом 1 , который ну очень легкий
источник

ДТ

Дмитрий Тремасов... in pgsql – PostgreSQL
Александр Хакимов
или дёргает простым селектиком с лимитом 1 , который ну очень легкий
проблема в том что у вас может отвалится клиент по таймауту пхп, таймауту веб сервера
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Александр Хакимов
Смотри, какие варианты локов предлагает PHP
вариант 1 локать вызов PHP скрипта который запущен от какого либо пользователя.
вариант 2 локать вызов PHP скрипта в принципе если он уже запущен.


локать транзакцию какую то конкретную может только база , т.к. это уже её компетенция. Да, вызов лока в БД можно запустить через PHP , чем я сейчас и занимаюсь, но всё равно за это будет отвечать БД.

В моём конкретном случае у меня есть URL адрес на который постоянно идут запросы непрерывно, по очень много запросов в секунду. И делаю я вставку транзакции только в опеределенных случаях, и когда пользователь сделает определенный набор действий та же самая транзакция тоже вставляется.

Бывает так что инициировал пользователь и удаленный сервер вставку одновременно. Я не могу делать недоступной программу т.к. это вызовет огромные тормоза.
>  когда пользователь сделает определенный набор действий та же самая транзакция тоже вставляется.

Ну и что, я всё никак не пойму? Это либо правильные данные (и пускай вставляются), либо они уже есть в базе (можно игнорировать вставку), либо при второй вставке они уже не актуальны (после первой вставки) — это должна проверять каждая транзакция.
Откуда тут проблема-то?
источник

ДТ

Дмитрий Тремасов... in pgsql – PostgreSQL
и тогда данные потеряются. по этому обрабатывать такие вещи в рамках ответа по урлу - не стоит. Но это уже оффтоп. Не тема постгреса
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Roman Poslavski
Я таки этого и боялся. А как тогда быть, если вы говорите, никуда не лазить, а data_type нужен?
Я ж написал - без особой нужды не лазить. Я, если честно, не совсем понимаю, зачем вам в прикладе нужны типы данных, если у вас есть (должны быть) определения таблиц и определённых вами же типов. А сами эти типы данных (встроенные) есть в документации.
Поделитесь, пожалуйста, прикладной задачей, если эта задача действительно прикладная.
А то если задача - разгрести недокументированное говнище, тогда всё понятно, и я могу только посочувствовать.
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
Дмитрий Тремасов
проблема в том что у вас может отвалится клиент по таймауту пхп, таймауту веб сервера
Максимальное время ожидания вставки транзакции не превышает 1-2 секунды. Частота вставки транзакций приблизительно равна этому времени, для того чтобы клиент отвалился по таймауту нужно 60 секунд
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
так что этого не произойдёт
источник

ДТ

Дмитрий Тремасов... in pgsql – PostgreSQL
Александр Хакимов
так что этого не произойдёт
обязательно произойдет когда у вас прилетит 60 запросов и все они будут ждать своей очереди
источник

RP

Roman Poslavski in pgsql – PostgreSQL
Михаил Шурутов
Я ж написал - без особой нужды не лазить. Я, если честно, не совсем понимаю, зачем вам в прикладе нужны типы данных, если у вас есть (должны быть) определения таблиц и определённых вами же типов. А сами эти типы данных (встроенные) есть в документации.
Поделитесь, пожалуйста, прикладной задачей, если эта задача действительно прикладная.
А то если задача - разгрести недокументированное говнище, тогда всё понятно, и я могу только посочувствовать.
Да там на самом деле чудо фреймворк eventuate лезет, а он понятное дело не знает, какие могут быть поля. Ну короче все печально)
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
Не вижу смысла спорить и продолжать дискуссию , попробую с локами , влечу в таймауты буду думать.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Roman Poslavski
Я таки этого и боялся. А как тогда быть, если вы говорите, никуда не лазить, а data_type нужен?
Так это обычно "умеет" сама библиотека / API / "адаптер"  (или как это там называется в этом языке) для работы с PostgreSQL, т.е. никуда лазить не нужно.
Если не умеет — нет ли варианта заменить на адекватную (чай, не 1990-ые)? ;)
источник

D

Dmitriy in pgsql – PostgreSQL
Александр Хакимов
Плохой вариант, я так уже делал. Надо это на лету выполнять а очередь строить должна сама база
Вы же сами написали "т.е. я хочу заблокировать все возможные вставки в таблицу за исключением выполнения текущей транзакции. Как она будет выполнена разрешать вставку в таблицу". То, что я предложил, решает эту задачу
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Roman Poslavski
Да там на самом деле чудо фреймворк eventuate лезет, а он понятное дело не знает, какие могут быть поля. Ну короче все печально)
Да уж... Я могу только опять же посочувствовать, если нет возможностей сменить этот чудо фреймфорк.
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
Dmitriy
Вы же сами написали "т.е. я хочу заблокировать все возможные вставки в таблицу за исключением выполнения текущей транзакции. Как она будет выполнена разрешать вставку в таблицу". То, что я предложил, решает эту задачу
нет.
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
Я так уже делал, понимаете? не решает
источник

D

Dmitriy in pgsql – PostgreSQL
Александр Хакимов
Я так уже делал, понимаете? не решает
Вы через Redis делали?
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
Dmitriy
Вы через Redis делали?
Rabbit MQ
источник

D

Dmitriy in pgsql – PostgreSQL
Я лок в php имею в виду
источник