движок базы данных что это
Движок базы данных
Database engine — англоязычный термин, соответствующий полуформальному русскоязычному определению «движок базы данных». Синоним: storage engine.
Движок может быть самостоятельным, оформленным в виде библиотеки, подключаемой к программам. Это позволяет программе использовать определённый формат файла базы данных. В более сложном случае, это позволяет нескольким программам работать с одним файлом БД, используя механизм блокировки, предоставляемый движком БД.
С другой стороны, движок БД является основным компонентом СУБД. В этом смысле СУБД — это программа, использующая движок БД для хранения данных в файлах и предоставляющая сетевой интерфейс, позволяющий клиентам СУБД работать по клиент-серверной модели. Обычно СУБД позволяют манипулировать данными и структурами БД с помощью языка
Некоторые СУБД позволяют одновременно использовать несколько движков (для разных БД). Например, InnoDB,
Наиболее известные движки баз данных
Полезное
Смотреть что такое «Движок базы данных» в других словарях:
Движок — Эта статья о компьютерном термине; другие значения: Двигатель. У этого термина существуют и другие значения, см. Лопата#Виды лопат. Движок (жаргонизм от англ. engine мотор, двигатель) выделенная часть программного кода для… … Википедия
Движок (программа) — Движок (жаргонизм от en. engine мотор, двигатель) выделенная часть программного кода для реализации конкретной прикладной задачи программа, часть программы, комплекс программ или библиотека, в зависимости от задачи и реализации. Как правило,… … Википедия
Движок (компьютерный сленг) — Это статья о компьютерном термине. См. также: Двигатель. Движок (жаргонизм от англ. engine мотор, двигатель) выделенная часть программного кода для реализации конкретной прикладной задачи программа, часть программы, комплекс программ или… … Википедия
Движок Doom — Doom engine Тип Игровой движок Разработчик id Software ОС изначально Лицензия изначально проприетарная, теперь GNU GPL Сайт … Википедия
Вики-движок — Вики движок набор программ, служащий для преобразования вики разметки в удобочитаемое представление на языке HTML. Содержание 1 DidiWiki 2 DokuWiki 3 dominoWiki 4 FlexWiki … Википедия
Database engine — Для термина «Движок» см. другие значения. В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете … Википедия
Storage engine — Database engine англоязычный термин, соответствующий полуформальному русскоязычному определению «движок базы данных». Синоним: storage engine. Движок может быть самостоятельным, оформленным в виде библиотеки, подключаемой к программам. Это… … Википедия
Oracle Database — У этого термина существуют и другие значения, см. Oracle (значения). Oracle Database Тип … Википедия
Oracle (СУБД) — У этого термина существуют и другие значения, см. Oracle. Oracle Database Тип Объектно реляционн … Википедия
FileStream — FileStream это Хранилище данных, позволяющее связать MS SQL Server и файловую систему. Позволяет хранить данные на NTFS диске и управлять ими, используя движок базы данных. К данным предоставляется потоковый доступ. FileStream впервые… … Википедия
Движки баз данных.
Всем привет! Наверняка, вы, создавая таблицы в базе данных, видели такие надписи, как MyISAM или InnoDB. Возможно, вы даже знаете, что это такое, но вот когда что выбирать? Об этом мы сегодня и поговорим.
InnoDB
Это многофункциональный движок, который поддерживает большинство функций: транзакции, все ограничения, внешние ключи, связи таблиц и другое, но НЕ поддерживает полнотекстовый индекс. Данный движок в основном направлен на выборку данных, а не на вставку, следовательно, используйте его там, где вам чаще всего нужно будет быстро что-то выбрать, а не вставить. Или там, где вам нужен какой-то функционал, который не поддерживают другие движки.
MyISAM
Движок MyISAM направлен на быстрое добавление или изменение данных, однако, он не оптимизирован на выборку, так что используйте его там, где вам нужно быстро вставлять, изменять, удалять данные, но не выборка. Также, данный движок не поддерживает внешний ключ и транзакции, но поддерживает блокировки и полнотекстовый индекс.
Archive
Из названия понятно, для чего нужен этот движок. Он хранит данные в виде ZIP архива. Размер таблицы, работающей на данном движке, будет очень мал. Однако, из этого следует, что изменение данных будет ОЧЕНЬ медленным. Выборка же данных примерно как у движка MyISAM. У этого движка нет ограничения Primary Key, транзакций и прочего. Основное предназначение данного движка для данных, которые никогда или очень редко меняются. Например, справочники.
Данные в данном движке хранятся в таком виде:
Т.е. каждая новая запись с новой строки, а столбцы разделяются запятой.
В основном данный движок предназначен для совместимости со старыми mainframe записями.
Внешнего ключа нет, транзакций нет, полнотекстового индекса нет, primary key, unique key есть.
Скорость выборки примерно как у MyISAM. Врядли вам когда-нибудь придется его использовать.
Используется для совместимости с сервером BerkeleyDB. Тоже врядли он вам понадобится.
Memory
Данный движок хранит все данные в оперативной памяти сервера. На диске он ничего не хранит.
Данный движок очень быстр как на запись, изменение, удаление данных, так и на их выборку. Однако, вы должны понимать, что данные очень легко потерять.
Рекомендуется для хранения временных таблиц.
Federated
Данный движок используется для создания кластерных решений. Это когда несколько серверов подключаются к одному серверу, на котором хранится база данных с этим движком, и каждый из этих серверов считает эту базу данных своей.
Скорость будет просто огромная, но вы должны понимать, что обычным сайтам это не нужно и используется только на очень высоконагруженных проектах. Плюс ко всему, данный движок является платным.
Blackhole
Очень интересный движок. Его название переводится как «черная дыра». И это не просто так. Если вы попробуете создать таблицу на этом движке, а потом что-то выбрать из нее, то увидите Empty set. Все, что записывается в таблицу на движке Blackhole, сразу уничтожается.
Данный движок используется для отладки.
Заключение
Итак, надеюсь, что теперь для вас такое словосочетание, как «движки баз данных» не будет просто пустым звуком. Конечно, мы разобрали здесь не все движки, которые существуют у баз данных, но самые распространенные я описал. Выбирайте тот, который лучше подходит под ваши задачи. Спасибо за внимание и удачного проектирования баз данных! 🙂
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 2 ):
Михаил, доброго времени суток. В своих курсах Вы рекомендуете использовать MyISAM. Подскажите, пожалуйста, для реализации соцсети имеет ли смысл создать базу на InnoDB с использованием внешних связей. Какие могут быть нюансы использования InnoDB кроме описанных в Вашей статье?
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
Жизнь после MySQL: выбираем замену для популярной СУБД
Содержание статьи
Что будет теперь, когда ненавистная и даже глубоко противная истинным сторонникам открытого софта компания Oracle купила многострадальную Sun, а заодно и наш с тобой любимый MySQL? Конец легендарного продукта? Может быть. Но уже сейчас есть куда более функциональные и полностью совместимые разработки!
MySQL, он же просто «мускул». Бьюсь об заклад, что это единственная СУБД, которая по умолчанию доступна на твоем хостинге. Любимые движки для форума и блога работают на ней. Это фактически стандарт де-факто для любого веб-продукта. Да и в своих проектах ты, вероятнее всего, используешь именно ее. В Сети миллионы сайтов осуществляют запросы и сохраняют данные в БД с помощью MySQL. И все было просто и понятно до тех пор, пока компанию Sun вместе с ее любимым мускулом неожиданно не купила корпорация Oracle. Учитывая, что основным продуктом последней является мощнейшая СУБД с одноименным названием, сообщество сильно тревожилось о дальнейшей судьбе MySQL. И не напрасно. Компания Oracle, конечно же, выступила с заявлением, что все в порядке: проект по-прежнему будет развиваться. Но многим верится в это с трудом. Ведь даже быстрый выпуск версии 5.5, которую многие так ждали, не дал положительных результатов: старые баги как были, так и остались. Разве ж это дело? Но параллельно с оригинальным MySQL уже давно развиваются альтернативные проекты, которые совместимы с оригинальной СУБД, но во многом даже превосходят ее. И об этом мы сейчас и поговорим.
Движок БД — что это такое?
Если немного упростить понятия, то база данных — это обертка вокруг движка хранения данных. Она занимается приемом запросов и управлением ими, кэшированием и прочими обслуживающими функциями, обеспечивая работу с низкоуровневым API движка. Последний, в свою очередь, собственно и хранит данные (на диске или в памяти), работает с операционной системой и обеспечивает выдачу нужных выборок по запросу от сервера. Если раньше СУБД (связка «сервер + движок») была монолитная, то теперь во всех системах используется структура с плагинами. Движок в такой организации является просто модулем, а сам сервер не зависит от системы хранения данных. В последних редакциях классического MySQL также используется плагинная архитектура. Поэтому встроенный движок InnoDB (правда, обычно устаревшей версии) можно легко заменить на модуль другого проекта, который часто будет лучше. В альтернативных мускулу разработках, в том числе MariaDB или Drizzle, все движки изначально выполнены как плагины. Попробую кратко пробежаться по современным движкам хранения данных в MySQL-совместимых СУБД.
Важная вещь — совместимость
Итак, мы взялись за непростую задачу — найти замену для MySQL. Но если менять, то на что? Только не беги с криками «Да отстой ваш мускул — бери слона, то есть PostgreSQL». Не выйдет! Сейчас столько кода написано с поддержкой MySQL, что переписать или искать замену — себе дороже. Причем в прямом смысле — часто уложиться в рамки разумных финансовых затрат просто невозможно. Хорошо, если речь идет о простецком форуме или блоге (обычно в них реализована поддержка сразу нескольких систем). Но что если это что-то самописное или заточенное под возможности именно MySQL? Тут все ох как непросто. Так что наша задача — сохранить мускулы (то есть полную совместимость с MySQL), но прокачать их так, чтобы не зависеть от старшего тренера и его стероидов.
Разработчики и идеологи самого MySQL далеко не дураки и сами предвидели ситуацию, что после поглощения сложно будет всем. Некоторые из них решили даже покинуть компанию и основать свои проекты, прихватив тогда еще свободные коды мускула. Благодаря этому сейчас есть несколько интересных продуктов, основанных на коде оригинального сервера, но с большими доработками и изменениями во всем, куда только удалось дотянуться разработчикам. Первым делом энтузиасты освободились от бремени движка InnoDB, правами на который уже давно обладает все тот же самый Oracle. На замену ему выкатили несколько движков, которые стали доступными в MariaDB.

Архитектура MySQL — теперь уже как пособие по устройству некогда великой СУБД
MariaDB
История этого сервера уходит в далекий 2008 год, когда один из главных разработчиков MySQL, осознавая, что сильно связан поставленными работодателем рамками, уволился и основал свою компанию, которая занялась исправлением родовых травм MySQL. Я говорю о дефолтном движке MyISAM, который необходимо было менять, и критических багах, на исправление которых уходило неприемлемое количество времени. Что получилось у создателей MariaDB? Замечательный продукт, который на уровне протокола, формата файлов и языка SQL идентичен с оригинальной версией MySQL. Это предоставляет возможность безболезненного перехода: без потери данных или изменения логики работы имеющегося кода.
«Но какие бонусы я получу от перехода?», — спросишь ты. Взамен мы получаем большую скорость работы и новые фичи, которых, возможно, вообще никогда не будет в мускуле. Например, интегрированный в сам сервер поисковый движок Sphinx, который не придется ставить отдельно, расширенные возможности по бэкапу и управлению данными и так далее.
Надо сказать, что многие очень крупные компании (в том числе такие звери, как Google и Facebook) давно используют MariaDB. По сети гуляет специальный набор патчей, которые после наложения на исходные коды оригинального мускула решают многие проблемы. Однако не жди их появления в официальном сервере — если за столько лет не сподобились, то вряд ли в следующей версии решатся. Разработчики MariaDB же пока свободны от корпоративных правил и маркетинговых ограничений, поэтому новые патчи и исправления багов принимаются достаточно быстро.
Если оригинальный мускул держится на двух китах — движках хранения данных InnoDB и MyISAM, то MariaDB использует свои собственные, выступающие продвинутыми заменителями. Движок Aria пришел на замену MyISAM и на деле куда более производителен благодаря построчному кэшированию и оптимизированному формату упаковки данных. Если оригинальный MyISAM был быстр за счет отказа от транзакций, что означало возможную потерю данных, то Aria одновременно и производителен, и безопасен. За счет улучшенных форматов для хранения информации MariaDB существенно быстрее восстанавливается после сбоев, не требуя отдельных процедур проверки данных после краха. Принадлежащий Oracle движок InnoDB заменен на XtraDB, разработку другой компании в области БД Percona. Последняя известна своими сборками MySQL с интегрированными патчами от Гугла и Фейсбука, а также расширенными инструментами администрирования. Команда имеет необычную историю (подробнее ты можешь прочитать во врезке) и сейчас активно занимается созданием нового мускула. Для обратной совместимости с MySQL движок XtraDB в MariaDB даже называется точно так же, то есть InnoDB. Но надо понимать, что на самом деле сохранилось только название, дабы не смущать софт непривычными идентификаторами.
Дополнительные движки
Если тебе и этого не хватает, и ты киваешь головой в сторону Firebird или PosgreSQL, намекая, что там есть и полная поддержка транзакционной модели и даже MVCC (Multiversion Concurrency Control — конкурентная модель данных на базе версионности, что позволяет без блокировок производить обновление и чтение одной и той же строки данных) — расслабься. В MariaDB доступен движок PBXT, который в некоторых ситуациях еще более крут, чем все вышеперечисленные. Правда, тут сразу стоит сказать, что он не такой универсальный и его нужно уметь готовить! PBXT в основном заточен под большое количество транзакций, которые пишут или изменяют данные, поддерживает быстрый откат и умеет сам разрешать сложные ситуации с блокировками и дедлоками. Например, если хочешь сделать хранилище логов, то у тебя будет огромное количество операций записи в таблицу, но сравнительно мало чтения. В то же время, если кто-то все-таки захочет сделать выборку из БД, он получит максимально свежие данные, не мешая при этом записи новых. И для совсем уж извращенцев есть движок FederatedX, умеющий распределять таблицу данных на несколько физических серверов, а также OQGRAPH, оптимизированный для хранения иерархических структур, графов и деревьев. Подход, идеально подходящий для создания клона Facebook и ВКонтакте, где требуется работать с социальным графом отношений между людьми, что плоховато вписывается в типичную модель баз данных.
Cloud Computing
Разработчики другого проекта — Drizzle — пошли по немного другому пути и решили вообще переосмыслить место базы данных в инфраструктуре типичного проекта. Вспомнили, что сейчас модно: cloud computing, Google Proto Buffers, масштабируемость, многоядерность и прочее. И подумали: база данных также должна двигаться вместе с современными технологиями, а не плестись в конце, вне зависимости от того, что на ней крутится — блоговый движок или крупная корпоративная CRM-система. Под шумок было решено упростить функционал оригинальной MySQL, выкинув тянущиеся из релиза в релиз возможности, которые в действительности мало кому нужны. Система утратила поддержку UNIX-сокетов (это хотя и спорное, но вполне допустимое решение ввиду направленности на облачные среды) и версию для Windows. В Drizzle нет никаких служебных баз и многих других привычных вещей. Но что же тогда есть?

Drizzle благодаря простой микроядерной и плагинной архитектуре умеет многое
А есть архитектура с микроядром, в которое вынесены все основные операции и поддержка протоколов, а также система плагинов, позволяющая расширить систему в любую сторону и на любую глубину. В качестве одной из основных системных компонент используется бинарный протокол от Google — Protocol Buffer. С его помощью описываются как таблицы, так и данные, он же применяется и для репликации. Основной упор в разработке сделан на максимальную поддержку многопоточности и многопроцессорности, так что масштабируемость — это основное достижение разработчиков. Реализована поддержка как стандартного MySQL-протокола, так и собственного варианта — через библиотеку libdrizzle и драйвера для большинства популярных языков, включая Perl, PHP, Python и Lua. При желании можно использовать клиентскую библиотеку и без самого сервера: в этом случае ты получишь эффективный асинхронный доступ к любимому MySQL. Поскольку эта же компания разработала и систему Gearman, то в Drizzle есть встроенная поддержка логирования в распределенной среде, нативное кэширование в memcache и даже такие продвинутые возможности, как репликация через системы сообщений типа RabbitMQ (используется в том числе новомодная технология WebSocket). В качестве основного движка хранения данных в Drizzle используется особая версия InnoDB, значительно переработанная и дополненная набором сторонних патчей. Также доступны движки XtraDB и PBXT. Если первые версии Drizzle основывались на MySQL 5.0, то теперь от оригинальной СУБД осталось немногое. Это почти полностью переписанный код с минимальной оглядкой на бывших родственников. На данный момент разработка Drizzle пребывает в активном состоянии, и к весне планируется первый стабильный релиз.
NoSQL-тренд
Ты наверняка знаешь о новомодном тренде NoSQL. По сути, это отказ от традиционного сервера базы данных с его таблицами и SQL-запросами и уход к самой простой схеме хранения данных «ключ-значение» (key-value). Для реализации последнего часто используются продвинутые типы данных вроде списков/хэшей (в Redis) или, например, формата JSON (в MongoDB). Но что мешает скрестить удава и ежа, используя, с одной стороны, всю мощь и годами отработанную технологию баз данных и их движков, а с другой — упрощенный протокол и отказ от громоздкой прослойки в виде обработки SQL-языка запросов? Суровым наследникам самураев не помешало ничего: японские парни из Yoshinori Matsunobu сделали плагин HandlerSocket, превращающий стандартный движок InnoDB в продвинутое NoSQL-хранилище, не мешая при этом работе обычного SQL. Скорость работы впечатляет: до 750 000 операций в секунду! Неудивительно, что компания Percona сразу же взяла на вооружение этот плагин, включив его в свои сборки сервера. Круто! Но, с другой стороны, как еще если не костылем можно назвать решение, которое имитирует то, что у нормальной БД типа Drizzle реализовано прямо из коробки в силу внутренней архитектуры?
Делаем выводы
Если ты обеспокоен развитием MySQL, тебе не нравится политика Oracle и ты справедливо опасаешься, что завтра тебя обяжут платить за функционал, который еще вчера был бесплатен, посмотри вокруг. Сообщество отреагировало на покупку MySQL как на начало заката технологии, некогда выведшей современный веб на недостижимую высоту благодаря стеку LAMP (Linux-Apache-MySQL-PHP). Ключевые разработчики начали развитие собственных форков, некоторые из которых уже сейчас на голову превосходят старый MySQL. За ними стоят многие знаковые фигуры и открытое сообщество. Сделав все по уму, разработчики умудрились оставить 100% внешней совместимости с приложениями и протоколами. Поэтому все желающие поставить новый сервер не окажутся у разбитого корыта: данные сохранятся, а приложения не придется переписывать. Многие вообще не заметят разницы, кроме возросшей скорости работы и надежности.
Уже сейчас ты можешь заменить свой сервер баз данных, так что имеющиеся приложения даже не почувствуют разницы, получив при этом гораздо большую скорость работы, надежность и массу недоступных в оригинальном мускуле фишек. MariaDB с набором движков — отличный вариант для старта. Ну а если ты задумал грандиозный проект с большим количеством серверов и гигабайтами данных, посмотри на Drizzle. Как программный продукт и как сервер баз данных он является очень перспективной разработкой, которая обязательно выстрелит уже в этом году. Если же хочется стабильности и поддержки самыми лучшими специалистами по базам данных — не бойся отвернуться от Oracle и пойти к Perconа. Ребята раздают бесплатно свою версию СУБД — исправляя, насколько это возможно, баги и добавляя фичи для увеличения производительности оригинального MySQL, не нарушая при этом совместимости. Ты все еще сидишь на стареньком мускуле? Тогда мы идем к тебе!
MySQL движки хранения данных
Вольный перевод: MySQL Storage Engines
Автор: Mike Peters
Одна из великолепных возможностей MySQL, отличная от бесплатности, широкой поддержки и быстроты, заключается в выборе различных движков хранения данных (storage engines) для различных таблиц.
Что-же такого великолепного в обладании всеми этими вариантами?
Каждый движок хранения данных полностью различен и спроектирован для конкретных нужд приложений.
Не зацикливаясь на одном движке (как Oracle), Вы тем самым можете оптимизировать и выбирать лучший инструмент для своей работы.
Совет: Хорошо спроектированное приложение, активно использующее MySQL, должно использовать различные движки хранения данных для различных таблиц. Если Вы все еще завязли на MyISAM таблицах, может теперь стоит, что-то пересмотреть.
Обзор движков хранения данных MySQL
MyISAM: Движок по умолчанию. Не поддерживает транзакций, средняя надежность хранения данных. Превосходная производительность чтения данных для интенсивных приложений. Большинство веб сервисов и хранилищ данных активно используют MyISAM.
HEAP: Все в памяти. Очень быстрый поиск данных, однако все они хранятся только в памяти и будут потеряны при остановке сервера. Великолепно подходит для временных таблиц.
Archive: Используется для хранения больших объемов данных без индексов, занимая меньший размер.
Merge: Коллекция MyISAM таблиц логически объединенных вместе для единого представления.
InnoDB: Транзакционный тип движка, применяемый при интенсивных операциях записи, спасибо возможности блокировки уровня строк таблицы. Великолепная восстанавливаемость и высокая надежность хранения данных. Движок InnoDB был приобретен Oracle в 2005 году.
Что-бы лучше понять уникальные характеристики каждого движка хранения данных, посмотрите на эту «магическую» диаграмму:
Примеры:
Ниже приведены несколько примеров использования наиболее подходящих движков хранения для различных задач:
Важные замечания по MyISAM таблицам:
Важные замечания по HEAP/Memory таблицам:
Пока этот тип таблиц предлагает супер быстрый возврат данных, который работает только для небольших временных таблиц.
Если Вы загружаете слишком большие объемы данных в Memory таблицы, MySQL начинает свопировать информацию на диск и тем самым Вы теряете все преимущества Memory движка.
Важные замечания по InnoDB таблицам:
Расширяемость
Для активно-читающей (read-heavy) среды, используйте NDB кластер или установите репликации для n MyISAM ведомых read-only машин.
Для активно-пишущей (write-heavy) среды, InnoDB с активно/пассивными репликациями будет лучшим типовым решением. Но Вы можете поэкспериментировать с NDB кластером. NDB кластер обычно медленнее чем InnoDB в операциях с активной записью, но он предлагает наивысший уровень доступности.


