Система управления базами данных
Материал из Documentation.
Система управления базами данных (СУБД) — комплекс программ, позволяющих создать базу данных (БД) и манипулировать данными (вставлять, обновлять, удалять и выбирать). Обеспечивает безопасность, надёжность хранения и целостность данных, а также предоставляет средства для администрирования БД. СУБД с помощью компилятора языка запросов обрабатывает обращения к БД от пользователей, проверяет корректность поступающих операторов и на основе метаданных (сведения о составе данных) формирует одно или неск. процедурных представлений оператора (планов выполнения). Наиболее эффективный план исполняется в СУБД при помощи внутр. подсистемы (ядра СУБД), поддерживающей интерфейс доступа к данным на уровне их отд. элементов (записей). Ядро СУБД обеспечивает буферизацию данных — кэширование, синхронизацию доступа к данным и управление транзакциями (короткий во времени цикл взаимодействия объектов, включающий запрос — выполнение задания — ответ), а также журнализацию изменений БД (сохранение истории). Каждая СУБД основывается на некоторой модели данных (напр., реляционной). В большинстве совр. СУБД внешний интерфейс обычно основывается на использовании спец. языка (напр., SQL, Structured Query Language — стандартный язык запросов, язык определения структур и манипулирования данными), в котором отражаются осн. черты модели данных.[1]
Содержание |
[править] Виды
СУБД классифицируют: на сетевые, иерархические, реляционные (и SQL-ориентированные), объектно ориентированные, XML-ориентированные (англ. eXtensible Markup Language — расширяемый язык разметки) и др., то есть по модели данных; универсальные и специализир., которые ориентированы на эффективную поддержку одного класса информац. систем (напр., транзакц. или аналитич.); файл-серверные (БД хранятся в файлах специализир. файлового сервера), клиент-серверные (все осн. компоненты СУБД выполняются на отд. сервере, на котором хранится и БД, а на клиентской части выполняется код приложения), встраиваемые (СУБД тесно связана с прикладной программой и полностью выполняется на том же компьютере, не требуя проф. администрирования); однопроцессорные (не используют аппаратные возможности параллелизма, были распространены до появления многоядерных процессоров), параллельные с общей памятью (обеспечивают межзапросный или внутризапросный параллелизм с использованием нескольких ядер), параллельные с общими дисками (неск. экземпляров СУБД работают в разных узлах вычислит. кластера, но обращаются к общей дисковой подсистеме, в которой хранится БД) и параллельные без использования общих ресурсов СУБД (неск. СУБД работают в разных узлах кластера, каждый со своим разделом БД, что обеспечивает горизонтальное масштабирование при росте объёма данных).[2]
[править] История
Первые СУБД (нач. 1960-х гг.) были основаны на иерархич., сетевой и др. ранних моделях данных. В нач. 1970-х гг. Э. Кодд (США) предложил новый — реляционный — подход к организации БД и СУБД, на основе которого в 1970-е гг. выполнены эксперим. проекты System R (IBM) и Ingres (Калифорнийский ун-т в Беркли) и заложены основы будущих технологий (язык SQL, принципы оптимизации запросов, методы управления транзакциями и др.). В 1980-е гг. разработаны объектно ориентированные, объектно реляционные и первые коммерч. реляционные СУБД.[3]
В 1990-х годах появился ряд развитых универсальных SQL-ориентированных СУБД с объектно реляционными возможностями (Informix Universal Server, Oracle8, DB2, Universal Database). Принят стандарт SQL:1999, в котором эти возможности, а также все осн. средства SQL-ориентированных СУБД были окончательно согласованы и утверждены. Одновременно развивались объектно ориентированные СУБД.[4]
В начале XXI века М. Стонбрейкер (США) обосновал конец эпохи универсальных СУБД и переход к специализир., ориентированным на поддержку отд. классов информационных систем — XML-ориентированные (напр., Tamino, Sedna), потоковые (Streambase), аналитические (Vertica, Greenplum), транзакц. СУБД (VoltDB). Из-за взрывообразного роста данных (BigData) стала актуальной возможность горизонтального масштабирования; в результате практически все совр. СУБД являются массивно-параллельными. Проблема BigData привела к появлению ряда систем категории NoSQL, разработчики которых опираются на опыт в области распределённых систем (совокупность логически взаимосвязанных баз данных, распределённых по узлам компьютерной сети) и не следуют канонам традиционных СУБД. В СССР и России разрабатывали СУБД ИНЕС и НИКА (1980-е гг., Ин-т системного анализа РАН), ЛИНТЕР (компания РЕЛЭКС, Воронеж, с кон. 1980-х гг.), Sedna (2000-е гг., Ин-т системного программирования РАН).[5]
[править] Типы
[править] Oracle
Система Oracle популярна у разработчиков, проста в использовании, у нее понятная документация, поддержка длинных наименований, JSON, улучшенный тег списка и Oracle Cloud.[6]
Разработчик: Oracle Corporation. Написана на Assembly, C, C++.[7]
Особенности:[8]
- Обрабатывает большие данные.
- Поддерживает SQL, к нему можно получить доступ из реляционных БД Oracle.
- Oracle NoSQL Database с Java/C API для чтения и записи данных.
[править] MySQL
MySQL работает на Linux, Windows, OSX, FreeBSD и Solaris.[9]
Лицензия GPL с открытым исходным кодом позволяет модифицировать ПО MySQL.[10]
Эта система управления базами данных использует стандартную форму SQL. Утилиты для проектирования таблиц имеют интуитивно понятный интерфейс. MySQL поддерживает до 50 миллионов строк в таблице. Предельный размер файла для таблицы по умолчанию 4 ГБ, но его можно увеличить. Поддерживает секционирование и репликацию, а также Xpath и хранимые процедуры, триггеры и представления.[11]
СУБД MySQL есть практически на любом хостинге. Простая в установке, работает нормально без особых настроек. В любом языке программирования, фреймворке, CMS, CMF и так далее — есть интеграция с MySQL.[12]
Разработчик: Oracle Corporation. Написана на C, C++.[13]
Особенности:[14]
- Масштабируемость;
- Лёгкость использования;
- Поддержка Novell Cluster;
- Поддержка многих операционных систем.
Минусы MySQL:[15]
- Посредственная производительность;
- Изменение структуры данных может быть довольно трудоёмким процессом, особенно при большом количество связей между данными в разных таблицах и даже при простом добавлении полей;
- Чувствительность к нестабильности сервера. Особенно это влияет при использовании XtraDB от Percona. Если неправильно завершить MySQL, можно настолько поломать таблицы и базы данных, что восстановить можно будет только из полного бекапа.
[править] Microsoft SQL Server
Microsoft SQL Server — самая популярная коммерческая СУБД. Она привязана к Windows. Зависит от платформы. И графический интерфейс, и программное обеспечение основаны на командах. Поддерживает SQL, непроцедурные, нечувствительные к регистру и общие языки баз данных.[16]
Разработчик: Microsoft Corporation. Написана на C, C++.[17]
Особенности:[18]
- Высокая производительность;
- Зависимость от платформы;
- Возможность установить разные версии на одном компьютере;
- Генерация скриптов для перемещения данных.
[править] PostgreSQL
PostgreSQL — масштабируемая объектно-реляционная база данных, работающая на Linux, Windows, OSX и некоторых других системах. В PostgreSQL 10 есть такие функции, как логическая репликация, декларативное разбиение таблиц, улучшенные параллельные запросы, более безопасная аутентификация по паролю на основе SCRAM-SHA-256.[19]
PostgreSQL — очень старая СУБД. По мнение многих, очень стабильная СУБД, её практически невозможно уронить, порушить таблицы как в MySQL.[20]
Разработчик: PostgreSQL Global Development Group.Написана на C. Используется в компаниях: Apple, Cisco, Fujitsu.[21]
Особенности:[22]
- Поддержка табличных пространств, а также хранимых процедур, объединений, представлений и триггеров;
- Восстановление на момент времени (PITR);
- Асинхронная репликация.
[править] MongoDB
MongoDB — самая популярная NoSQL СУБД. Лучше всего подходит для динамических запросов и определения индексов. Гибкая структура, которую можно модифицировать и расширять. Поддерживает Linux, OSX и Windows, но размер БД ограничен 2,5 ГБ в 32-битных системах. Использует платформы хранения MMAPv1 и WiredTiger.[23]
Разработчик: MongoDB Inc. в 2007 году. Написана на C++.[24]
Особенности:[25]
- Высокая производительность;
- Автоматическая фрагментация;
- Работа на нескольких серверах;
- Поддержка репликации Master-Slave;
- Данные хранятся в форме документов JSON;
- Возможность индексировать все поля в документе;
- Поддержка поиска по регулярным выражениям.
[править] DB2
Работает на Linux, UNIX, Windows и мейнфреймах. Идеально подходит для хост-сред IBM.[26]
Разработчик: IBM. Написана на C, C++, Assembly.[27]
[править] Microsoft Access
Microsoft Access — система управления базами данных от Microsoft, которая сочетает в себе реляционное ядро БД Microsoft Jet с графическим интерфейсом пользователя и инструментами разработки ПО.[28]
Производительность не рассчитана на большие проекты. В MS Access можно использовать C, C#, C++, Java, VBA и Visual Rudimental.NET. Access хранит все таблицы БД, запросы, формы, отчёты, макросы и модули в базе данных Access Jet в виде одного файла.[29]
Разработчик: Microsoft Corporation.[30]
Особенности:[31]
- Можно использовать VBA для создания многофункциональных решений с расширенными возможностями управления данными и пользовательским контролем;
- Импорт и экспорт в форматы Excel, Outlook, ASCII, dBase, Paradox, FoxPro, SQL Server и Oracle;
- Формат базы данных Jet.
[править] Redis
Redis — СУБД с открытым исходным кодом, которая снабжена механизмами журналирования и снимков. Поддерживаются списки, строки, хэши, наборы. Используется для БД, брокеров сообщений и кэшей. Все операции в Redis атомарные. Система написана на языке C и поддерживается практически всеми языками программирования.[32]
Разработчик: Salvatore Sanfilippo.[33]
Чаще всего СУБД Redis используют в качестве кеширующего слоя для работы с данными из другой, более медленной СУБД. Редко, но всё же может использоваться в качестве самостоятельно БД для данных. При этом Redis умеет работать с разными типами данных, в том числе списками, очередями. Работает в памяти, очень быстрая, умеет сохранять данные на диске, причём с поддержкой дозаписи (гораздо меньше нагружает диск) и загружать при запуске.[34]
Особенности:[35]
- Автоматическая обработка отказа;
- Транзакции;
- Сценарии LUA;
- Вытеснение LRU-ключей;
- Поддержка Publish/Subscribe.
[править] Apache Cassandra
Apache Cassandra спроектирована и работает как распределенная NoSQL СУБД для больших данных. Данные хранит в виде семейства столбцов.[36]
СУБД активно используется в банковском деле, финансах, а также в Facebook и Twitter. Поддерживает Windows, Linux и OSX. Для запросов к БД Cassandra используется SQL-подобный язык — Cassandra Query Language (CQL).[37]
Разработчик: Apache Software Foundation. Написана на Java.[38]
Особенности:[39]
- Линейная масштабируемость;
- Быстрое время отклика;
- Поддержка MapReduce и Apache Hadoop;
- Максимальная гибкость;
- P2P архитектура.