|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devя имел ввиду монопольный доступ для безопасного изменения значения генератора Ась? Существует опасное изменение значение генератора в отрыве от таблицы?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 19:29 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, опасное для генератора? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 19:39 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov> Существует опасное изменение значение генератора в отрыве от таблицы?.. Иногда для запросов ещё используют. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 19:42 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devя имел ввиду монопольный доступ для безопасного изменения rdb_devопасное для генератора? У мну телепатер сломался, отсюда не видать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 19:45 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovУ мну телепатер сломался, отсюда не видать.Какой же ты непонятливый! Имелась в виду безопасность относительно какой-нибудь транзакции, которой придется "приуныть" по исключению из-за несоответствия выданного генератором значения правилам ограничения ссылочной целостности таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 19:54 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev, Я повторяю свой вопрос - "що ти верзешь?" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 20:05 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
DarkMaster, "що ти верзеШ?" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 20:08 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev, та хоть как ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 20:13 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev, генераторы как раз и были придуманы для того чтобы не зависеть от транзакции. Вызвал - получил новое уникальное значение, и пофиг сколько пользователей его одновременно дёргает. Твоя же идея полностью нейтрализует его преимущества. И таки не очень понятно что там на счёт прав на такие функции. Существующий USAGE не подходит. У пользователя может права на нормальное использование генератора, вызвав GEN_LOCK в каком-нибудь EXECUTE BLOCK и не вызвав GEN_UNLOCK мы блокируем всех пользователей которые хотят использовать этот генератор. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 20:17 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
DarkMaster, хухель перекладач допомiг. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 20:21 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Симонов ДенисТвоя же идея полностью нейтрализует его преимущества.Чем нейтрализует? Какая разница, что будет в качестве значения замены/компаранда для функции InterlockedCompareExchange - (__int64)true или значение какой-нибудь функции типа (__int64)currTranId? Так или иначе, сериализуемость изменений генератора обеспечивается некой атомарной функцией. Симонов ДенисИ таки не очень понятно что там на счёт прав на такие функции. Существующий USAGE не подходит.Я бы предложил использовать те же права, что и на GEN_ID. Симонов ДенисУ пользователя может права на нормальное использование генератора, вызвав GEN_LOCK в каком-нибудь EXECUTE BLOCK и не вызвав GEN_UNLOCK мы блокируем всех пользователей которые хотят использовать этот генератор.Пользователь сам и своими руками будет стартовать транзакцию, выполнять внутри GEN_LOCK(), не делать GEN_UNLOCK() и оставлять эту транзакцию активной на неограниченный промежуток времени? Или же это будет делать какой-нибудь "тыжпрограммист"? Если "тыжпрограммист", то он сам дурак. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 20:46 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devчто будет в качестве значения замены/компаранда для функции InterlockedCompareExchange ты видишь разницу между тем когда блокировки и их освобождение происходит внутри, и когда отдано на откуп пользователю? rdb_devИли же это будет делать какой-нибудь "тыжпрограммист"? а зачем программист? Обычный пользователь, имеющий права на SEQUENCE под свои логином может выполнить EXECUTE BLOCK. Скажем так, пусть это будет начинающий хакер - вредитель. И вот ещё вопрос. Что будет если сразу после GEN_LOCK возникнет исключение? Автоматом вызывать GEN_UNLOCK? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 21:01 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devИмелась в виду безопасность относительно какой-нибудь транзакции, которой придется "приуныть" по исключению из-за несоответствия выданного генератором значения правилам ограничения ссылочной целостности таблицы. Блокировка генераторов от этого не поможет. Значение, выданное за микросекунду до неё - ничуть не менее унылое. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 21:03 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovБлокировка генераторов от этого не поможет. Значение, выданное за микросекунду до неё - ничуть не менее унылое.Почему не поможет? Если функция GEN_ID() атомарна и блокирует изменение генератора другими вызовами GEN_ID(), то почему атомарность блока операторов в пределах GEN_LOCK()/GEN_UNLOCK() относительно изменения значения генератора не поможет? В чем разница? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 21:17 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devВ чем разница? В транзакциях и их изоляции. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 21:19 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Симонов Дениса зачем программист? Обычный пользователь, имеющий права на SEQUENCE под свои логином может выполнить EXECUTE BLOCK. Скажем так, пусть это будет начинающий хакер - вредитель.С таким же успехом "начинающему хакеру" можно дать права на UPDATE какой-нибудь часто изменяемой таблицы, чтобы он мог сделать SELECT ... FOR UPDATE WITH LOCK. В принципе, для большей безопасности, можно ограничить использование функций GEN_LOCK/GEN_UNLOCK только рамками хранимых процедур и триггеров, созданных SYSDBA или пользователем с ролью RDB$ADMIN. Симонов ДенисИ вот ещё вопрос. Что будет если сразу после GEN_LOCK возникнет исключение? Автоматом вызывать GEN_UNLOCK?Вызывать автоматом GEN_UNLOCK надо только в случае, если в подтверждаемой или откатываемой транзакции, заблокировавшей генератор по GEN_LOCK, не был выполнен GEN_UNLOCK непосредственно. В иных случаях, ИМХО, решение должен принимать обработчик исключения WHEN ... DO, как указано в примерах топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 21:31 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovВ транзакциях и их изоляции.Не догоняю... Поясни плз, какое имеет отношение уровень изолированности транзакции к увеличению значения генератора в функции GEN_ID? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 21:33 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devНе догоняю... Какой же ты непонятливый! Сколько бы ты ни блокировал генератор при его перемотке, это не спасёт таблицу от вставки записи со значением, нарушающим твою ссылочную целостность. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 21:48 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev, чтобы не "перегонять из пустого в порожний", утрированно напишу как я себе представляю реализацию этих функций, а вы посмотрите и будете дальше плевать в сторону моих хотелок. explain Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 22:38 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
В многопользовательском режиме они всё равно будут бесполезны. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 22:44 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 22:50 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
в gen_lock() забыл прописать барьерную функцию синхронизации кэшей процессоров перед получением seq->value ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 22:52 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devпочему? Транзакция 1 получает номер из последовательности. Транзакция 1 вставляет запись с этим номером. Транзакция 2 блокирует последовательность, удаляет записи и сбрасывает последовательность.. Транзакция 1 коммитится. Транзакция 2 сбрасывает лок и коммитится. Всё, в таблице запись, с номером больше последовательности и бомба тикает. Ты легко воспроизведёшь это обернув свой псевдокод в UDF. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 22:59 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, ну да, при таком раскладе Транзакция 2 (read_committed) не увидит новую запись до коммита Транзакции 1, если только Транзакция 1 не освобождает генератор автоматом на commit/rollback, а при некоторых других уровнях изолированности и вовсе её не увидит. Ты прав. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 23:26 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, ну хорошо... Тогда такой пример: База данных, при открытии первого соединения, должна инициализировать глобальные временные таблицы и пользовательские контекстные переменные, а остальные подключения должны ожидать, пока первое подключение не завершит необходимые действия. В триггере на открытие соединения (TRIGGER ON CONNECT) прописываем GEN_LOCK() и используем блокировку некоего генератора для подвешивания остальных подключений до завершения процедуры инициализации и автоматического GEN_UNLOCK() после успешного завершения специальной транзакции на соединение с БД. Что-то типа синтетического мьютекса, который, конечно, можно и через обычную UDF реализовать. Или такой абстрактный пример: Некой транзакции, вероятность отката, которой, довольно высока, необходимо получить идентификаторы для вставки большого числа записей в несколько зависимых таблиц (к примеру, на 8 - 10 уровней вложенности 1-ко-многим) и принятие решения о подтверждении или откате может быть принято только после успешной вставки всех необходимых записей, естественно (bulk вставка). В этом случае, транзакция может заблокировать все необходимые генераторы, но не изменять их значения до момента принятия решения о подтверждении. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 00:07 |
|
|
start [/forum/topic.php?fid=40&msg=39268383&tid=1562090]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 182ms |
0 / 0 |