|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с 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 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с 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 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devБаза данных, при открытии первого соединения, должна инициализировать глобальные временные таблицы и пользовательские контекстные переменные, а остальные подключения должны ожидать, пока первое подключение не завершит необходимые действия. Какой смысл? Данные GTT и контекстные переменные не шарятся между коннектами. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 00:13 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Симонов ДенисКакой смысл? Данные GTT и контекстные переменные не шарятся между коннектами.Почему-то сейчас очень захотелось выматериться. То ли из-за того, что забыл/упустил из виду этот момент, то ли из-за того, что ФБ не имеет глобальных временных таблиц, данные из которых можно использовать в разных соединениях. У меня были виды на эту фичу... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 00:37 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev, Это можно сделать и сейчас. Например, хранимая ф-ция в 3.0 + udf, в к-рой 2 ф-ции: WaitFor и ReleaseMutex. Ну и между ними твое gen_id. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 00:45 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
YuRock, пока что не планируется переход на тройку. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 01:01 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev, Ну, какие проблемы? Селективная процедура - не так удобно и наглядно, но использовать можно для этих же целей при желании. Или просто с returning_values. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 02:26 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
YuRockudf, в к-рой 2 ф-ции: WaitFor и ReleaseMutex. Ну и между ними твое gen_id.Да, ты прав! Гораздо проще это сделать самому парой маленьких UDF'ок. Можно даже вести собственный регистр именованных lock объектов для атомарных функций, чтобы не увеличивать накладные расходы на мьютексы. Вот только с триггерами commit/rollback заморочек отхвачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 09:09 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
YuRockЭто можно сделать и сейчас. Например, хранимая ф-ция в 3.0 + udf, в к-рой 2 ф-ции: WaitFor и ReleaseMutex. писали такую фигню и 15 лет назад. Основная проблема - это что делать с заблокированным объектом, если коннект, его заблокировавший, отвалился. Из той же оперы - пометки в неких таблицах о логине пользователя, и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 11:20 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_devтранзакция может заблокировать все необходимые генераторы, но не изменять их значения до момента принятия решения о подтверждении. А смысл? Повторяю медленно: экономить значения генераторов не имеет смысла. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 11:53 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Мой ХШ говорит что человек бездырочную нумерацию сделать хочет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 11:58 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Hello, Симонов Денис! You wrote on 6 июля 2016 г. 11:59:12: Симонов Денис> Мой ХШ говорит что человек бездырочную нумерацию сделать хочет. аполитично рассуждаешь, клянусь, честное слово! не понимаешь политической ситуации! (с) ТС намерен изменить мир к лучшему. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 12:01 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Симонов Денис> Мой ХШ говорит что человек бездырочную нумерацию сделать хочет. Это и вообще без генератора можно сделать. Хотя за ТС не поручусь, конечно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 12:26 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамХотя за ТС не поручусь, конечно.В каком смысле "не поручусь"? В смысле, что ТСу не известны разные варианты решений бездырочной нумерации вообще без генератора? Как минимум, два варианта. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 13:16 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev> В смысле, что ТСу не известны разные варианты В смысле, что ты не возьмешься делать БЕН через лок генератора. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 13:29 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамВ смысле, что ты не возьмешься делать БЕН через лок генератора.Конкретно БЕН через лок генератора да - теперь уже не возьмусь, Dimitry Sibiryakov меня почти полностью разубедил (если только буду использовать локи генератора через UDF для bulk вставок), но сами объекты блокировок, как таковые, в редких случаях, бывают очень полезны. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 13:40 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev> сами объекты блокировок Нет такого понятия в БД. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 13:48 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамНет такого понятия в БД.Конечно нет. Возможно, сварганю в UDF'ках. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 14:47 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Симонов ДенисМой ХШ говорит что человек бездырочную нумерацию сделать хочет. Сделать разные генераторы для разных таблиц - чем плох такой вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 16:52 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
kdvОсновная проблема - это что делать с заблокированным объектом, если коннект, его заблокировавший, отвалился. Если нет SUSPEND'ов в блоке между wait/release, то отвал клиента не должен к такому приводить, как мне кажется. Другое дело, зачем строить архитектуру системы, которая заведомо мешает работе СУБД из-за своей бизнес-логики - я не понимаю. Неужели нельзя сделать проще и легче. Слабо верится. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 16:56 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
YuRockзачем строить архитектуру системы, которая заведомо мешает работе СУБД из-за своей бизнес-логики - я не понимаю. Неужели нельзя сделать проще и легче. Слабо верится. Ну вот такие они, комсомольцы энти. Сначала создают себе трудности, а потом героически их преодолевают. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 17:00 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev, Зачем смешивать сущности? Нужна транзакционность - используйте записи в таблицах. Можно с блокировками на select with lock/update. Нужна внетранзакционность - используйте генераторы/sequences. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2016, 17:10 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
DarkMasterНу вот такие они, комсомольцы энти. Сначала создают себе трудности, а потом героически их преодолевают.Никаких трудностей, необходимых к преодолению, я себе, пока что, еще не придумал. Лишь обсуждаю варианты преодоления трудностей на случай, если придется. ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2016, 02:41 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
kdv, подытожив сообщения из двух веток (спасибо за разъяснения), можно с уверенностью сказать, что реализация функционала объектов блокировки своими силами в UDF, по большому счету, не имеет смысла, а реализация этого функционала внутри сервера Firebird имеет смысл лишь с некоторыми оговорками: 1. установку блокировки объекта необходимо производить в отдельной транзакции и до начала основной транзакции, в которой планируется использовать блокировку; 2. освободить объект блокировки могут только транзакции, выполняющиеся в том же контексте, что и транзакция, заблокировавшая объект; 3. блокировка с объекта не должна сниматься автоматически, если транзакция, установившая блокировку, подтвердилась по CommitRataining и контекст транзакции не изменился; 4. блокировка должна сниматься с объекта автоматически в момент очистки контекста транзакции, установившей блокировку на объект (при обычных Commit/Rollback), или же при откате по RollbackRetaining именно той транзакции, что установила эту блокировку; P.S. Какое-то тех.задание получилось... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2016, 03:09 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev, теперь читай про явное резервирование таблиц при старте тр-ции ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2016, 08:22 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
hvlad, намекаешь на то, что лучше захватывать объекты блокировки таким же способом? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2016, 09:29 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
rdb_dev, пункт 2 мутный. а так да, Влад прав, похоже на транзакции с блокированием таблиц. rdb_dev лучше захватывать объекты блокировки таким же я так понимаю, что у тебя по ТЗ некие объекты блокировки настолько привязаны к транзакциям, что логичнее использовать сами транзакции, которые уже есть, чем какие-то мифические блокировки, которых не будет (скорее всего). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2016, 11:16 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Hello, Kdv! You wrote on 8 июля 2016 г. 11:19:32: Kdv> я так понимаю, что у тебя по ТЗнет там ТЗ. есть нефильтруемый поток мутного сознания Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2016, 11:20 |
|
Форумяне, есть желание обсудить необходимость пары новых функций для работы с SEQUENCE
|
|||
---|---|---|---|
#18+
Мимопроходящийесть нефильтруемый поток мутного сознанияПоток фильтруемый и не мутного сознания, а не до конца сформулированной идеи. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2016, 11:24 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1562090]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 442ms |
0 / 0 |