| Уровень изоляции конкурирующей транзакции принят по умолчанию (READ COMMITTED). В примере шаги 4, 6 и 8 демонстрируют черновое чтение. Шаги 9 и 10 блокируются, потому что данные захвачены конкурирующей транзакцией. | |
| Пользователь user1 Конкурирующая транзакция | Пользователь user2 Текущая транзакция |
| USE basa_user2 BEGIN TRANSACTION TRA | USE basa_user2 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED BEGIN TRANSACTION TRB |
| 1.SELECT * FROM Товар | 2.SELECT * FROM Товар |
| 3.UPDATE Товар SET остаток=остаток+10 WHERE КодТовара=4 | 4.SELECT * FROM Товар (читает измененные неподтвержденные данные) |
| 5.DELETE FROM Товар WHERE КодТовара=4 | 6.SELECT * FROM Товар (читает измененные неподтвержденные данные) |
| 7.INSERT Товар (Название, остаток) VALUES ('SS',999) | 8.SELECT * FROM Товар (читает измененные неподтвержденные данные) |
| 12.ROLLBACK TRANSACTION TRA | 9.UPDATE Товар SET остаток=остаток+10 WHERE КодТовара=4 (блокируется до окончания конкурирующей транзакции) |
| 10.DELETE FROM Товар WHERE КодТовара=4 (блокируется до окончания конкурирующей транзакции) | 11.INSERT Товар(Название, остаток) VALUES ('SS',999) (выполняется) |
| 13.ROLLBACK TRANSACTION TRB SELECT @@TRANCOUNT | |
| Уровень изоляции конкурирующей транзакции принят по умолчанию (READ COMMITTED). В примере шаги 4, 6 и 8 демонстрируют блокировку данных, захваченных другой транзакцией, в то время как работа с другими данными разрешается (шаг 10). | |
| Пользователь user1 Конкурирующая транзакция | Пользователь user2 Текущая транзакция |
| USE basa_user2 BEGIN TRANSACTION TRA | USE basa_user2 SET TRANSACTION ISOLATION LEVEL READ COMMITTED BEGIN TRANSACTION TRB |
| 1.SELECT * FROM Товар | 2.SELECT * FROM Товар |
| 3.UPDATE Товар SET остаток=остаток+10 (захватывает данные) | 4.SELECT * FROM Товар WHERE КодТовара=4 (блокируется до окончания конкурирующей транзакции) |
| 5.DELETE FROM Товар WHERE КодТовара=4 | 6.UPDATE Товар SET остаток=остаток+10 WHERE КодТовара=4 (блокируется до окончания конкурирующей транзакции) |
| 7.UPDATE Товар SET остаток=остаток+10 WHERE КодТовара=4 (выполняется той транзакцией, которая первой захватила данные на изменение или удаление) | 8.DELETE FROM Товар WHERE КодТовара=4 (блокируется до окончания конкурирующей транзакции) |
| 9.INSERT Товар (Название, остаток) VALUES ('SS',999) | 10.INSERT Товар(Название, остаток) VALUES ('SS',999) (выполняется) |
| 11.ROLLBACK TRANSACTION TRA SELECT @@TRANCOUNT | 12.ROLLBACK TRANSACTION TRB SELECT @@TRANCOUNT |
| Уровень изоляции конкурирующей транзакции принят по умолчанию (READ COMMITTED). На шаге 2 транзакция захватила данные чтением и блокирует работу с ними со стороны конкурирующей транзакции (шаги 3, 5), которая может лишь добавлять записи (шаг 7). | |
| Пользователь user1 Конкурирующая транзакция | Пользователь user2 Текущая транзакция |
| USE basa_user2 BEGIN TRANSACTION TRA | USE basa_user2 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ BEGIN TRANSACTION TRB |
| 1.SELECT * FROM Товар | 2.SELECT * FROM Товар (захватывает данные) |
| 3.UPDATE Товар SET остаток=остаток+10 WHERE КодТовара=4 (блокируется) | 4.SELECT * FROM Товар (блокируется до окончания конкурирующей транзакции) |
| 5.DELETE FROM Товар WHERE КодТовара=4 (блокируется) | 6.UPDATE Товар SET остаток=остаток+10 WHERE КодТовара=4 (выполняется, т.к. данные захвачены текущей транзакцией) |
| 7.INSERT Товар (Название, остаток) VALUES ('SS',999) (выполняется) | 8.DELETE FROM Товар WHERE КодТовара=4 (выполняется, т.к. данные захвачены текущей транзакцией) |
| 10.ROLLBACK TRANSACTION TRA SELECT @@TRANCOUNT | 9.INSERT Товар(Название, остаток) VALUES ('SS',999) (выполняется) |
| | 11.ROLLBACK TRANSACTION TRB SELECT @@TRANCOUNT |
| Уровень изоляции конкурирующей транзакции принят по умолчанию (READ COMMITTED). Пример демонстрирует, что текущая транзакция захватила данные чтением (шаг 2) и блокирует любые действия с ними со стороны конкурирующей транзакции вплоть до вставки данных (шаг 7). | |
| Пользователь user1 Конкурирующая транзакция | Пользователь user2 Текущая транзакция |
| USE basa_user2 BEGIN TRANSACTION TRA | USE basa_user2 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION TRB |
| 1.SELECT * FROM Товар | 2.SELECT * FROM Товар (захватывает данные) |
| 3.UPDATE Товар SET остаток=остаток+10 WHERE КодТовара=4 (блокируется) | 4.SELECT * FROM Товар (выполняется) |
| 5.DELETE FROM Товар WHERE КодТовара=4 (блокируется) | 6.UPDATE Товар SET остаток=остаток+10 WHERE КодТовара=4 (выполняется, т.к. данные захвачены текущей транзакцией) |
| 7.INSERT Товар (наименование, остаток) VALUES ('SS',999) (блокируется) | 8.DELETE FROM Товар WHERE КодТовара=4 (выполняется, т.к. данные захвачены текущей транзакцией) |
| 10.ROLLBACK TRANSACTION TRA SELECT @@TRANCOUNT | 9.INSERT Товар(Название, остаток) VALUES ('SS',999) (выполняется) |
| | 11.ROLLBACK TRANSACTION TRB SELECT @@TRANCOUNT |
| OLAP | OLTP |
| Хранилище данных должно включать как внутренние корпоративные данные, так и внешние данные | основным источником информации, поступающей в оперативную БД, является деятельность корпорации, а для проведения анализа данных требуется привлечение внешних источников информации (например, статистических отчетов) |
| Объем аналитических БД как минимум на порядок больше объема оперативных. для проведения достоверных анализа и прогнозирования в хранилище данных нужно иметь информацию о деятельности корпорации и состоянии рынка на протяжении нескольких лет | Для оперативной обработки требуются данные за несколько последних месяцев |
| Хранилище данных должно содержать единообразно представленную и согласованную информацию, максимально соответствующую содержанию оперативных БД. Необходима компонента для извлечения и «очистки» информации из разных источников. Во многих крупных корпорациях одновременно существуют несколько оперативных ИС с собственными БД (по историческим причинам). | Оперативные БД могут содержать семантически эквивалентную информацию, представленную в разных форматах, с разным указанием времени ее поступления, иногда даже противоречивую |
| Набор запросов к аналитической базе данных предсказать невозможно. хранилища данных существуют, чтобы отвечать на нерегламентированные запросы аналитиков. Можно рассчитывать только на то, что запросы будут поступать не слишком часто и затрагивать большие объемы информации. Размеры аналитической БД стимулируют использование запросов с агрегатами (сумма, минимальное, максимальное, среднее значение и т.д.) | Системы обработки данных создаются в расчете на решение конкретных задач. Информация из БД выбирается часто и небольшими порциями. Обычно набор запросов к оперативной БД известен уже при проектировании |
| При малой изменчивости аналитических БД (только при загрузке данных) оказываются разумными упорядоченность массивов, более быстрые методы индексации при массовой выборке, хранение заранее агрегированных данных | Системы обработки данных по своей природе являются сильно изменчивыми, что учитывается в используемых СУБД (нормализованная структура БД, строки хранятся неупорядоченно, B-деревья для индексации, транзакционность) |
| Информация аналитических БД настолько критична для корпорации, что требуются большая грануляция защиты (индивидуальные права доступа к определенным строкам и/или столбцам таблицы) | Для систем обработки данных обычно хватает защиты информации на уровне таблиц |