powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / на суперсервере такое прокатит? развейте сомнения, плиз.
20 сообщений из 20, страница 1 из 1
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880203
Всем привет.

Читал, что на суперсервере 1 процесс на всех клиентов.

Есть таблица mytable, поле num - integer. В таблице есть такие записи, в которых поле myfield не заполнено.

Если несколько разных клиентов выполнят так

update mytable set myfield = 'свои данные' where num = (select min(num) from mytable where myfield is null);

на суперсервере они ведь нормально разойдутся, суперсервер выполнит эти команды последовательно, без конкуренции?
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880205
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДеревянныйВсем привет.

Читал, что на суперсервере 1 процесс на всех клиентов.

Есть таблица mytable, поле num - integer. В таблице есть такие записи, в которых поле myfield не заполнено.

Если несколько разных клиентов выполнят так

update mytable set myfield = 'свои данные' where num = (select min(num) from mytable where myfield is null);

на суперсервере они ведь нормально разойдутся, суперсервер выполнит эти команды последовательно, без конкуренции?

Что значит "нормально разойдутся"?
Почитай про транзакции http://www.ibase.ru/transactions/ и версионность особенно http://www.ibase.ru/versions/
Архитектура сервера тут никаким боком.
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880208
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДеревянныйЧитал, что на суперсервере 1 процесс на всех клиентов.У SuperClassic, прикинь, тоже один процесс на всех клиентов.на суперсервере они ведь нормально разойдутся, суперсервер выполнит эти команды последовательно, без конкуренции?У SuperServer, до версии 2.1 включительно, все потоки будут исполняться на одном ядре.
В версии 2.5 SuperServer может "разбросать" потоки подключений к разным базам на разные ядра, но потоки всех подключений к одной базе всё равно исполняются на одном ядре. SuperServer 3.0 "умеет" распределяет потоки по ядрам без ограничений.
Но, как уже сказали, вне зависимости от версии и архитектуры, конкурентная среда всегда остаётся конкурентной средой.
Ограничение "многие (все) потоки на одном ядре" ограничивает производительность сервера, но не меняет принципов работы с транзакциями.
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880211
да, книжку уже читаю, спасибо. пока мало что понятно, много новых слов.



в приложении транзакция (TIBTransaction) стартует, в ней выполняется та команда, и сразу комитится.

а "разойдутся" это я имел ввиду получат ли они себе разные записи или им могут один и тот же num вернуть селектом?
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880218
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оформляем вопрос по человечески :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create table test (
   num integer
 , msg varchar(100)
);
commit;
insert into test(num, msg) values(0, null);
commit;

-- переходим к микротесту
update mytable
set msg = 'Текст'
where num = (select min(num) from mytable where myfield is null);

-- запускаем второй isql, где выполняем второй update
-- потом делаем commit/rollback в разной последовательности
-- и читаем ibase.ru. Лучше - до экспериментов
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880220
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деревянныйа "разойдутся" это я имел ввиду получат ли они себе разные записи или им могут один и тот же num вернуть селектом?Вы num меняете? Нет. Значит возможны два варианта:
1. Записей с минимальным значением поля num - больше одной. Будет ошибка ("Магия данных");
2. Запись одна и два (или более) запроса будут конкурентно обновлять одну и ту же запись. Будет конфликт.
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880229
Basil A. SidorovВы num меняете? Нет. Значит возможны два варианта:
1. Записей с минимальным значением поля num - больше одной. Будет ошибка ("Магия данных");
2. Запись одна и два (или более) запроса будут конкурентно обновлять одну и ту же запись. Будет конфликт.

ок, ответ понятен. первый вариант у меня не случится, num заполняется генератором, а со вторым ясно.

а вот тут http://www.ibase.ru/ibtrans/ в доках упоминается сериализуемость, которая явно не реализована, но которую можно эмулировать. А как?
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880243
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деревянныйа вот тут http://www.ibase.ru/ibtrans/ в доках упоминается сериализуемость, которая явно не реализована, но которую можно эмулировать.

наверное имеется в виду резервирование таблиц
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880247
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак
Не надо упорядочивать (сериализовывать) обновления без очень веской причины: вы ставите в очередь всех клиентов, собственными руками организовывая "дикую конкуренцию" (ТМ). Рано или поздно этих конкурентов окажется "десятков несколько" и вас проклянут все ваши пользователи, которые попадут на такой режим работы.
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880251
вижу про сериализацию там ниже есть немного описание. только не въезжаю. :) у меня транзакция как раз короткая. что надо ей в параметрах указать, чтобы всем запретить чтение и запись в эту таблицу пока эта транзакция не выполнится?

wait
consistency
lock_read=mytable
lock_write=mytable
exclusive

угадал?
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880260
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деревянный,

нет не угадал. Чтение ты не запретишь никак. Запись можешь
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880261
Basil A. SidorovНикак
Не надо упорядочивать (сериализовывать) обновления без очень веской причины: вы ставите в очередь всех клиентов, собственными руками организовывая "дикую конкуренцию" (ТМ). Рано или поздно этих конкурентов окажется "десятков несколько" и вас проклянут все ваши пользователи, которые попадут на такой режим работы.

да, это я тоже понимаю. Но с другой стороны, нечего двум пользователям одну запись редактировать. А раз уж они туда оба полезли, то могут подождать 1 секунду.
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880264
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деревянный,

зачем такой изврат? Чем тебя не устраивает SELECT ... FOR UPDATE WITH LOCK
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880267
Симонов ДенисДеревянный,

нет не угадал. Чтение ты не запретишь никак. Запись можешь

понятно. два или три клиента пытаются сделать

update mytable set myfield = 'свои данные' where num = (select min(num) from mytable where myfield is null);

транзакции короткие, сразу комитятся. Если я им в параметрах укажу

wait
consistency
lock_write=mytable
exclusive

то тогда эти транзакции будут выполнены последовательно?
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880268
Симонов ДенисДеревянный,

зачем такой изврат? Чем тебя не устраивает SELECT ... FOR UPDATE WITH LOCK

это для меня тоже новая информация. так делать можно?

update mytable set myfield = 'свои данные' where num = (select min(num) from mytable where myfield is null FOR UPDATE WITH LOCK );
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880277
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деревянный,

так нельзя. Этот оператор нужен чтобы блокировать выбранную запись, т.е. запретить UPDATE/DELETE другим транзакциям на время работы текщуей транзакции. Но он работает только с простым SELECT из одной таблицы без агрегатов. И это не обохначает что будет тупо ожидание, просто возникнет обычный UPDATE CONFLICT
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880282
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЧтение ты не запретишь никак.Да ну
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880291
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деревянныйдва или три клиента пытаются сделать

update mytable set myfield = 'свои данные' where num = (select min(num) from mytable where myfield is null);

транзакции короткие, сразу комитятся. Если я им в параметрах укажу

wait
consistency
lock_write=mytable
exclusive

то тогда эти транзакции будут выполнены последовательно?Эти - да.
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880292
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladСимонов ДенисЧтение ты не запретишь никак.Да нуПерепроверил - ты прав, не consistency тр-ции смогут читать.
...
Рейтинг: 0 / 0
на суперсервере такое прокатит? развейте сомнения, плиз.
    #39880494
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДеревянныйСимонов ДенисДеревянный,

зачем такой изврат? Чем тебя не устраивает SELECT ... FOR UPDATE WITH LOCK

это для меня тоже новая информация. так делать можно?

update mytable set myfield = 'свои данные' where num = (select min(num) from mytable where myfield is null FOR UPDATE WITH LOCK );

сервер выполняет действия, предполагаю логику и определенность в действиях пользователя.

если в разные моменты времени возможны разные значения min(num), то ни того, ни другого у пользователя нет.


если в with lock указать чОткое, конкретное значение num, то сервер заблокирует(займет) записи для этого пользователя.

если другой пользователь, знающий о существовании других пользователей, и пользующийся принятыми в их среде методами, тоже попробует with lock - он получит вменяемое сообщение о конфликте и может отказаться от действия или попробовать повторить его позже.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / на суперсервере такое прокатит? развейте сомнения, плиз.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]