От того, каким образом физически хранится информация на диске в большой степени зависит скорость работы с БД. Физически база хранится как набор и записей, каждая из которых состоит из одного или более полей. В реляционной базе данных каждая запись соответствует кортежу отношений, а поля – атрибутам.
Запись содержит, как минимум столько байтов, сколько требуется для хранения всех ее полей. Кроме того, запись может включать дополнительные байты, это необходимо в следующих случаях:
- некоторые байты могут свидетельствовать о формате записи, если совместно хранятся записи различных форматов;
- один или несколько байтов могут хранить информацию о длине байтов. Это необходимо, если записи могут иметь переменную длину;
- может быть специальный идентификатор, помечающий является ли запись удаленной или нет. В некоторых СУБД записи физически не удаляются сразу, а помечаются удаленными (механизм теневых страниц). Такие записи продолжаются храниться, но не рассматриваются при построении запросов. В этом случае СУБД должна иметь механизм сборки мусора и перераспределения памяти;
- бит использования – хранит информацию о наличии свободного места. Фактически говорит, что место под текущую запись свободно, служит для оптимизации распределения памяти. При добавлении записи в физический файл к нему может добавиться фрагмент больше, чем запись, то есть блок, соответственно этот бит отмечает, где начинается свободное место;
- неиспользованное пространство. Служит для ускорения доступа к записям, реализует, например, постраничное выравнивание записей.
Организация файла в виде кучи.
Это наиболее простой способ организации файлов. При этом записи помещаются в блоки без какого-либо порядка, блоки выстраиваются таким же образом. Записи помещаются в один блок последовательно по мере появления. Когда блок заполняется, выделяется новый блок и указатель на него помещается в предыдущий; аналогичным образом производится заполнение нового блока.
Хэшированные файлы.
Основная идея хэшированных файлов состоит в том, что записи разбиваются на бакеты, согласно значению ключа. Бакет – не блок, а совокупность записей с одним значением hash-функции.
Индексированные файлы.
Основная идея заключается в построении для файла, содержащего записи одной таблицы, дополнительного файла индекса. Индекс состоит из пар: значение ключа, адрес данных. Данные в индексе всегда упорядоченные.
Управление транзакциями.
Транзакция – действие или последовательность действий, выполняемых одним пользователем или прикладной программой, осуществляющих доступ к БД или изменение содержимого БД, и расцениваемых СУБД как единое целое. Иначе, это логическая единица работы или единица восстановления, то есть транзакция подразумевает, что все действия в ее рамках будут либо все выполнены, либо все отвергнуты.
Транзакция для пользователя – набор операций select, insert, update, delete.