Основи на съвременните бази данни Предговор


Лекция 2. Функции на СУБД. Типова организация на СУБД. Примери



страница3/17
Дата17.08.2018
Размер1.71 Mb.
#80209
1   2   3   4   5   6   7   8   9   ...   17

Лекция 2. Функции на СУБД. Типова организация на СУБД. Примери


Както беше показано в първата лекция, традиционните възможности на файловите системи се оказват недостатъчни за построяването даже на прости информационни системи. Показахме няколко потребности, които не се покриват от възможностите на системите за управление на файлове: поддържане на логически съгласуван набор файлове; осигуряване на език за манипулиране с данните; възстановяване на информацията след различни видове сбой; реално паралелна работа на няколко потребители. Може да се смята, че ако приложната информационна система се опира на някаква система за управление на данните, притежаваща тези свойства, то тази система за управление на данни е система за управление на бази от данни (СУБД).

2.1. Основни функции на СУБД


Kъм функциите на СУБД е прието да се отнасят следните:
2.1.1. Непосредствено управление на данните във външната памет

Тази функция включва осигуряване на необходимите структури за външна памет както за съхраняване на данни, непосредственно влизащи в БД, така и за служебни цели, например, за ускоряване достъпа до данните в някои случаи (обикновено за това се използват индекси). В някои реализации на СУБД активно се използват възможностите на съществуващите файлови системи, а в други работата се върши чак до ниво външни запомнящи устройства. Но в развитите СУБД потребителите по принцип не са длъжни да знаят, използва ли СУБД файлова система, и ако използва, то как са организирани файловете. В частност, СУБД поддържа собствена система за именуване на обектите от БД.
2.1.2. Управление на буферите на оперативната памет

СУБД обикновено работят с БД със значителен обем; най-малко този размер обикновено е съществено по-голям от достъпния обем на оперативната памет. Ясно е, че ако при обръщение към произволен елемент данни ще се извършва обмен с външната памет, то цялата система ще работи със скоростта на устройството за външна памет. Практически единственият начин за реално увеличение на тази скорост е буферизацията на данните в оперативната памет. При това, даже и ако операционната система извършва общосистемна буферизация (както в случая на ОС UNIX), това не е достатъчно за целите на СУБД, която разполага с много повече информация за полезността на буферизацията на една или друга част на БД. Затова в развитите СУБД се поддържа собствен набор буфери в оперативната памет със собствена дисциплина на замяна на буферите.

Съществува отделно направление в СУБД, което е ориентирано към постоянно присъствие на цялата БД в оперативната памет. Това направление се основава на предположението, че бъдещия обем на оперативната памет на компютрите ще е толкова голям, че ще позволи да не се мисли за буферизацията. Засега тези работи са в стадий на изследване.


2.1.3. Управление на транзакциите

Транзакцията е последователност от операции над БД, на разглежданите СУБД като едно цяло. Или транзакцията успешно се изпълнява, и СУБД фиксират (COMMIT) измененията на БД, извършени от тази транзакция, във външната памет, или нито едно от тези изменения не се отразява никак на състоянието на БД. Понятието транзакция е необходимо за поддържане на логическата цялост на БД. Ако си спомним примера за информационна система с файловете СЪТРУДНИЦИ и ОТДЕЛИ, то единствения начин да не се наруши цялостта на БД при изпълнение на операцията за приемане на работа на нов сътрудник е обединение на елементарните операции над файловете СЪТРУДНИЦИ и ОТДЕЛИ в една транзакция. Така, поддържането на механизма на транзакциите е задължително условие даже за еднопотребителските СУБД (ако, разбира се, такава система заслужава името СУБД). Но понятието транзакция е много по-важно за многопотребителските СУБД.

Свойството, всяка транзакция да започва при цялостно състояние на БД и оставя това състояние цялостно след своето завършване, прави много удобно използването на понятието транзакция като единица за активност на потребителя по отношение на БД. При съответстващо управление на паралелно изпълняващи се транзакции от страна на СУБД всеки от потребителите може по принцип да усеща себе си единствен потребител на СУБД (реално, това донякъде е идеализирана представа, тъй като в някои случаи потребителите на многопотребителски СУБД могат да усетят присъствието на свои колеги).

С управлението на транзакциите в многопотребителска СУБД са свързани важните понятия за сериализация на транзакциите и сериен план за изпълнение на смес от транзакции. Под сериализация на паралелно изпълняващи се транзакции се разбира такъв ред на планиране на тяхната работа, при който сумарният ефект на сместа транзакции е еквивалентен на ефекта от някакво тяхно последователно изпълнение. Серийният план на изпълнение на сместа транзакции – това е такъв план, който води до сериализация на транзакциите. Ясно е, че ако успеем да получим действително серийно изпълнение на сместа транзакции, то за всеки потребител, по инициатива на когото е образувана транзакция, присъствието на другите транзакции ще е незабележимо (ако не се смята забавянето на работата в сравнение с еднопотребителския режим).

Има няколко базови алгоритъма за сериализация на транзакциите. В централизираните СУБД най-разпространени са алгоритмите, основани на синхронизационни заключвания на обектите в БД. При използване на който и да е алгоритъм за сериализация са възможни ситуации на конфликти между две или повече транзакции за достъп до обектите на БД. В този случай за поддържане на сериализацията е необходимо да се изпълни откат (да се ликвидират всички изменения, извършени в БД) на една или повече транзакции. Това е един от случаите, когато потребител на многопотребителска СУБД може реално (и достатъчно неприятно) да усеща присъствието в системата на транзакции на други потребители.


2.1.4. Журнализация

Еднo от основните изисквания към СУБД е надежността на съхраняването на данните във външната памет. Под надежност на съхраняване се разбира това, че СУБД трябва да бъде в състояние да възстанови последното съгласувано състояние на БД след който и да е апаратен или програмен сбой. Обикновено се разглеждат два възможни вида апаратен сбой: така наречения мeк сбой, който може да се трактува като внезапно спиране на работата на компютъра (например, аварийно изключване на захранването), и твърд сбой, характеризиращ се със загуба на информация в носителите на външна памет. Пример за програмен сбой може да бъде: авариен завършек на работата на СУБД (поради грешки в програмата или в резултат на някакъв апаратен сбой) или аварийно завършване на потребителска програма, в резултат на което някоя транзакция остава незавършена. Първата ситуация може да се разглежда като особен вид мек апаратен сбой; при възникването на последния е необходимо да се ликвидират последствията само на една транзакция.

Ясно, е че във всеки случай за възстановяването на БД трябва да е на разположение някаква допълнителна информация. С други думи, поддържането на надежността на съхраняването на данни в БД изисква излишност на съхраняването на данни, при това тази част от данните, която се използва за възстановяване, трябва да се съхранява особено надеждно. Най-разпространеният метод за поддържане на такава излишна информация е воденето на журнал на измененията в БД.

Журналът – това е особена част от БД, недостъпна за потребителите на СУБД и поддържана особено щателно (понякога се поддържат две копия на журнала, разполагани на различни физически дискове), в които постъпват записи за всички изменения в основната част на БД. В различните СУБД измененията на БД се журнализират на различни нива: понякога записът в журнала съответствува на някаква логическа операция по изменение на БД (например, операция за изтриване на ред от таблица на релационна БД), понякога - минимална вътрешна операция за модификация на страница от външната памет; в някои системи едновременно се използват двата подхода.

Във всички случаи се прилага стратегията "изпреварващ" запис в журнала (така наречения протокол Write Ahead Log - WAL). Най-общо, тази стратегия се състои в това, че запис за измененията на кой да е обект на БД трябва да попадне във външната памет на журнала преди измененият обект да попадне във външната памет на основната част на БД. Известно е, че ако в СУБД коректно се съблюдава протоколът WAL, то с помощта на журнала може да се решат всички проблеми по възстановяването на БД след кой да е сбой.

Най-простата ситуация на възстановяване е индивидуалният откат на транзакция. Строго погледнато, за това не е необходим общосистемен журнал на измененията в БД. Достатъчно е за всяка транзакция да се поддържа локалния журнал на операциите за модификация на БД, изпълнени в тази транзакция, и да се проведе откат на транзакцията чрез изпълнение на обратни операции, следвайки от края на локалния журнал. В някои СУБД така се и прави, но в повечето системи не се поддържат локални журнали, а индивидуален откат на транзакция се изпълнява по общосистемния журнал, за което всички записи от една транзакция се свързват чрез обратен списък (от края към началото).

При мек сбой във външната памет на основната част на БД може да има обекти, модифицирани от транзакции, незавършили към момента на сбоя, и може да отсъстват обекти, модифицирани от транзакции, които към момента на сбоя успешно са завършили (поради използване на буфери на оперативната памет, съдържимото на които при мек сбой пропада). При съблюдение на протокола WAL във външната памет на журнала трябва гарантирано да има записи, отнасящи се до операциите модификация на двата вида обекти. Целта на процеса на възстановяване след мек сбой е състоянието на външната памет на основната част на БД, което би възникнало при фиксация във външната памет на измененията на всички завършили транзакции и което не би съдържало никакви следи от незавършени транзакции. За да се постигне това, отначало се извършва откат на незавършените транзакции (undo), а след това повторно се възпроизвеждат (redo) тези операции на завършилите транзакции, резултатите от които не са изобразени във външната памет. Този процес съдържа много тънкости, свързани с общата организация на управление на буферите и журнала.

За възстановяване на БД след твърд сбой се използва журнал и архивно копие на БД. Най-общо, архивното копие е пълно копие на БД към момента на началото на запълване на журнала (има много варианти за по-гъвкава трактовка на смисъла на архивното копие). Разбира се, за нормалното възстановяване на БД след твърд сбой е необходимо, журналът да не е изгубен. Към съхраняването на журнала във външната памет в СУБД се предявяват особено високи изисквания. Тогава възстановяването на БД се състои в това, че изхождайки от архивното копие по журнала се възпроизвежда работата на всички транзакции, които не за завършили към момента на сбоя. По принцип, може даже да се възпроизведе работата на незавършилите транзакции и да се продължи тяхната работа след завършването на възстановяването. Но в реалните системи това обикновено не се прави, тъй като процесът на възстановяване след твърд сбой е достатъчно продължителен.

2.1.5. Поддържане на езици за БД

За работa с базите от данни се използват специални езици, най-общо наричани езици за бази от данни. В ранните СУБД били поддържани няколко специализирани по своите функции езици. Най-много изпъкват два езика - език за определение на схема на БД (SDL - Schema Definition Language) и език за манипулиране с данни (DML - Data Manipulation Language). SDL е служил основно за определяне на логическата структура на БД, т.е. тази структура на БД, която се представя на потребителите. DML е съдържал набор от оператори за манипулиране с данните, т.е. оператори, позволяващи да се записват данни в БД, да се изтриват, модифицират или избират съществуващи данни.

В съвременните СУБД обикновено се поддържа единен интегриран език, съдържащ всички необходими средства за работа с БД, започвайки от нейното създаване, и осигуряващ базовия потребителски интерфейс с базите от данни. Стандартен език за най-разпространените в днешно време релационни СУБД е езикът SQL (Structured Query Language). Ще изброим основните функции на релационната СУБД, поддържани на "езиково" ниво (т.е. функции, поддържани при реализация на интерфейса на SQL).

Езикът SQL съчетава средствата на SDL и DML, т.е. позволява да се определя схемата на релационната БД и да се манипулира с данните. При това именуването на обектите на БД (за релационната БД – именуване на таблици и стълбовете им) се поддържа на езиково ниво в този смисъл, че компилаторът на езика SQL извършва преобразуване на имената на обектите в техни вътрешни идентификатори на основата на специално поддържани служебни таблици - каталози. Вътрешнната част на СУБД (ядрото) въобще не работи с имената на таблици и стълбовете им.

Езикът SQL съдържа специални средства за определяне ограниченията за целостта на БД. Отново, ограниченията за целостта се съхраняват в специални таблици-каталози, и осигуряването на контрола за цялост на БД се извършва на езиково ниво, т.е. при компилацията на операторите за модификация на БД компилаторът на SQL на основата на наличните в БД ограничения за цялост генерира съответния програмен код.

Специални оператори на езика SQL позволяват да се определят така наречените представяния на БД, фактически явяващи се храними заявки в БД (резултат от коя да е заявка към релационната БД е таблица) с именувани стълбове. За потребителя представянето е такава таблица, както и всяка базова таблица, съхранявана в БД, но чрез представянията може да се ограничи или обратно, да се разшири видимостта на БД за конкретен потребител. Поддържането на представянията се извършва също на езиково ниво.

Накрая, авторизацията на достъпа до обектите на БД се извършва също на основата на специален набор оператори на SQL. Идеята се състои в това, че за изпълнение на различните видове оператори на SQL потребителят трябва да има различни права. Потребител, създал таблица на БД, притежава пълен набор пълномощия за работа с тази таблица. Сред тези пълномощия е и пълномощието за предаване на всички или някои пълномощия на други потребители, включително и пълномощието за предаване на пълномощия. Пълномощията на потребителите се описват в специални таблици-каталози, контролът на пълномощията се поддържа на езиково ниво.


2.2. Типова организация на съвременна СУБД


Естествено е организацията на типична СУБД и съставът на нейните компоненти да съответствува на набора от функции:

  • управление на данните във външната памет;

  • управление на буферите на оперативната памет;

  • управление на транзакциите;

  • журнализация и възстановяване на БД след сбой;

  • поддържане на езици за БД.

Логически в една съвременна релационна СУБД може да отделим най-вътрешна част – ядрото на СУБД (често го наричат Data Base Engine), компилатор на езика за БД (обикновено SQL), подсистема за поддержане времето на изпълнение, набор утилити. В някои системи тези части изпъкват, в други - не, но логически такова разделение може да се извърши във всички СУБД.

Ядрото на СУБД отговаря за управлението на данните във външната памет, управлението на буферите на оперативната памет, управление на транзакции и журнализация. Съответно, може да се отделят такива компоненти на ядрото (поне логически, макар, че в някои системи тези компоненти се отделят явно), като мениджър на данните, мениджър на буферите, мениджър на транзакциите и мениджър на журнала. Както се разбра от първата част на тази лекция, функциите на тези компоненти са взаимосвързани, и за осигуряване на коректната работа на СУБД всички тези компоненти са длъжни да взаимодействуват по щателно обмислени и проверени протоколи. Ядрото на СУБД има собствен интерфейс, недостъпен за потребителите директно и използван в програмите, произвеждан от компилатора на SQL (или в подсистемата за поддържане на изпълнението на такива програми) и утилитите на БД. Ядрото на СУБД е основна резидентна част на СУБД. При използване на архитектурата "клиент-сървър" ядрото е основна съставляваща на сървърната част на системата.

Основната функция на компилатора на езика на БД е компилация на операторите на езика на БД в изпълняваната програма. Основен проблем на релационните СУБД е този, че езиците на тези системи (а това, като правило е SQL) са непроцедурни, т.е. в оператор на такъв език се специфицира някакво действие над БД, но тази спецификация не е процедура, а само описва в някаква форма условието за извършване на желаемо действие (спомнете си примерите от първата лекция). Затова компилаторът трябва да реши, по какъв начин да изпълнява оператора на езика, преди да произведе програмата. Използват се достатъчно сложни методи за оптимизация на операторите, които ние подробно ще разгледаме в следващите лекции. Резултат от компилацията е изпълнявана програма, представяна в някои системи в машинни кодове, но по-често в изпълняем вътрешен машинно-независим код. В последния случай реалното изпълнение на оператора се извършва с привличане на подсистема за поддържане на времето за изпълнение, представляващо, по своята същност, интерпретатор на този вътреншен език.

Накрая, в отделните утилити на БД обикновено изпъкват такива процедури, които твърде тежко се изпълняват с използване на език за БД, например, зареждане и разтоварване на БД, събиране на статистика, глобална проверка на целостта на БД и т.н. Утилитите се програмират с използване на интерфейса на ядрото на СУБД, а понякога даже с проникване вътре в ядрото.


2.3. Пример: System R


Основните цели на разработчиците на System R били следните:

  • да се осигури ненавигационен интерфейс от високо ниво на потребителя със системата, позволяващ да достигне независимост от данните и да се даде възможност на потребителите да работят максимално ефективно;

  • да се осигури многообразие на допустимите способи на използване на СУБД, включително програмируеми транзакции, диалогови транзакции и генерация на отчети;

  • да се поддържа динамически изменяема среда на базите от данни, в която отношенията, индексите, представянията, транзакциите и другите обекти може лесно да се добавят и унищожават без спиране на нормалното функциониране на системата;

  • да се осигури възможност за паралелна работа на много потребители с една база от данни с допускане на паралелна модификация на обектите на базата от данни при наличие на необходимите средства за защита на целостта на базата от данни;

  • да се осигурят средства за възстановяване нс съгласуваното състояние на базите от данни след различни видове сбой на апаратурата или програмното оигуряване;

  • да се осигури гъвкав механизъм, позволяващ определянето на различни представяния на съхраняваните данни, и ограничи чрез тези представяния достъпът на потребители до базата от данни по избор и модификация на основата на механизъм за авторизация;

  • да се осигури производителност на системата при изпълнение на споменатите функции, сопоставима с производителността на съществуващите СУБД от ниско ниво.

Структурната организация на System R напълно се съгласува с поставените при нейната разработка цели. Основните структурни компоненти на System R са системата за управление на релационната памет (Relational Storage System - RSS) и компилаторът на заявки на езика SQL. RSS осигурява интерфейса на много ниско, но достатъчно за реализация на SQL ниво за достъп до съхраняваното в базата от данни. Синхронизацията на транзакциите, журнализацията на измененията и възстановяването на базите от данни след сбой също се отнасят към функциите на RSS. Компилаторът на заявките използува интерфейса на RSS за достъп до разнообразна справочна информация (каталози на отношенията, на индексите, на правата на достъп, на условия за цялостност, условни въздействия и т.н.) и произвежда работни програми, изпълнявани по-нататък също с използване на интерфейса на RSS. По такъв начин, системата естествено се разделя на две нива – ниво на управление на паметта и синхронизацията, фактически, не зависеща от базовия език на заявките на системата, и езиково ниво (ниво на SQL), на което се решават повечето проблеми в System R. Тази независимост е по-скоро условна, отколкото абсолютна: езикът SQL може да се замени с друг език, но той трябва да има такава семантика.

Каталог: tadmin -> upload -> storage
storage -> Литература на факта. Аналитизъм. Интерпретативни стратегии. Въпроси и задачи
storage -> Лекция №2 Същност на цифровите изображения Въпрос. Основни положения от теория на сигналите
storage -> Лекция 5 система за вторична радиолокация
storage -> Толерантност и етничност в медийния дискурс
storage -> Ethnicity and tolerance in media discourse revisited Desislava St. Cheshmedzhieva-Stoycheva abstract
storage -> Тест №1 Отбележете невярното твърдение за подчертаните думи
storage -> Лекции по Въведение в статистиката
storage -> Търсене на живот във вселената увод
storage -> Еп. Константинови четения – 2010 г някои аспекти на концептуализация на богатството в руски и турски език


Сподели с приятели:
1   2   3   4   5   6   7   8   9   ...   17




©obuch.info 2024
отнасят до администрацията

    Начална страница