|
Реализация уникальности без ключей и индексов
|
|||
---|---|---|---|
#18+
НеофитSQL Учитывая количество подводных камней для multirow constraints, было бы намного лучше чтобы такие задачи решались профессионально. Еще лучше - чтобы были встроены в БД производителем, или продавались как надстройка. Проверки в хранимках и сериализация нужна только на время выполнения проверки. Зачем еще какие-то надстройки? Дать возможность декларативно описывать multirow constraints слишком опасная граната в руках обезьян. НеофитSQL Даже если окажется что я худо-бедно и в основном на ощупь один раз правильно реализовал multirow constraint в триггере ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 21:12 |
|
Реализация уникальности без ключей и индексов
|
|||
---|---|---|---|
#18+
Кобанчег, Хранимки или триггер - это я считаю вопрос обертки. Для реализации insert главной проблемой оказалось научиться делать dirty reads. Потому что PK это делает, а Оракл сессиям это запрещает. Тогда и начинаются пляски с бубном как сделать row lock на строке, которой ещё нет в таблице. Забудем про триггеры на минутку. Вот хранимка InsertUniqueindex(id in integer) которая вставляет уникальный id в одну определенную таблицу, изначально пустую. Надо чтобы первый вызов для id=1 прошел успешно, второй отказался (это легко, контекст одной сессии). А теперь надо чтобы из всех других сессий вызовы с id=1 застряли пока первая сессия не совершит commit/rollback. Вот где не хватает dirty read. Тут нужен глобальный сериализующий объект который соблюдает очередность. По одному такому локу на каждый id, и желательно используемый без лишних переключений контекста. Я использовал ITL, как это делает сам оракл. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 21:36 |
|
Реализация уникальности без ключей и индексов
|
|||
---|---|---|---|
#18+
НеофитSQL, В принципе все что нужно было бы это возможность указать NOWAIT в INSERT/UPDATE. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 22:35 |
|
Реализация уникальности без ключей и индексов
|
|||
---|---|---|---|
#18+
SY НеофитSQL, В принципе все что нужно было бы это возможность указать NOWAIT в INSERT/UPDATE. SY. Если вы о реализации двуникального ключа, то да. Но это противоречит принципу запрета dirty reads, позволяя узнавать что постит другая сессия до commit. Если вы о моей попытке смастерить PK своими силами, то вряд ли поможет, ведь insert не блокирует в отсутствие встроенного unique constraint. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2020, 23:00 |
|
|
start [/forum/topic.php?fid=52&gotonew=1&tid=1880705]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 247ms |
0 / 0 |