|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Мне иногда не хватает пары функций типа GEN_LOCK(<имя_последовательности>)/GEN_UNLOCK(<имя_последовательности>), которые блокировали бы изменение последовательности и снимали такую блокировку в рамках транзакции. Конечно, в некоторых случаях, при некорректном использовании этих функций в хранимых процедурах, триггерах и блоках, можно получить жестокие тормоза, но реализация подобных функций в Firebird позволила бы более гибко и без нарушения целостности управлять пространством генерируемых значений. Несколько примеров, как это могло бы выглядеть: Код: sql 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.
или Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
или такая маленькая ХП в помощь SYSDBA Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 16:12 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev, бред. Генераторы работают вне контекста транзакций. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 16:20 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devМне иногда не хватает пары функций типа GEN_LOCK(<имя_последовательности>) /GEN_UNLOCK(<имя_последовательности>), которые блокировали бы изменение последовательности и снимали такую блокировку в рамках транзакции.вася, ты дурак? или просто потроллить тут решил? сиквенсы и транзакции живут в параллельных вселенных. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 16:21 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Мимопроходящий, спасибо, ваше мнение очень "важно" для нас. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 16:29 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Симонов Денисбред. Генераторы работают вне контекста транзакций. Контекст транзакции для генератора тут не важен. Важно лишь заблокировать изменение генератора до освобождения по GEN_UNLOCK() или до автоматического освобождения по подтверждению или откату транзакции, в которой был генератор был заблокирован по GEN_LOCK(). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 16:32 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev, это противоречит смыслу последовательностей. Посмотрел бы ты лучше в стандарт. авторseqValue = GEN_ID(mySequence, seqValue * -1) Вообще сама функция GEN_ID унаследованная и тоже нарушает принцип работы с SEQUENCE, по стандарту NEXT VALUE FOR sequence_name В этом случае ты не сможешь дёргать генератор на значение отличное от значения INCREMENT заданное при создании последовательности. Однако у GEN_ID есть одно очень полезное свойство, а именно: она позволяет дёргать сразу пачку значений чтобы не не обращаться к странице генератора часто, тем самым ускоряя массовый INSERT. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 16:42 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devНесколько примеров, как это могло бы выглядеть А теперь хотя бы один вменяемый пример назачем это нужно - В СТУДИЮ!!! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 16:48 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Мимопроходящий> сиквенсы и транзакции живут в параллельных вселенных. Вообще говоря, если выкинуть "транзакционность", то лок/анлок как DDL операция (типа set inactive) могла бы быть полезной. Другое дело, что часто подобное не должно надобиться - попахивает. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 17:04 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovА теперь хотя бы один вменяемый пример назачем это нужно - В СТУДИЮ!!!Чем тебе не пример сброс последовательности в триггере при удалении всех записей таблицы или процедура shrinkMyTableId для ужимания идентификаторов "на ходу" без необходимости монопольного (соло) доступа к базе? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 17:40 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Симонов ДенисОднако у GEN_ID есть одно очень полезное свойство, а именно: она позволяет дёргать сразу пачку значений чтобы не не обращаться к странице генератора часто, тем самым ускоряя массовый INSERT. Эту тему GEN_ID() я просек еще с первых дней знакомства с FirebirdSQL. Собственно, реализация функционала GEN_ID() или NEXT VALUE FOR, при изменении значения генератора, в любом случае требуют блокировки, хотя бы на уровне атомарных функций. Для меня, как человека абсолютно незнакомого с сырцами FirebirdSQL, реализация GEN_ID() представляется чем-то вроде: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 17:48 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devЧем тебе не пример сброс последовательности в триггере при удалении всех записей таблицы сброс последовательности это DDL со всеми вытекающими. И если сделают TRUNCATE, который может скидывать IDENTITY поля, то это тоже будет DDL. Зачем сбрасывать последовательность кому-либо кроме админа БД я не понимаю. Подумай что будет в этом случае при конкурентном доступе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 17:54 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devЧем тебе не пример сброс последовательности в триггере при удалении всех записей таблицы или процедура shrinkMyTableId для ужимания идентификаторов "на ходу" без необходимости монопольного (соло) доступа к базе? Тем, что они невменяемы. 2^63-1 идентификаторов вполне достаточно чтобы они не кончились и без сброса генераторов при очищении таблицы. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 17:59 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Симонов ДенисПодумай что будет в этом случае при конкурентном доступе.Что еще может случиться при конкурентном доступе к генератору, кроме некоторой задержки на выполнение нескольких операторов между GEN_LOCK() и GEN_UNLOCK() в другой транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:03 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovТем, что они невменяемы. 2^63-1 идентификаторов вполне достаточно чтобы они не кончились и без сброса генераторов при очищении таблицы.Этих идентификаторов вполне достаточно, если поле таблицы с IDENTITY также BIGINT, но базы бывают разные и под разные "сценарии". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:05 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devбазы бывают разные Поле в базе расширить проще чем геморроиться сбросом генераторов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:09 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Hello, Dimitry Sibiryakov! You wrote on 5 июля 2016 г. 18:13:35: Dimitry Sibiryakov> Поле в базе расширить проще чем геморроиться сбросом генераторов. "не стоит прогибацца под изменчивый мир, пусть лучче он прогнёцца под нас!" (С) - певец слов ртом. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:15 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПоле в базе расширить проще чем геморроиться сбросом генераторов.Очень может быть, но перфекционизм что-то никак не отпускает. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:18 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Прибивать блокировки к генераторам - конечно перебор (или слишком частная задача, пахнущая, гм, не очень), но вот сделать что-то типа такого - совсем не помешает, как по мне ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:21 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Hello, Hvlad! You wrote on 5 июля 2016 г. 18:23:36: Hvlad> но вот сделать что-то типа такого https://msdn.microsoft.com/en-us/library/ms189823.aspx - совсем не помешает, как по мне не, ну ты сравнил... у них это скорее аналог мьютекса для страждущих невнятного. а то что предлагает пациент, это полный песец. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:26 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
hvlad> но вот сделать что-то типа такого - совсем не помешает, как по мне О, это еще более универсальный вариант. +много Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:35 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Мимопроходящийто что предлагает пациент, это полный песец. Ну, может, он не знает, что транзакция способна заблокировать только одну таблицу и всю базу в эксклюзив переводить совсем ни к чему?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:36 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Мимопроходящийне, ну ты сравнил... у них это скорее аналог мьютекса для страждущих невнятного. а то что предлагает пациент, это полный песец.Да неужель? 8-/ И по каким признакам ты понял, что ТС предлагает нечто, сильно отличающееся от того, что сделала Microsoft? Microsoft предлагает через sp_getapplock блокировать любой именованный (глобальный) ресурс (мьютекс) на компе, где установлен SQL Server, выполняющий этот самый sp_getapplock. При этом, в параметре, типа varchar(32), передается некий уникальный идентификатор владельца блокировки. Чем тебе генератор ФБ не "@Resource", а переменная типа int64 в оперативной памяти ФБ сервера внутри структуры генератора, содержащая идентификатор транзакции - владельца блокировки, не "@LockOwner"? Можно даже не через мьютекс реализовывать, а обычным аналогом майкрософтовского InterlockedCompareExchange. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:55 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНу, может, он не знает, что транзакция способна заблокировать только одну таблицу и всю базу в эксклюзив переводить совсем ни к чему?..Что, прости? Я где-то написал про эксклюзивную блокировку всей базы? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 18:57 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devЯ где-то написал про эксклюзивную блокировку всей базы? Ага: 19372174 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 19:20 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, я имел ввиду монопольный доступ для безопасного изменения значения генератора, а не для изменения значений в поле PK таблицы. Собственно, что именно имелось в виду, прекрасно видно из примера. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2016, 19:24 |
|
|
start [/forum/topic.php?fid=40&msg=39268114&tid=1562090]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 153ms |
0 / 0 |