Главная страница

БД. Docker. Знакомство, использование. Контейнеры


Скачать 55.39 Kb.
НазваниеDocker. Знакомство, использование. Контейнеры
Дата05.06.2022
Размер55.39 Kb.
Формат файлаdocx
Имя файлаKonspekt (2).docx
ТипДокументы
#570468
страница2 из 3
1   2   3

«пиши сначала в журнал»

Если во внешней памяти базы данных находится некоторый объект базы данных, по отношению к которому выполнена операция модификации, то во внешней памяти журнала обязательно находится запись, соответствующая этой операции. Обратное неверно.

Выталкивание буфера

Минимальным требованием, гарантирующим возможность восстановления последнего согласованного состояния базы данных, является выталкивание при фиксации транзакции во внешнюю память журнала всех записей об изменении базы данных этой транзакцией.

Индивидуальный откат транзакции выполняется следующим образом:

•Просматривается список записей, сделанных данной транзакцией в журнале транзакций.

•Выбирается очередная запись из списка данной транзакции.

•Выполняется противоположная по смыслу операция.

•Любая из этих обратных операций также журнализируются.

•При успешном завершении отката в журнал заносится запись о конце транзакции.

Согласованность

Состояние внешней памяти базы данных называется физически согласованным, если наборы страниц всех объектов согласованы, т.е. соответствуют состоянию объекта либо после его изменения, либо до изменения.

Восстановление после мягкого сбоя

Несмотря на протокол WAL, после мягкого сбоя не все физические страницы базы данных содержат измененные данные, т.к. не все "грязные" страницы базы данных были вытолкнуты во внешнюю память.

Имеется 5 вариантов состояния транзакций по отношению к моменту последней контрольной точки и к моменту сбоя:

T1 - транзакция успешно завершена до принятия контрольной точки. Все данные этой транзакции сохранены в долговременной памяти

T2 - транзакция начата до принятия контрольной точки и успешно завершена после контрольной точки, но до наступления сбоя. Для данной транзакции необходимо повторить заново те операции, которые были выполнены после принятия контрольной точки.

T3 - транзакция начата до принятия контрольной точки и не завершена в результате сбоя. Такую транзакцию необходимо откатить.

T4 - транзакция начата после принятия контрольной точки и успешно завершена до сбоя системы. Такую транзакцию необходимо повторить целиком.

T5 - транзакция начата после принятия контрольной точки и не завершена в результате сбоя. Никаких следов этой транзакции нет ни во внешней памяти журнала транзакций, ни во внешней памяти базы данных.

Физическая согласованность базы данных

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

●Использование теневого механизма,

Журнализация постраничных изменений базы данных.

Алгоритм восстановления

●по журналу в прямом направлении выполняются все операции;

●для транзакций, которые не закончились к моменту сбоя, выполняется откат.

SQLite

● до любой модификации БД SQLite сохраняет изменяемые страницы из БД в отдельном файле (журнале), то есть просто копирует их туда;

●убедившись, что копия страниц создана, SQLite начинает менять БД;

●убедившись, что все изменения в БД «дошли до диска» и БД стала целостной, SQLite стирает журнал.

MySQL

●бинарный лог (binary log)

●лог ошибок (error log)

●лог медленный запросов (slow query log)

●лог запросов (general query log)

●лог репликаций (relay log)

NoSQL базы данных

Нереляционные СУБД находят больше областей приложений, чем традиционные SQL-решения

NoSQL СУБД

NoSQL-СУБД не используют реляционную модель структуризации данных. NoSQL базы данных не используют общий формат запроса (как SQL в реляционных базах данных). Каждое решение использует собственную систему запросов.

NoSQL

Системы БД NoSQL используют для управления данными различные модели, включая хранилища пар «ключ-значение» в памяти, графовые модели данных, хранилища документов, колоночное хранилище.

Причины появления

• увеличение объемов хранимых данных

• взаимосвязанность данных

• использование слабоструктурированной информации

• Архитектура

Основные черты SQL

• Atomicity - атомарность

• Consistency - согласованность

• Isolation - изолированность

• Durability — надежность

Основные черты NoSQL

Basic Availability - базовая доступность.

Soft State - гибкое состояние.

Eventual Consistency - согласованность в конечном счёте.

Характеристики NoSQL баз данных

1. Не используется SQL ( ANSI SQL DML).

2. Неструктурированные данные. В NoSQL базах в отличие от реляционных структура данных не регламентирована.

3. Представление данных в виде агрегатов (aggregates).

4. Слабые ACID свойства. (Атомарность, Согласованность, Изолированность, Надёжность).

5. Распределенные системы, без совместно используемых ресурсов (share nothing).

Основные свойства распределенных NoSQL баз:

•Репликация — копирование данных на другие узлы при обновлении. Позволяет как добиться большей масштабируемости, так и повысить доступность и сохранность данных. Виды репликации:

Master-slave - предполагает хорошую масштабируемость на чтение (может происходить с любого узла), но немасштабируемую запись (только в мастер узел).

peer-to-peer - все узлы равны и могут обслуживать как запросы на чтение, так и на запись.

Шардинг — разделение данных по узлам: Шардинг часто использовался как дополнение к реляционным базам данных в целях увеличения скорости и пропускной способности.

Сравнение SQL и NoSQL

Проанализируем разницу между SQL- и NoSQL-подходами:

Структура и тип хранящихся данных: SQL/реляционные базы данных требуют наличия однозначно определённой структуры хранения данных, а NoSQL базы данных таких ограничений не ставят.

Запросы: вне зависимости от лицензии, РСУБД реализуют SQL-стандарты, поэтому из них можно получать данные при помощи языка SQL. Каждая NoSQL база данных реализует свой способ работы с данными.

Масштабируемость: решения NoSQL обычно предоставляют более простые способы горизонтального масштабирования.

Надёжность: когда речь заходит о надёжности, SQL базы данных однозначно впереди.

Поддержка: РСУБД имеют очень долгую историю. Они очень популярны, и поэтому получить поддержку, платную или нет, очень легко. Поэтому, при необходимости, решить проблемы с ними гораздо проще, чем с NoSQL, особенно если проблема сложна по своей природе.

Хранение и доступ к сложным структурам данных: по своей природе реляционные базы данных предполагают работу с сложными ситуациями, поэтому и здесь они превосходят NoSQL-решения.

Хранилище "ключ-значение"

Наиболее простой вариант хранилища данных, использующий ключ для доступа к значению в рамках большой хэш-таблицы. Такие СУБД применяются для хранения изображений, создания специализированных файловых систем, в качестве кэшей для объектов, а также в масштабируемых Big Data системах.

Документо-ориентированные базы данных

В котором данные, представленные парами ключ-значение, сжимаются в виде полуструктурированного документа из тегированных элементов. Такая модель хорошо подходит для каталогов, пользовательские профилей и систем управления контентом, где каждый документ уникален и изменяется со временем.

Колоночные базы данных

Которое хранит информацию в виде разреженной матрицы, строки и столбцы которой используются как ключи. В мире Big Data к колоночным хранилищам относятся базы типа «семейство столбцов» (Column Family).

Графовые базы данных

Представляют собой сетевую базу, которая использует узлы и рёбра для отображения и хранения данных. Поскольку рёбра графа являются хранимыми, его обход не требует дополнительных вычислений (как соединение в SQL). При этом для нахождения начальной вершины обхода необходимы индексы.

Методы хранения данных

Snapshot – слепок базы данных на текущий момент.

• Запись данных в лог – данные, которые попали в лог, не подлежат изменению.

• In-place updates – база данных имеет свою копию, которая обновляется при каких-либо изменениях в базе данных.

Достоинства NoSql баз данных

• Высокая масштабируемость

• Прототипирование

• Высокая доступность

• Кэширование

• Буферизация

• Очередь заданий

• Счетчики

• Полнотекстовый поиск

• Репликация

• Шаринг

Недостатки NoSQL баз данных

• Небольшой функционал

• Недостаточная гибкость

• Немалое потребление ресурсов

• Не всегда хорошо работают «из коробки»

• Необходимость специализированных знаний для работы с базой данных

Redis(REmote DIctionary Server, «удалённый серверный словарь»)

Сетевое журналируемое хранилище данных типа «ключ — значение» с открытым исходным кодом, размещаемое в памяти, обычно используемое для кэшей и подобных механизмов ускорения сетевых приложений.

От реляционных баз Redis отличается:

• более высокой производительностью

• отсутствием языка SQL

• гибкостью

• лучшей масштабируемостью.

! не обеспечивает 100%-ной целостности данных.!

Области применения

• Хранилище сессий и профилей пользователей;

• Сервер очередей;

• СУБД для небольших приложений;

• Роль «словаря» в шардинге;

• Хранилище промежуточных результатов вычислений при обработке больших объемов данных;

• брокер сообщений;

• для кэширования данных из основного хранилища, что значительно снижает нагрузку на реляционную базу данных;

• для хранения «быстрых» данных — когда важны скорость и критичны задержки передачи.

MongoDB

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

Главные особенности MongoDB:

• Она не требует описания схемы таблиц, как в реляционных БД.

• Между коллекциями нет сложных соединений типа JOIN.

• Данные хранятся в формате BSON (бинарные JSON-подобные документы).

• У коллекций не обязательно должна быть схожая структура.

• Сохранение данных в формате документов вместо формата реляционного типа, это делает MongoDB очень гибкой и адаптируемой к бизнестребованиям.

• Специальные запросы

• Индексация

• Репликация

• Балансировка нагрузки

• Возможность развернуть в облаке

• Доступность
ООП. Парадигмы программирования. Отличия одних парадигм от других. Принципы Active record.

Парадигмы программирования

Что такое парадигма вообще? Можно сказать, что это определенный взгляд на явления окружающего мира и представление о возможных действиях с ними. В программировании под парадигмой принято понимать обобщение о том, как должна быть организована работа программы.

Парадигмы программирования:

• директивное (структурное)

• объектно-ориентированное

• декларативное (функционально-логическое).

Свойства:

• Парадигма программирования не определяется однозначно языком программирования;

• Практически все современные языки программирования в той или иной мере допускают использование различных парадигм (мультипарадигмальное программирование).

• Существующие парадигмы зачастую пересекаются друг с другом в деталях.

Императивное программирование

• в исходном коде программы записываются инструкции (команды);

• инструкции должны выполняться последовательно;

• данные, получаемые при выполнении предыдущих инструкций, могут читаться из памяти последующими инструкциями;

• данные, полученные при выполнении инструкции, могут записываться в память;

• Императивная программа похожа на приказы;

• Широко используется присваивание;

Основные черты императивных языков:

использование именованных переменных;

• использование оператора присваивания;

• использование составных выражений;

• использование подпрограмм;

• и др.

Декларативное программирование

Основано на идее программирования приложений с использованием определений того, что должно быть сделано, а не того, как это должно быть сделано.

• Противоположность императивного программирования;

• Декларативное программирование пытается уберечь программиста от ошибок, которые обычно возникают при создании на императивных языках. Источник ошибок - переменные глобального характера, в которые записываются другие функции и методы.

• В декларативных переменные используются очень экономно.

• можно подойти двумя способами:

1. использование языка программирования специально для декларативного программирования.

2. использовать императивный язык с библиотекой для поддержки декларативного программирования.

Зачем использовать императивное программирование, если декларативное позволяет писать гораздо меньше кода?

Во-первых, декларативное программирование — это обёртка для императивного. Когда вы пишете запрос в SQL, его выполнение происходит по заранее описанным инструкциям. Поэтому нам нужно императивное программирование, чтобы заставить работать декларативное.

Во-вторых, декларативное программирование не подходит для задач, для решения которых важно иметь доступ к состоянию программы.

В-третьих, императивное программирование даёт больше свободы, поэтому его чаще используют в творческих областях, особенно там, где важен порядок выполняемых действий.

Процедурная

Процедурное программирование является частным случаем императивной парадигмы.

Процедурное и ООП

Ключевые моменты:

• Процедура — самостоятельный участок кода, который можно выполнить как одну инструкцию.

В современном программировании процедура может иметь несколько точек выхода (return в C-подобных языках), несколько точек входа (с помощью yield в Python или статических локальных переменных в C++), иметь аргументы, возвращать значение как результат своего выполнения, быть перегруженной по количеству или типу параметров и много чего еще.

Структурное программирование

Структурное программирование (методология разработки) является частным случаем императивного программирования.

Высокоуровневая трактовка предполагает разделение логики программы на несколько подпрограмм, каждая из которых будет иметь одну точку входа.

Ключевые моменты:

В структурном программировании мы по прежнему оперируем состоянием и инструкциями, однако вводится понятие составной инструкции (блока), инструкций ветвления и цикла.

Основные понятия:

— Блок

— Цикл

— Ветвление

Функциональное и логическое программирование

Функциональное программирование основано на математическом понятии функции, которая не изменяет свое окружение;

Функциональная программа состоит из совокупности определений функций;

Концепции функционального программирования:

Чистые функции: они детерминированные;

1. они всегда выдают одинаковые выходные данные для одних и тех же аргументов независимо от чего-либо еще.

2. нет побочных эффектов - они изменяют любой аргумент или глобальные переменные или что-то выводят.

Рекурсия: в функциональных языках нет цикла for или while. Итерация в функциональных языках осуществляется через рекурсию.

Ссылочная прозрачность: в функциональных программах переменные, однажды определенные, не меняют своего значения во всей программе.

Функции первого класса и могут быть высшего порядка.

Переменные неизменны: мы не можем изменять переменную после ее инициализации.

Логическая парадигма программирования предусматривает использование математической логики для разработки программ.

Логическое программирование является частным случаем декларативного программирования, поскольку программист задает только набор формул, а принятие решений об организации вычислений принимается компилятором.

Объектно-ориентированное программирование (ООП)

Особое внимание уделяется данным, которые представляются в программе в виде объектов.

ООП призвано решать более сложные и объемные задачи по сравнению с директивным программированием

Основные понятия:

Абстракция — выделение значимой информации и исключение из рассмотрения незначимой.

Наследование — позволяет создавать новые классы из существующих классов, расширяя и совершенствуя его возможности.

Полиморфизм — использование операций по-разному, в зависимости от экземпляров, над которыми они работают.

Инкапсуляция — это процесс связывания атрибутов и методов вместе в классе.
1   2   3


написать администратору сайта