![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: нет Всего: 7 |
Доброго времени суток !
Существуют ли в реальном мире достаточно известные СУБД, не поддерживающие транзакции ? Это то же что и однопользовательские СУБД или нет ? Какие операции в транзакционных СУБД могут исполняться вне транзакции ? --------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 3 Всего: 329 |
||||
|
||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
1. Большинство файловых СУБД. 2. Можно любую СУБД заставить работать в режиме автокоммита, вот и будет практически без транзакций. Не всегда.
Как уже сказали сиквенсы работают вне транзакции. Плюс в некоторых СУБД (в частности в Oracle), можно сделать так, чтобы процедура/триггер работали вне транзакции. Вернее они будут работать в своей собственной транзакции, никак не связанное с освновной транзакцией. А с какой целью задан вопрос? Транзакции это дело хорошее и полезное, и отказываться от них не стоит. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: нет Всего: 7 |
Akella, спасибо за конкретный пример.
LSD, отдельное спасибо за подробный ответ. Не понятна идея не транзакционного подхода. В частности почему генерация ключа выполняется вне транзакции ? Какие у него преимущества перед транзакционным и в каких случаях его используют ? --------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 7 Всего: 44 |
Уникальные индексы должны работать вне транзакции.
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Потому что он уникален. Вне зависимости от чего-либо, включая откаты. И срок его уникальности равен сроку жизни таблицы. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: нет Всего: 7 |
Приведу пример простейшего генератора ключей - выбирается максимальное значение из существующих ключей, инкрементируется. Другая транзакция (добавление новой строки таблицы) выполнится между этими двумя операциями. Как в таком случае гарантировать целостность данных ?
--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
При таком способе генерации ключа, способ только один блокировка на некий ресурс. Но тогда транзакции будут работать по другому. 1. Старт странзакции А. 2. Транзакция А захватывает блокировку на некий объект (например таблицу). 3. Старт транзакции Б. 4. Транзакция Б пытается захватить блокировку на тот объект и встает. 5. Транзакция А генерирует ключ и производит вставку данных. 6. Транзакция А завершается. 7. Транзакция А освобождает блокировку. 8. Транзакция Б захватывает блокировку и продолжает свою работу. Добавлено через 1 минуту и 18 секунд На самом деле сиквенсы и автоинкременты приблизительно так и работают. С учетом некоторой оптимизации по произвотительности (типа кеширования). -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: нет Всего: 7 |
LSD, это понятно. Но вот,
Из этого я вижу, что генерация ключа происходит внутри транзакции ? Не понятно .. --------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Я объяснял как для твоего случая: генерировать ключи без конфликтов. А сиквенсы генерируются в автономной транзакции по тому алгоритму, что я описал. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Формулировка предполагает, что либо ключ генерируется SQL-кодом, а не движком, либо что при добавлении строки добавляется опять-таки сгенеренное где-то вне движка значение ключевого поля. Если же нет, и на обоих этапах ключ генерит автоинкремент, т.е. это самое ключевое поле генерится движком, то он на момент, когда выполняется "Другая транзакция (добавление новой строки таблицы)", еще не забыл, что мгновением раньше он выполнял "выбирается максимальное значение из существующих ключей, инкрементируется". -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: нет Всего: 7 |
5. Транзакция А генерирует ключ в новой независимой транзакции и производит вставку данных. Я правильно понял ? --------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Нет. Для варианта генерации ключа выбирается максимальное значение из существующих ключей, инкрементируется это бессмысленно. Повторю еще раз: я описывал как решить ту задачу которую ты описал, сиквенсы работают немного по другому. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Greg |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: нет Всего: 7 |
Всем спасибо за обсуждение, с вашей помошью вопрос прояснен.
--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Общие вопросы по базам данных" | |
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |