Заранее прошу прощения, может быть вопрос вызван недопониманием, но вот какое дело:
В базе версии записей хранятся в виде "дельты", так? Вот скажем есть таблица из 20 полей. Делается апдейт ОДНОГО поля. Новая версия (вернее "дельта") будет состоять только из информации по ЭТОМУ полю?
К чему я это спрашиваю - возможно ли теоретически сделать следующее - если пользователи обновляют ОДНУ и ту же запись, но РАЗНЫЕ поля, не получать конфликта, а корректно учитывать изменения каждого, и выдавать ошибку блокировки толко если эти изменения "пересекаются" по какому-то полю? Ну, скажем для транзакций read_committed конечно. Чисто теоретически?
Теоретический вопрос
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Re: Теоретический вопрос
Не совсем так. Уровню работы со страницами данных начхать на структуру записей, он про поля ничего не знает. Есть две версии записи - исходная и новая. Новая хранится целиком (в сжатом виде есс-но), исходная - как дельта, применяемая к новой. Дельта есть закодированная разница двух байтовых потоков.Kotъ-Begemotъ писал(а):Заранее прошу прощения, может быть вопрос вызван недопониманием, но вот какое дело:
В базе версии записей хранятся в виде "дельты", так? Вот скажем есть таблица из 20 полей. Делается апдейт ОДНОГО поля. Новая версия (вернее "дельта") будет состоять только из информации по ЭТОМУ полю?
Нет. И способ хранения записей тут абсолютно не при чём.Kotъ-Begemotъ писал(а):К чему я это спрашиваю - возможно ли теоретически сделать следующее - если пользователи обновляют ОДНУ и ту же запись, но РАЗНЫЕ поля, не получать конфликта, а корректно учитывать изменения каждого, и выдавать ошибку блокировки толко если эти изменения "пересекаются" по какому-то полю? Ну, скажем для транзакций read_committed конечно. Чисто теоретически?
Если запись настолько не целостна, что разные её поля допустимо (постановкой прикладной задачи) редактировать одновременно разными пользователями, то это явная ошибка проектирования и данные поля должны относиться к разным таблицам
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Re: Теоретический вопрос
Ага, понятно с этим - раз байтовые потоки и нет никакой информации о полях, то конечно такого не сделать в принципе, ясно, спасибо за разъяснения.hvlad писал(а):Не совсем так. Уровню работы со страницами данных начхать на структуру записей, он про поля ничего не знает. Есть две версии записи - исходная и новая. Новая хранится целиком (в сжатом виде есс-но), исходная - как дельта, применяемая к новой. Дельта есть закодированная разница двух байтовых потоков.
А вот с этим не могу не согласиться! Типичный пример - диспетчер принявший заказ замечает в нём ошибку и пытается исправить. В это время заказ уже "пошёл в работу" то есть как раз поступает на выполнение... Другое дело что программно это можно обработать, но сам факт - ситуация ведь возможная?hvlad писал(а):Если запись настолько не целостна, что разные её поля допустимо (постановкой прикладной задачи) редактировать одновременно разными пользователями, то это явная ошибка проектирования и данные поля должны относиться к разным таблицам
Re: Теоретический вопрос
Т.е. - согласенKotъ-Begemotъ писал(а):А вот с этим не могу не согласиться!hvlad писал(а):Если запись настолько не целостна, что разные её поля допустимо (постановкой прикладной задачи) редактировать одновременно разными пользователями, то это явная ошибка проектирования и данные поля должны относиться к разным таблицам

И что реально пойдёт на выполнение ? Исправленный заказ или нет ? И как исполнитель об этом узнает ?Kotъ-Begemotъ писал(а):Типичный пример - диспетчер принявший заказ замечает в нём ошибку и пытается исправить. В это время заказ уже "пошёл в работу" то есть как раз поступает на выполнение... Другое дело что программно это можно обработать, но сам факт - ситуация ведь возможная?
В данном случае я бы сказал, что постановка задачи (как обычно), не допускает одновременного редактирования разных частей заказа
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Re: Теоретический вопрос
Ну очепятался, заработался совсемhvlad писал(а):Т.е. - согласен


Ну это уже другие вопросыhvlad писал(а):И что реально пойдёт на выполнение ? Исправленный заказ или нет ? И как исполнитель об этом узнает ?
В данном случае я бы сказал, что постановка задачи (как обычно), не допускает одновременного редактирования разных частей заказа


