|
|
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
dimitrMAX(генератор в базе, генератор в кеше) особенно сильно этому обрадуются те извращенцы, кто юзает GEN_ID с отрицательным инкрементом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2015, 23:56 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
dimitr2) Незакоммиченный DDL видеть никто не должен.Согласен! Посему, если уж так, то любое обращение "чужой" тр-ции к незакоммиченному изменённому генератору должно либо ждать коммита (и работать де-факто с закомиченным состоянием), либо выдавать ошибку доступа. Вот такое вот моё мнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 00:13 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
dimitrСильно упертые могут продолжать выкручиваться с нестандартными инкрементами в GEN_ID.Конечно могут. И будут, ибо страница генераторов - одно из узких мест. Если сделать внутри цикла раздачу ИДшников из заранее полученного "пула" (через вызов gen_id( g, :N ), где N >> 1), то будет как в рекламе: "почувствуйте разницу". dimitr3) В результате впервые в ФБ появляется транзакционный DDL - можно в одной и той же транзакции создать генератор и использовать его, а потом либо грохнуть либо закоммитить.Это всё прекрасно, только как в двух транзакциях создать генератор-"времянку" с одинаковым именем (просто чтобы посчитать им чего-то там, и грохнуть затем) ? Не получится это. А раз так, то придется делать какой-то изврат типа создания генератора с именем, в которое будет включен номер текущей транзакции. А дальше - выполнять gen_id( имя, 1 ), но ведь его тогда уже и не выполнить в "явном" виде, только через ES. Гемор какой-то! Поэтому я проголосовал за CORE-4001. Нужен какой-то "локальный счетчик", видимый только в PSQL, никаким боком не отражающийся в метаданных. А еще лучше - структуры такого типа, но это уже фантазии, я понимаю :-) dimitrЕсли "локальный" (видимый только текущей транзакции), то при коммите при неудачном раскладе мы потеряем только чужие изменения.Что-то непонятно, про какие "чужие" изменения тут речь. Ведь никто не видит мой новосозданный генератор, пока я не ввёл commit. dimitr5) Явно изменять значения генераторов "на лету" при активной работе с базой - ахтунг. Делать это еще и в длинных транзакциях с GEN_ID внутри - дважды ахтунг. Кто на это нарвется в продакшене - ССЗБ.Нельзя менять в сторону уменьшения. Что плохого в увеличении на шаг N >> 1 для получения "пула" ИДшников - не ведаю. Я этим хаком получил только плюсы, и значительные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 00:36 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
hvladосему, если уж так, то любое обращение "чужой" тр-ции к незакоммиченному изменённому генераторуКак по мне так давать отлуп ( no wait), или подождать (wait) и потом или дать отлуп если коммит(роллбак) так и не прошел, если прошел, то отдать валидное значение клиенту и нехай радуется. ТаблоидНужен какой-то "локальный счетчик", видимый только в PSQLОпять таки мое мнение, это должен быть не генератор, ну или типа GTT генератор. ТаблоидЧто плохого в увеличении на шаг N >> 1 для получения "пула" ИДшников - не ведаю. Я этим хаком получил только плюсы, и значительные.Этому хаку сто лет в обед, штатно в ФИБах присутствует со времен царя Гороха. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 09:27 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
ТаблоидНельзя менять в сторону уменьшения. Что плохого в увеличении на шаг N >> 1 для получения "пула" ИДшников - не ведаю. Я этим хаком получил только плюсы, и значительные. ага. Попробуй вот этот трюк сделать хотя бы 2 раза Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 09:31 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
dimitr4) Возникает вопрос - какой счетчик должен увеличивать GEN_ID, выполненный в той же транзакции, что и незакоммиченный SET GENERATOR? Если "глобальный" (закоммиченный, видимый всем), то при коммите он сбросится в значение, установленное через SET GENERATOR - при неудачном раскладе мы потеряем и свои собственные изменения, и изменения других транзакций. Если "локальный" (видимый только текущей транзакции), то при коммите при неудачном раскладе мы потеряем только чужие изменения. Имхо генераторы - это типовой разделяемый глобальный ресурс с locked exclusive доступом. то есть на псевдокоде GEN_ID - это Generator.Lock() try{ Generator.Inc( OptionalDelta ) return Generator.Current }finally{ Generator.UnLock() } Соответственно SET GENERATOR - Это установка еще одного lock завершения транзакции Generator.Lock() try{ Generator.Assign( NewValue ) Generator.Lock() try{ Generator.Inc( OptionalDelta ) return Generator.Current }finally{ Generator.UnLock() } Generator.Lock() try{ Generator.Inc( OptionalDelta ) return Generator.Current }finally{ Generator.UnLock() } } catch { Generator.Assign ( Pre-transaction value) } }finally{ Generator.UnLock() } // commit Соответсвенно, другие транзакции ВООБЩЕ не должны иметь доступа к генератору до решения его судьбы (снятия лока в результате commit/rollback) Соответственно внутри транзакции ВОЗМОЖНО не должно быть разрешено чтение ( GEN_ID, SELECT NEXT) после SET GENERATOR (он уже был залочен). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 13:08 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Кроме того мне непонятно что делать с генераторами, изменяемыми в середине длинной транзакции Trans1.Start // Gen=1 Gen_ID // Gen=2 ... Gen_ID // Gen=3 ... Gen_ID // Gen=4 ... SET GENERATOR 10 // Gen = 10 Gen_ID // Gen=11 ... Gen_ID // Gen=12 ... Gen_ID // Gen=13 ... Trans1.Rollback И вот куда теперь откатывать генератор ? на 1 или на 10 ? На 1 ? А если пока еще генератор не был "залочен" через DDL параллельные транзакции им тоже пользовались? На 10? А если внутри транзакции несколько SET GENERATOR ? То есть транзакция откатывается лишь частично ? IMHO это было правильно, что у SET_GENERATOR был отдельный тип команды, генераторы - вполне себе особый вид сущностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 13:14 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, Кстати, хорший вопрос. Что будет делать GEN_ID(xxx), GEN_ID(xxx, +1) и SELECT NEXT FROM xxx на верхней границе? Свернётся или (лучше) выдаст ошибку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 13:15 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Симонов Денис Код: sql 1. у мну пока нет циклов с таким числом итераций... не дорос еще как бэ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 13:21 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Arioch, проверь. У меня в минус просто ушёл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 13:21 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Таблоид, не это про то что "Нельзя менять в сторону уменьшения." Как видишь в сторону увеличения тоже траблы могут быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 13:23 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Симонов Денисв сторону увеличения тоже траблы могут бытьЭто "слишком смелое" увеличение. Примерно как то, которое об столб ломается, когда "с дуру" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 13:30 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Симонов Денис> не это про то что "Нельзя менять в сторону уменьшения." Симонов Денис> Как видишь в сторону увеличения тоже траблы могут быть Шо, увлечение синтетическими поисками крайностей и пр. т.п. и тебя затронуло? Это что, заразно и передаётся воздушно-электронным путём? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 13:30 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Буй, не столб. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 13:31 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, проблема с "синтетическими поисами крайностей", что про это нафиг забывают в иотге ,а потом лет через 15-20-30 оппа, ошибка 2000 или что-то вроде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 14:07 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
то есть да, сейчас в 99,99% случаев заворачивание счетчика не актуаьлно. Но если когда оно станет актуально, про него могут просто не вспомнить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 14:08 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, это всего лишь ответ на то что увеличение генератора всегда безопасно. Не всегда. Пусть даже тест и синтетический ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 14:19 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
AriochНо если когда оно станет актуально, про него могут просто не вспомнитьПереход счетчика через 2^63-1 придется долго ждать, если двигаться к нему с шагом = 1. Даже если будут системы со 100 млн транзакциями в секунду... Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 14:19 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Таблоид, но один из способов разносить данные по "филиалам" как раз был через раздачу крупных пулов номеров Primary Key. Впрочем, согласен, жить с этим уже не нам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 14:50 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Таблоид, пример был приведён лишь в качестве демонстрации, что злоумышленник может и без уменьшения значения генератора напортачить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 15:13 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
Arioch> а потом лет через 15-20-30 оппа, ошибка 2000 или что-то вроде И? Ну будет не 2000, а 3000. Нет, лучше 5000. Голову лечить надо просто. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 15:19 |
|
||
|
Транзакционные генераторы
|
|||
|---|---|---|---|
|
#18+
AriochТаблоид, но один из способов разносить данные по "филиалам" как раз был через раздачу крупных пулов номеров Primary Key. Впрочем, согласен, жить с этим уже не нам Проблема скорее в том что во многих системах это число сильно меньше 2:63/"кол-во филиалов" ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 21:10 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38853215&tid=1563093]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
186ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 525ms |

| 0 / 0 |
