Содержание статьи

В отличие от клиент-серверных СУБД, Embedded (наиболее адекватный, хотя и не вполне точный русский перевод – «встраиваемые») СУБД не представляют собой независимый процесс, с которым взаимодействует программа, а являются составляющей программы и полностью либо частично интегрируются в нее.

Перечень задач, решаемых клиент-серверными СУБД, хорошо известен. В принципе, Embedded databases используются для совершенно иного класса задач. Как правило, это однопользовательские настольные приложения, которые могут быть востребованы в самых различных сферах. И если оценка характеристик клиент-серверных СУБД достаточно хорошо формализована, со встраиваемыми БД дело обстоит несколько сложнее. Существует несколько Benchmark’ов, позволяющих оценить скорость работы базы в различных режимах, но единого стандарта (подобного TPC) для распределенных БД нет.

Оценивать качество Embedded databases можно по разным признакам. Инструментарий базы данных должен быть компактным, высокопроизводительным и не требующим больших затрат на сопровождение. Только в этом случае он будет решать возлагаемые на него задачи. Помимо этого, при выборе СУБД для собственных нужд необходимо учитывать то, какие средства разработки поддерживает оцениваемый продукт. Существует ряд БД, работающих, скажем, только с Delphi или имеющих SDK для C++. Одним из немаловажных критериев является так называемый footprint – объем потребляемого дискового пространства или памяти, требуемой СУБД для работы. И, конечно же, важны скорость исполнения запросов различного рода,
возможности языка манипуляции данными, поддерживаемого БД, настраиваемость и управляемость самой базой.

На сегодняшний день разработчики прикладного программного обеспечения имеют достаточно широкий простор для выбора БД. Но несмотря на то что существуют такие мощные продукты как Oracle, MS SQL, Interbase, регулярно появляются и новые СУБД. Конкуренцию «грандам» в корпоративном секторе составить весьма сложно. Но всегда ли разумно использовать «тяжелые» и дорогие решения? Естественно, что для создания настольных приложений это не разумно, особенно, если бюджет проекта ограничен. С другой стороны, более простые СУБД не всегда располагают тем набором функций, который необходим в каждом конкретном случае. Зачастую встраиваемые СУБД ориентируются либо на решение узкого спектра специфических
задач, либо создаются специально для использования в конкретном конечном продукте или работы с одним средством разработки.

Многие Embedded СУБД также являются платными, хотя и стоят значительно дешевле, чем серверные платформы. Ключевым фактором в ценообразовании могут стать не только качественные характеристики продвигаемого продукта, но и дополнительные возможности, предоставляемые конечному пользователю. Например, графическая среда моделирования структуры данных, визуальные конструкторы запросов и т.д. Вообще, грамотное проектирование БД и ее администрирование считается достаточно трудоемкой и высокооплачиваемой работой, требующей высокой квалификации. Естественно, создатели прикладных приложений стремятся удешевить разработку. В том числе и за счет использования дополнительных возможностей СУБД.

В своем обзоре я решил рассмотреть те Embedded DB, которые поддерживают .Net. Причин тому несколько. Во-первых, данная технология стремительно набирает популярность и предоставляет действительно удобные механизмы работы с базами данных. Во-вторых, .Net-разработчики не привязаны к языку программирования (по меньшей мере, теоретически). Некоторые из попавших в обзор СУБД я использовал ранее, некоторые просто нашел в Google.

Естественно, что каждая из попавших в обзор СУБД имеет как сильные, так и слабые стороны. Для того чтобы дать хоть сколько-нибудь объективную оценку, я решил сделать небольшой тестовый пример и реализовать его с использованием каждой из СУБД. Тест я реализовал на C# в Visual Studio 2005. В качестве базового примера я взял пример из комплекта поставки VistDB, слегка модифицировав его. Возможно, такой тест и не совсем объективен, но, на мой взгляд, он позволяет сравнить основные характеристики рассматриваемых СУБД.

Лично для меня представляло интерес прежде всего то, насколько СУБД теряет производительность при работе с большими объемами данных. Поэтому число записей, с которыми будет работать база в ходе тестирования, может устанавливаться произвольно. При этом выполняются основные операции: вставка, выбор и удаление записей. Записи генерируются псевдослучайным образом, в соответствии с правилами, описанными в стандарте TPCC (код был взят из примера все той же VistaDB).

Тест я осуществлял на ноутбуке SAMSUNG R40 (NP-R40K00E) (intel Celeron M440 1.86GHz; DDR2 1024MB (512Mbx2); HDD 100Gb 5400).

 

SQLite

Сайт: http://sqlite.org

Только одна из попавших в обзор СУБД - с открытым исходным кодом. Собственно, SQLite не является полностью ориентированной на .Net.

Предвосхищая реакцию сторонников OpenSource -продуктов, замечу, что, на мой взгляд, открытый исходный код имеет как явные преимущества, так и явные недостатки. Так, собравшись попробовать поработать с этой СУБД, я столкнулся с проблемой того, что на официальном сайте в разделе Downloads было представлено множество разных сборок и вариантов инсталляции. В первый момент я был застигнут врасплох вопросом: «Что же мне качать?». Линк на .Net-провайдер, представленный на официальном сайте, вообще не открывался. Однако на форумах я нашел не менее десятка различных провайдеров различных авторов, и руководствоваться в выборе пришлось исключительно по отзывам пользователей.

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

Мне так и не удалось осуществить передачу параметров объекту SQLiteCommand. Посчитав нецелесообразным тратить время на решение этой проблемы, я просто динамически сформировал строку запроса. Поддерживаемый диалект SQL, на мой взгляд, несколько примитивен. По возможностям он сопоставим, пожалуй, с MySQL.

Все таблицы хранятся в едином файле. Таким образом, для переноса приложения на другую машину потребуется добавить (или же создать в коде программы) файл базы (<имя базы>.db), а также 3 библиотеки dll – SQLite.dll, SQLite3.dll и SQLite.Net.dll.

Открытый исходный код (в этом его неоспоримое преимущество) и безусловная популярность продукта предполагают возможность портирования БД на любую .Net-совместимую платформу – в том числе Compact Framework и Mono. Да и без .Net сама СУБД работает практически везде.

Основной областью применения SQLite могут стать небольшие портируемые приложения, в которых повышенные требования предъявляются к производительности, но не предусматривается мощная бизнес-логика. Также, вероятно, весьма удобно использовать эту СУБД для Web-разработок. Если вы остановите свой выбор именно на этой СУБД, то приготовьтесь к любым проблемам, кроме проблемы производительности.

 

VistaDB

Сайт: http://vistadb.com

Попав на главную страницу официального сайта этого продукта, я сразу же понял, что VistaDB – полная противоположность предыдущей СУБД. Отлично структурированная информация для пользователя, прекрасная документация и обилие примеров выдают коммерческий продукт.

Стоимость VistaDB зависит от условий лицензирования. Продается подписка на использование продукта. Если же вы захотите приобрести исходные тексты VistaDB, то сумма возрастет на порядок (около $5 000). Для ознакомления потенциальным покупателям предоставляется 30-дневная триальная версия продукта.

Интересным моментом является то, что VistaDB, по заверениям разработчиков, полностью совместима с Compact Framework и Mono. Большое количество сторонних продуктов, предназначенных для администрирования, и даже бесплатно распространяемая полноформатная книга, свидетельствует о популярности продукта.

Удобным мне показалось то, что процесс установки программного продукта полностью автоматизирован. По завершении процедуры инсталляции пользователь получает все необходимое для начала работы. Интеграция с Visual Studio происходит автоматически. Еще одним положительным моментом является наличие детальной и хорошо оформленной документации. В комплект VistaDB, кроме самой СУБД и провайдеров доступа, включено большое количество примеров и несколько полезных утилит. Прежде всего, это Data Builder, позволяющий легко управлять объектами базы данных. Также имеются мастера миграции данных из других СУБД. Кроме .Net-провайдера, доступ к VistaDB можно осуществлять через COM-объекты, ODBC–драйвера и
посредством компонентов доступа VCL.

Поддерживает четыре вида объектов:

  • Таблицы (tables);
  • Представления (view);
  • Хранимые процедуры (stored procedures);
  • Функции (functions).

На сайте разработчика приведено большое количество разнообразных материалов (в том числе и видео), помогающих разобраться в процессе создания VistaDB-приложений «с нуля». Собственно, сам этот процесс практически ничем не отличается от обычного процесса создания ADO .Net-приложений.

При создании таблиц с использованием менеджера я обратил внимание на не совсем корректную работу с кодировками. По умолчанию используется UTF-8 и предоставляется возможность изменить кодировку для каждого поля таблицы. На практике мне так и не удалось установить Windows Cyrillic.

VistaDB поддерживает весьма функциональный диалект языка SQL. Тем не менее, скоростные показатели, полученные в результате выполнения тестов, относительно невысокие. Правда, взаимодействовать с базой можно не только путем выполнения SQL-запросов, но и с помощью DDA (Direct Data Access). В последнем случае быстродействие значительно возрастает.

 

TurboDB

Сайт: http://turbodb.com

Немецкая СУБД – еще один коммерческий продукт. На сайте производителя представлено целых пять вариаций рассматриваемой СУБД, каждый из которых удовлетворяет своим требованиям: TurboDB for VCL 5.10, TurboDB Managed 1.4, TurboDB for .NET 5.10, TurboDB ODBC (Release Candidate) и TurboDB Studio 4.16. Для теста я выбрал Managed редакцию, полностью совместимую с .Net Framework 2.0 и Compact Framework 2.0.

Стоимость продукта - EUR 299.00 для индивидуальных разработчиков и EUR 499.00 для компаний. Любой из продуктов линии TurboDB можно скачать с сайта и бесплатно использовать в течении 30 дней.

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

Достаточно необычно организован менеджер БД. Изначально принципы его работы показались мне очень неудобными, потом же я понял, что основная его задача – безболезненная интеграция SQL-кода в приложение. Менеджер более эффективно справляется с отладкой SQL-запросов, чем с управлением структурой базы.

Как гласит документация, TurboSQL – подмножество SQL 92 и реализует минимальный набор функций, предусмотренных спецификацией MS ODBC. Именно в Managed редакции TurboSQL существенно расширился в основном за счет поддержки хранимых процедур и инструментов для работы с ними. Кроме того, сама база также полностью контролируется из кода приложения, что, собственно, вытекает из самого названия (Managed).

Показатели скорости обработки запросов TurboDB оказались вполне удовлетворительными. Особенно хороша TurboDB оказалась на select’e.

 

ScimoreDB

Сайт: http://www.scimore.com

Относительно молодая, но динамично развивающаяся СУБД – продукт датских разработчиков. Данная СУБД имеет две версии – parallel server и embedded database. С начала этого года оба эти продукта распространяются бесплатно, однако это никоим образом не отражается на их качественных характеристиках. Результаты теста говорят сами за себя. Создатели Scimore особый акцент делают на возможности работы с большими объемами данных и стабильности базы.

Собственно, название СУБД (Scimore = More science) говорит само за себя. Далеко не всякая серверная СУБД может конкурировать с набором поддерживаемых решений, предоставляемых Scimore Embedded DB. Поддержка транзакций, кластеров, deadlock detection - вот далеко не полный перечень возможностей Scimore.

Набор поддерживаемых SQL-директив вполне удовлетворителен. Кроме того, Scimore поддерживает собственный язык запросов – DQL (Distributed Query Language). Все SQL-запросы перед выполнением транслируются в DQL. К слову, прямое использование DQL способно повысить производительность выполнения запросов почти на 20%.

Физически Scimore Embedded DB представляет собою одну-единственную dll-библиотеку. Каждая из таблиц в базе хранится в собственном файле. Кроме таблиц пользователя, Scimore создает несколько служебных таблиц.

Процесс создания таблиц во встраиваемой версии Scimore может показаться несколько неудобным. Проблема в том, что сама база инициируется в коде приложения, поэтому, для того чтобы «увидеть» ее из Database Manager’а, приложение должно быть запущено. Впрочем, таблицы серверной и встраиваемой версий Scimore совместимы, поэтому для создания структуры БД можно использовать и сервер. Совместимость таблиц дает еще одно очевидное преимущество – масштабируемость приложения. Так, настольный однопользовательский продукт путем незначительных модификаций может легко превратиться в клиент-серверный продукт и наоборот. Собственно, даже к embedded-приложению можно осуществлять многопользовательский доступ.

«Движок» СУБД не привязан к .Net Framework. Разработчикам ПО предоставляется не только .Net-адаптер, но и SDK для использования БД в Win32-приложениях. DDEX-Provider, позволяющий использовать Server Explorer Visual Studio для создания DataBase-соединений, в комплект поставки не включен. Но тот факт, что Database Manager использует .Net, наводит на мысль о том, что основную ставку разработчики БД сделали именно на .Net-программистов.

Вообще, у меня сложилось впечатление, что Scimore вряд ли способен упростить процесс разработки. Но в том случае, если акцент делается на производительность (даже для «однопользовательских» приложений это бывает важно), или же к проекту предъявляются особые требования, - Scimore на высоте.

К явным недостаткам можно отнести практическое отсутствие примеров использования Scimore. Документация доступна только on-line. К сожалению, в отличие от той же VistaDB, Scimore не может быть использован в Delphi for Win32 (Ruby, PHP и т.д.) приложениях. В принципе, в Delphi for .Net его использование также затруднено, поскольку данная среда разработки использует .Net Framework 1.1, а Scimore предполагает работу с .Net Framework 2.0.

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

SQLite

Scimore

Vista DB TurboDB
SQL DQL
Создание таблицы 0,094 0,766 - 0,453 0,047
1000 записей Insert 0,031 0,328 0,188 0,5 0,531
Select 0,453 0,016 0,0001 0,141 0,156
Delete … where 0,156 0,0001 0,016 0,141 0,063
Delete all 0,016 0,078 0,031 0,297 0,031
10 000 записей Insert 0,297 3,39 2,438 4,0 3,531
Select 0,047 0,063 0,078 0,609 0,141
Delete … where 0,484 0,031 0,188 1,016 0,078
Delete all 0,031 1,047 1,094 2,953 0,141
50 000 записей Insert 1,5 19,31 13,38 23,250 16,668
Select 0,203 3,53 1,578 4,094 0,25
Delete … where 3,203 4,07 2,19 4,984 0,203
Delete all 0,188 6,125 5,56 16,86 0,672

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии