- •Понятия «данные», «информация», «база данных», «субд», «банк данных». Классификация субд
- •Функции субд.
- •Архитектура субд: централизованная архитектура, архитектура «файл-сервер»
- •Архитектура субд: архитектура «клиент-сервер», трехзвенная архитектура
- •Уровни представления баз данных
- •Модели данных субд: иерархическая модель
- •Модели данных субд: сетевая модель
- •Модели данных субд: реляционная модель
- •Реляционная модель данных
- •Модели данных субд: постреляционная модель
- •Модели данных. Инфологические модели: семантическая сеть, графовые модели, модель «сущность-связь».
- •«Сущность-связь»
- •Инфологическая модель «Сущность-связь»: сущность, связь, типы связей, атрибут, уникальный идентификатор, полная и неполная идентификация, возможный ключ сущности.
- •Методология проектирования idef1x: зависимые и независимые сущности, степень связи, типы связи, внешние ключи, правила построения диаграмм
- •Реляционная модель данных: классы отношений, типы связей между отношениями
- •Манипулирование реляционными данными: базовые теоретико-множественные операции реляционной алгебры (объединение, разность, пересечение, произведение).
- •Манипулирование реляционными данными: специальные операции реляционной алгебры (селекция, проекция, соединение, деление)
- •Реляционная модель данных: аномалии обновления, нормализация, первая нормальная форма
- •Реляционная модель данных: функциональные зависимости, вторая нормальная форма
- •Реляционная модель данных: третья нормальная форма, алгоритм нормализации
- •Реляционная модель данных: сравнение нормализованных и ненормализованных моделей
- •Целостность реляционных данных: Null-значения, потенциальные ключи, простой ключ, составной ключ, первичный ключ, альтернативный ключ
- •Целостность реляционных данных: целостность сущностей, внешний ключ, целостность внешних ключей
- •Целостность реляционных данных: операции, которые могут нарушить ссылочную целостность
- •Целостность реляционных данных: стратегии поддержания ссылочной целостности.
- •Основы языка sql: синтаксис операторов определения объектов базы данных (create table, alter table, drop table) create table - создать таблицу
- •Определение первичных и альтернативных ключей с помощью оператора alter
- •Операторы drop
- •Основы языка sql: синтаксис операторов манипулирования данными (select, order by, встроенные функции, group by)
- •Сортировка результатов
- •Встроенные функции sql
- •Основы языка sql: чтение данных из нескольких таблиц с применением вложенных запросов
- •Основы языка sql: чтение данных из нескольких таблиц с помощью операции соединения
- •Основы языка sql: средства модификации данных языка sql
- •Представления. Применение представлений. Обновление представлений.
- •Обновление представлений
- •Триггеры. Типы триггеров. Применение.
- •Применения триггеров
- •Хранимые процедуры. Преимущества использования хранимых процедур
- •Преимущества хранимых процедур
- •Большая безопасность и меньший сетевой трафик.
- •Sql можно оптимизировать
- •Совместное использование кода:
- •Физическая организация бд: структура памяти эвм, представление экземпляра логической записи в памяти эвм
- •Структура памяти эвм
- •Представление экземпляра логической записи
- •Физическая организация бд: организация обмена между оперативной и внешней памятью
- •Физическая организация бд: размещение физических записей в виде списковой структуры (реализация операций поиска, чтения, редактирования, удаления и добавления логических записей)
- •Физическая организация бд: использование индексов (реализация операций поиска, чтения, редактирования, удаления и добавления логических записей)
- •Физическая организация бд: использование сбалансированного дерева (реализация операций поиска, чтения, редактирования, удаления и добавления логических записей)
- •Физическая организация бд: использование хеширования (реализация операций поиска, чтения, редактирования, удаления и добавления логических записей)
- •Параллельная обработка данных: необходимость в атомарных транзакциях
- •Параллельная обработка данных: проблема потерянного обновления, проблема несогласованного чтения
- •Блокировка ресурсов. Неявные и явные блокировки. Глубина детализации блокировки. Монопольная и коллективная блокировки
- •Блокировка ресурсов: сериализуемые транзакции
- •Блокировка ресурсов: взаимная блокировка
- •Блокировка ресурсов: оптимистическая и пессимистическая блокировки
- •Блокировка ресурсов: объявление характеристик блокировки
- •Свойства транзакций: атомарность, долговечность, согласованность
- •Свойства транзакций: изолированность транзакции, уровни изоляции
- •Курсор. Типы курсоров
- •Управление параллельной обработкой в ms sql Server
- •Xml как язык разметки. Общие черты и различия html и xml. Разделение между структурой документа, его содержимым и материализацией
- •Описание содержимого xml-документа с помощью dtd.
- •Описание содержимого xml-документа с помощью xml-схемы.
- •Материализация хмl-документов с помощью xslt.
- •Плоские и структурированные xml-схемы. Глобальные элементы
- •Создание хмl-документов на основе информации из базы данных
- •Select...For xml для нескольких таблиц
- •Понятие и архитектура системы поддержки принятия решений
- •Понятие хранилища данных
- •Физические и виртуальные хранилища данных
- •Проблематика построения хранилищ данных
- •Витрины данных
- •Понятие olap. Категории данных в хд. Информационные потоки в хд
- •Категории данных в хд
- •Информационные потоки в хд
- •Структура olap-куба. Иерархия измерений olap-кубов
- •Иерархия измерений olap-кубов
- •Операции, выполняемые над гиперкубом
- •Архитектура olap-систем
- •Слой извлечения, преобразования и загрузки данных
- •Слой хранения данных
- •Слой анализа данных
- •Клиентские и серверные olap-средства
- •Клиентские olap-средства
- •Серверные olap-средства
- •Технические аспекты многомерного хранения данных: molap, holap
- •Технические аспекты многомерного хранения данных: rolap, схема «звезда», схема «снежинка»
- •Основные характеристики системы Notes. Инфраструктура Lotus Domino. Типы клиентов. Основные характеристики системы No
- •Основные характеристики системы Notes [1]:
- •Инфраструктура Lotus Domino
- •Клиенты
- •Структура баз данных Lotus Domino. Типы документов Структура баз данных Lotus Domino
- •Типы документов
- •Механизм репликации в Lotus Domino.
- •Что происходит во время репликации
- •Некоторые соображения по поводу репликации
-
Свойства транзакций: изолированность транзакции, уровни изоляции
Блокировки предотвращают потерю изменений при параллельной обработке. Тем не менее, существует ряд проблем, которые они предотвратить не в состоянии.
Проблемы при параллельной обработке:
-
«грязное» чтение,
-
невоспроизводимое чтение,
-
фантомное чтение.
«Грязное» чтение (dirty read) – чтение транзакцией записи, которая изменена, но еще не записана в базу данных. Это может произойти, например, когда одна транзакция считывает строку, измененную другой незавершенной транзакцией, а эта другая транзакция впоследствии отменяется.
Невоспроизводимое чтение (nonrepeatable reads) – это ситуация, когда при повторном чтении данных, уже считанных ранее, транзакция обнаруживает модификации или удаления, вызванные другой завершенной транзакцией.
Фантомное чтение (phantom reads) – это ситуация, когда при повторном чтении данных транзакция обнаруживает новые строки, вставленные другой завершенной транзакцией после предыдущего чтения.
В стандарте языка SQL 1992 г. определены 4 уровня изоляции транзакций, которые определяют допустимость перечисленных выше проблем:
-
незавершенное чтение,
-
завершенное чтение,
-
воспроизводимое чтение,
-
сериализуемость.
Цель состоит в том, чтобы разработчик прикладной программы мог указать желаемый уровень изоляции, а СУБД осуществляла управление блокировками в соответствии с этим указанием.
Как можно видеть из табл. 1, уровень изоляции под названием «незавершенное чтение» (read uncommitted) допускает «грязное» чтение, невоспроизводимое чтение и фантомное чтение. Уровень изоляции «завершенное чтение» (read committed) предотвращает «грязное» чтение. Уровень изоляции «воспроизводимое чтение» (repeatable reads) предотвращает «грязное» чтение и невоспроизводимое чтение. Уровень изоляции «сериализуемость» (serializable) не допускает возникновения ни одной из этих трех проблем.
Тип проблемы |
Уровень изоляции изоляции |
|||
Незавершенное чтение |
Завершенное чтение |
Воспроизводимое чтение |
Сериализуемость |
|
«Грязное» чтение |
Возможно |
Невозможно |
Невозможно |
Невозможно |
Невоспроизводимое чтение |
Возможно |
Возможно |
Невозможно |
Невозможно |
«Фантомное» чтение |
Возможно |
Возможно |
Возможно |
Невозможно |
Вообще говоря, чем большие ограничения предусматривает уровень изоляции, тем меньше пропускная способность базы данных, хотя многое зависит от нагрузки и от того, как написаны прикладные программы. Кроме того, не всеми СУБД поддерживаются все четыре уровня изоляции. Могут также различаться способы поддержки и степень нагрузки, которую они возлагают на программиста.
-
Курсор. Типы курсоров
Курсор – это указатель на набор строк. Обычно курсоры определяются с помощью операторов SELECT. Например, оператор в листинге 6 определяет курсор под названием TransCursor, действующий на наборе строк, указанном в операторе SELECT. Когда прикладная программа открывает курсор и считывает первую строку, о курсоре говорят, что он «указывает на первую строку».
Листинг 6
DECLARE CURSOR TransCursor AS
SELECT *
FROM TRANSACTION
WHERE PurchasePrice > '10000'
Транзакция может открывать несколько курсоров – как последовательно, так и одновременно. Кроме того, на одной и той же таблице или ее SQL-представлении можно открыть два и более курсора. Поскольку курсоры потребляют значительное количество памяти, то открытие нескольких курсоров, к примеру, для тысячи параллельных транзакций может оказаться накладным в отношении памяти и процессорного времени. Один из способов снизить потребление ресурсов при работе с курсорами – использовать курсоры с ограниченными возможностями в случаях, когда полнофункциональный курсор не требуется.
В табл. 2 перечислены четыре типа курсоров, используемых в среде Windows (в других системах типы курсоров аналогичны.) Простейший тип курсора – последовательный (forward only cursor). Он позволяет приложению передвигаться по набору строк только вперед. Изменения, произведенные другими курсорами в данной транзакции, а также другими транзакциями, будут видны только в том случае, если затронутые ими строки находятся впереди курсора.
Таблица 2. Типы курсоров
Тип курсора |
Описание |
Свойства |
Последовательный |
Приложение может перебирать набор записей только в одном направлении — вперед |
Изменения, производимые другими курсорами в данной транзакции или другими транзакциями, будут видимы только в том случае, если они затрагивают строки, находящиеся перед курсором
|
Статический |
Приложение видит данные в том состоянии в каком они были на момент открытия курсора |
Изменения, производимые данным курсором, являются видимыми. Изменения, инициированные другими источниками, не видны. Перемещение курсора возможно в обоих направлениях |
Ключевой |
При открытии курсора для каждой строки набора записей сохраняется значение первичного ключа. Обращаясь к строке, приложение использует этот ключ для получения текущего значения строки |
Обновления, вызванные любым источником, являются видимыми. Вставки из других источников не видны (в наборе записей для них нет ключей). Строки, вставляемые данным курсором, добавляются в конец набора записей. Изменения, вызванные любым источником, являются видимыми. Изменения в порядке строк не видны. Если выставлен уровень изоляции «незавершенное чтение» (то есть допускается «грязное» чтение), то несохраненные обновления и удаления являются видимыми; в противном случае видны только сохраненные обновления и удаления |
Динамический |
Приложение видит любые изменения, вызванные любым источником |
Все вставки, обновления, удаления и изменения в порядке записей являются видимыми. Если выставлен уровень изоляции «незавершенное чтение» (то есть допускается «грязное» чтение), то несохраненные изменения являются видимыми. В противном случае видны только сохраненные изменения |
Остальные три типа курсоров называются двунаправленными курсорами (scrollable cursors), поскольку приложение может передвигаться по набору записей как вперед, так и назад. Статический курсор (static cursor) обрабатывает «снимок» отношения, сделанный в момент открытия курсора. Изменения, сделанные таким курсором, являются видимыми для самого курсора; изменения из любых других источников являются невидимыми.
Ключевые курсоры (keyset cursors) соединяют в себе некоторые свойства статических и динамических курсоров. При открытии такого курсора для каждой строки в наборе записей сохраняется значение первичного ключа. Когда приложение устанавливает курсор на некоторую строку, СУБД по ключу считывает текущее значение этой строки. Если приложение собирается обновить строку, которая была удалена другим курсором в этой же транзакции либо другой транзакцией, СУБД создает новую строку со старым значением ключа и помещает в нее обновленные значения (если, конечно, заполнены все требуемые поля). Новые строки, вставленные другими курсорами данной транзакции или другими транзакциями, невидимы для ключевого курсора. Данный курсор видит лишь сохраненные обновления и удаления, если только уровень изоляции транзакции не допускает «грязного» чтения.
Динамический курсор (dynamic cursor) — это полнофункциональный курсор. Все вставки, обновления, удаления и изменения в порядке строк являются видимыми для динамического курсора. Как и в случае с ключевыми курсорами, если уровень изоляции транзакции не допускает «грязного» чтения, курсор может видеть только сохраненные изменения.
Количество потребляемых ресурсов и необходимый объем обработки зависят от типа курсора. В общем случае, чем ниже находится тип курсора в табл. 2, тем выше расходы. Поэтому, чтобы увеличить производительность СУБД, разработчик приложения должен создавать курсоры, имеющие ровно столько возможностей, сколько требуется для выполнения поставленной задачи. Также весьма важно представлять, каким образом курсоры реализуются в конкретной СУБД и где они размещаются, – на сервере или на клиенте. Иногда бывает выгоднее иметь динамический курсор на клиенте, чем статический – на сервере. Никакое общее правило сформулировать нельзя, поскольку производительность зависит от способа реализации курсора в СУБД и требований приложения.
Предостережение: если вы не укажете уровень изоляции транзакции или тип курсора, СУБД будет использовать уровень или тип, предусмотренный по умолчанию. Заданные по умолчанию параметры могут идеально подходить для вашего приложения, а могут оказаться и совершенно непригодными. Таким образом, хотя эти вопросы можно игнорировать, последствий избежать все равно не удастся. Изучите возможности вашей СУБД и используйте их рационально.