|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Всем привет. Читал, что на суперсервере 1 процесс на всех клиентов. Есть таблица mytable, поле num - integer. В таблице есть такие записи, в которых поле myfield не заполнено. Если несколько разных клиентов выполнят так update mytable set myfield = 'свои данные' where num = (select min(num) from mytable where myfield is null); на суперсервере они ведь нормально разойдутся, суперсервер выполнит эти команды последовательно, без конкуренции? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 06:16 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
ДеревянныйВсем привет. Читал, что на суперсервере 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/ Архитектура сервера тут никаким боком. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 06:24 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
ДеревянныйЧитал, что на суперсервере 1 процесс на всех клиентов.У SuperClassic, прикинь, тоже один процесс на всех клиентов.на суперсервере они ведь нормально разойдутся, суперсервер выполнит эти команды последовательно, без конкуренции?У SuperServer, до версии 2.1 включительно, все потоки будут исполняться на одном ядре. В версии 2.5 SuperServer может "разбросать" потоки подключений к разным базам на разные ядра, но потоки всех подключений к одной базе всё равно исполняются на одном ядре. SuperServer 3.0 "умеет" распределяет потоки по ядрам без ограничений. Но, как уже сказали, вне зависимости от версии и архитектуры, конкурентная среда всегда остаётся конкурентной средой. Ограничение "многие (все) потоки на одном ядре" ограничивает производительность сервера, но не меняет принципов работы с транзакциями. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 06:55 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
да, книжку уже читаю, спасибо. пока мало что понятно, много новых слов. в приложении транзакция (TIBTransaction) стартует, в ней выполняется та команда, и сразу комитится. а "разойдутся" это я имел ввиду получат ли они себе разные записи или им могут один и тот же num вернуть селектом? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 07:14 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Оформляем вопрос по человечески : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 08:06 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Деревянныйа "разойдутся" это я имел ввиду получат ли они себе разные записи или им могут один и тот же num вернуть селектом?Вы num меняете? Нет. Значит возможны два варианта: 1. Записей с минимальным значением поля num - больше одной. Будет ошибка ("Магия данных"); 2. Запись одна и два (или более) запроса будут конкурентно обновлять одну и ту же запись. Будет конфликт. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 08:11 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Basil A. SidorovВы num меняете? Нет. Значит возможны два варианта: 1. Записей с минимальным значением поля num - больше одной. Будет ошибка ("Магия данных"); 2. Запись одна и два (или более) запроса будут конкурентно обновлять одну и ту же запись. Будет конфликт. ок, ответ понятен. первый вариант у меня не случится, num заполняется генератором, а со вторым ясно. а вот тут http://www.ibase.ru/ibtrans/ в доках упоминается сериализуемость, которая явно не реализована, но которую можно эмулировать. А как? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 09:02 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Деревянныйа вот тут http://www.ibase.ru/ibtrans/ в доках упоминается сериализуемость, которая явно не реализована, но которую можно эмулировать. наверное имеется в виду резервирование таблиц ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 09:23 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Никак Не надо упорядочивать (сериализовывать) обновления без очень веской причины: вы ставите в очередь всех клиентов, собственными руками организовывая "дикую конкуренцию" (ТМ). Рано или поздно этих конкурентов окажется "десятков несколько" и вас проклянут все ваши пользователи, которые попадут на такой режим работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 09:24 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
вижу про сериализацию там ниже есть немного описание. только не въезжаю. :) у меня транзакция как раз короткая. что надо ей в параметрах указать, чтобы всем запретить чтение и запись в эту таблицу пока эта транзакция не выполнится? wait consistency lock_read=mytable lock_write=mytable exclusive угадал? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 09:33 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Деревянный, нет не угадал. Чтение ты не запретишь никак. Запись можешь ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 09:39 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Basil A. SidorovНикак Не надо упорядочивать (сериализовывать) обновления без очень веской причины: вы ставите в очередь всех клиентов, собственными руками организовывая "дикую конкуренцию" (ТМ). Рано или поздно этих конкурентов окажется "десятков несколько" и вас проклянут все ваши пользователи, которые попадут на такой режим работы. да, это я тоже понимаю. Но с другой стороны, нечего двум пользователям одну запись редактировать. А раз уж они туда оба полезли, то могут подождать 1 секунду. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 09:39 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Деревянный, зачем такой изврат? Чем тебя не устраивает SELECT ... FOR UPDATE WITH LOCK ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 09:43 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Симонов ДенисДеревянный, нет не угадал. Чтение ты не запретишь никак. Запись можешь понятно. два или три клиента пытаются сделать update mytable set myfield = 'свои данные' where num = (select min(num) from mytable where myfield is null); транзакции короткие, сразу комитятся. Если я им в параметрах укажу wait consistency lock_write=mytable exclusive то тогда эти транзакции будут выполнены последовательно? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 09:44 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Симонов ДенисДеревянный, зачем такой изврат? Чем тебя не устраивает SELECT ... FOR UPDATE WITH LOCK это для меня тоже новая информация. так делать можно? update mytable set myfield = 'свои данные' where num = (select min(num) from mytable where myfield is null FOR UPDATE WITH LOCK ); ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 09:46 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Деревянный, так нельзя. Этот оператор нужен чтобы блокировать выбранную запись, т.е. запретить UPDATE/DELETE другим транзакциям на время работы текщуей транзакции. Но он работает только с простым SELECT из одной таблицы без агрегатов. И это не обохначает что будет тупо ожидание, просто возникнет обычный UPDATE CONFLICT ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 09:52 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Симонов ДенисЧтение ты не запретишь никак.Да ну ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 09:58 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
Деревянныйдва или три клиента пытаются сделать update mytable set myfield = 'свои данные' where num = (select min(num) from mytable where myfield is null); транзакции короткие, сразу комитятся. Если я им в параметрах укажу wait consistency lock_write=mytable exclusive то тогда эти транзакции будут выполнены последовательно?Эти - да. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 10:06 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
hvladСимонов ДенисЧтение ты не запретишь никак.Да нуПерепроверил - ты прав, не consistency тр-ции смогут читать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 10:06 |
|
на суперсервере такое прокатит? развейте сомнения, плиз.
|
|||
---|---|---|---|
#18+
ДеревянныйСимонов ДенисДеревянный, зачем такой изврат? Чем тебя не устраивает 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 - он получит вменяемое сообщение о конфликте и может отказаться от действия или попробовать повторить его позже. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2019, 14:56 |
|
|
start [/forum/topic.php?fid=40&msg=39880208&tid=1560537]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
129ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 262ms |
0 / 0 |