Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нетранзакционные СУБД и операции 
V
    Опции темы
Greg
Дата 8.6.2008, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

Репутация: нет
Всего: 7



Доброго времени суток !
Существуют ли в реальном мире достаточно известные СУБД, не поддерживающие транзакции ? Это то же что и однопользовательские СУБД или нет ? Какие операции в транзакционных СУБД могут исполняться вне транзакции ? 
--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
Akella
Дата 8.6.2008, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 3
Всего: 329



Цитата(Greg @  8.6.2008,  20:08 Найти цитируемый пост)
Какие операции в транзакционных СУБД могут исполняться вне транзакции ?  

Например в Firebird  генераторы работают вне контекста транзакций

Добавлено через 33 секунды
т.е. выдача значения для инкрементальных полей
PM MAIL   Вверх
LSD
Дата 8.6.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(Greg @  8.6.2008,  21:08 Найти цитируемый пост)
Существуют ли в реальном мире достаточно известные СУБД, не поддерживающие транзакции ?

1. Большинство файловых СУБД.
2. Можно любую СУБД заставить работать в режиме автокоммита, вот и будет практически без транзакций.


Цитата(Greg @  8.6.2008,  21:08 Найти цитируемый пост)
Это то же что и однопользовательские СУБД или нет ?

Не всегда.


Цитата(Greg @  8.6.2008,  21:08 Найти цитируемый пост)
Какие операции в транзакционных СУБД могут исполняться вне транзакции ? 

Как уже сказали сиквенсы работают вне транзакции. Плюс в некоторых СУБД (в частности в 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.
PM MAIL WWW   Вверх
Greg
Дата 9.6.2008, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

Репутация: нет
Всего: 7



Akella, спасибо за конкретный пример. 
LSD, отдельное спасибо за подробный ответ.
Цитата(LSD @  8.6.2008,  23:12 Найти цитируемый пост)
А с какой целью задан вопрос?

Не понятна идея не транзакционного подхода. В частности почему генерация ключа выполняется вне транзакции ? Какие у него преимущества перед транзакционным и в каких случаях его используют ?


--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
Deniz
Дата 9.6.2008, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



Уникальные индексы должны работать вне транзакции.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Akina
Дата 9.6.2008, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(Greg @  9.6.2008,  01:21 Найти цитируемый пост)
почему генерация ключа выполняется вне транзакции ?

Потому что он уникален. Вне зависимости от чего-либо, включая откаты. И срок его уникальности равен сроку жизни таблицы.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Greg
Дата 9.6.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

Репутация: нет
Всего: 7



Приведу пример простейшего генератора ключей - выбирается максимальное значение из существующих ключей, инкрементируется. Другая транзакция (добавление новой строки таблицы) выполнится между этими двумя операциями. Как в таком случае гарантировать целостность данных ?
--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
LSD
Дата 9.6.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(Greg @  9.6.2008,  10:52 Найти цитируемый пост)
Приведу пример простейшего генератора ключей - выбирается максимальное значение из существующих ключей, инкрементируется. Другая транзакция (добавление новой строки таблицы) выполнится между этими двумя операциями. Как в таком случае гарантировать целостность данных ?

При таком способе генерации ключа, способ только один блокировка на некий ресурс. Но тогда транзакции будут работать по другому.

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.
PM MAIL WWW   Вверх
Greg
Дата 9.6.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

Репутация: нет
Всего: 7



LSD, это понятно. Но вот, 
Цитата(LSD @  9.6.2008,  11:12 Найти цитируемый пост)
5. Транзакция А генерирует ключ и производит вставку данных.
 Из этого я вижу, что генерация ключа происходит внутри транзакции ?
Цитата(LSD @  8.6.2008,  23:12 Найти цитируемый пост)
Как уже сказали сиквенсы работают вне транзакции.

Не понятно ..

--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
LSD
Дата 9.6.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(Greg @  9.6.2008,  12:20 Найти цитируемый пост)
Из этого я вижу, что генерация ключа происходит внутри транзакции ?

Я объяснял как для твоего случая:
Цитата(Greg @  9.6.2008,  10:52 Найти цитируемый пост)
Приведу пример простейшего генератора ключей - выбирается максимальное значение из существующих ключей, инкрементируется. Другая транзакция (добавление новой строки таблицы) выполнится между этими двумя операциями. Как в таком случае гарантировать целостность данных ?

генерировать ключи без конфликтов.

А сиквенсы генерируются в автономной транзакции по тому алгоритму, что я описал.


--------------------
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.
PM MAIL WWW   Вверх
Akina
Дата 9.6.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(Greg @  9.6.2008,  10:52 Найти цитируемый пост)
Приведу пример простейшего генератора ключей - выбирается максимальное значение из существующих ключей, инкрементируется. Другая транзакция (добавление новой строки таблицы) выполнится между этими двумя операциями. Как в таком случае гарантировать целостность данных ? 

Формулировка предполагает, что либо ключ генерируется SQL-кодом, а не движком, либо что при добавлении строки добавляется опять-таки сгенеренное где-то вне движка значение ключевого поля.

Если же нет, и на обоих этапах ключ генерит автоинкремент, т.е. это самое ключевое поле генерится движком, то он на момент, когда выполняется "Другая транзакция (добавление новой строки таблицы)", еще не забыл, что мгновением раньше он выполнял "выбирается максимальное значение из существующих ключей, инкрементируется".


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Greg
Дата 9.6.2008, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

Репутация: нет
Всего: 7



Цитата(LSD @  9.6.2008,  11:12 Найти цитируемый пост)
5. Транзакция А генерирует ключ и производит вставку данных.

5. Транзакция А генерирует ключ в новой независимой транзакции и производит вставку данных. Я правильно понял ?

--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
LSD
Дата 9.6.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(Greg @  9.6.2008,  14:38 Найти цитируемый пост)
5. Транзакция А генерирует ключ в новой независимой транзакции и производит вставку данных. Я правильно понял ?

Нет. Для варианта генерации ключа выбирается максимальное значение из существующих ключей, инкрементируется это бессмысленно. Повторю еще раз: я описывал как решить ту задачу которую ты описал, сиквенсы работают немного по другому.


--------------------
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.
PM MAIL WWW   Вверх
Greg
Дата 10.6.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

Репутация: нет
Всего: 7



Всем спасибо за обсуждение, с вашей помошью вопрос прояснен.
--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1373 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.