Eloquera I

краткое описание / немного истории / установка / режимы работы базы: service, inmemory, desktop / восстановление базы

Краткое описание базы

База данных Eloquera с самого начала была написана для хранения объектов  на основе .Net Framework, что сделало возможным попытаться вобрать в себя все лучшее от объектных и реляционных баз данных одновременно, преодолев многие их различия. Теоретически Eloquera может работать с любыми объектами из семейства .Net Framework, однако на практике работа проверялась пока только с C#. Главная ориентированность разработчиков на enterprise сегмент, а не на embedded решения.

Отличительные особенности Eloquera весьма внушительны и постоянно пополняются, вот их примерный список:

  • Сохраняет C# объекты (любые объекты любого языка на .Net платформе) без необходимости реализации специальных интерфейсов и адаптеров.
  • Сохраняет Dynamic объекты с любыми полями\свойствами и может сопоставить их объектам любого типа.
  • Язык запросов максимально приближен к SQL, при этом не требуется наличие какой либо реляционной SQL базы.
  • Поддержка LINQ.
  • Возвращает объекты в том виде, в котором они были сохранены (включая перечислимые типы)
  • Поддержка параметров в виде списков и массивов. В свою очередь массивы могут быть многомерными – синтаксис запросов остается неизменным.
  • Поддержка функций и выражений в запросах и конструкции ORDER BY.
  • Стандартный и расширенный ORDER BY.
  • Регулярные выражения в запросах.
  • Индексация и оптимизация запросов.
  • Пакетная вставка и обновление данных.
  • Поддержка шаблонных объектов.
  • Восстановление Read-only полей и свойств.
  • Учет классов наследников в запросах. Select ParentClass вернет и ParentClass и ChildClass.
  • Возможность построения запросов относительно указанного типа. Select ONLY ParentClass вернет только ParentClass без ChildClass.
  • Поддерживается частичный возврат объектов. Например, если вам требуется класс ForumTopic, тогда можно не подтягивать все ссылки на ForumMessages.
  • Можно указать глубину объекта для возврата в запросе.
  • Клиент-серверная архитектура.
  • Возможность одновременной работы с несколькими пользователями. Запросы выполняются одновременно и независимо.
  • Аутентификация через Windows аккаунты или через механизмы Eloquera.
  • Поддержка х86 и х64.
  • Уникальные идентификаторы для каждого объекта – отлично подходит для работы в системах не хранящих состояние и ASP.NET.
  • Поддержка культур. Например WHERE dates BETWEEN[‘en-US’] @d1 and @d2 будет интерпретировано в US формате, даже если текущий язык системы русский.
  • Нестрогий поиск c использованием конструкции ALMOST.
  • Хранимые процедуры.

Немного из истории

Все началось в 2006 году, когда 2 товарища, иммигранты первого поколения покинувшие СНГ в лихие 90е, Jay и Dmitro решили сделать свой поисковый движок с учетом контекста запросов. Через некоторое время сам движок был написан и в первом приближении работал, но для его работы требовалась мощная база данных, которая могла бы обрабатывать и хранить огромные объемы данных. По каким-то причинам все существующие на тот момент базы не устроили «crazy Russians programmers» (которые на самом деле ни разу не Russians, но русскоязычные) и решено было делать свою базу.  Так разработка сместилась в сторону объектной базы данных и продолжается по сей день, став главным проектом компании Eloquera.

Почти год Джей и Дмитрий работали вдвоем.  Затем судьба свела их с John Lane,  человеком, который в 70е принес Oracle в Австралию, лично работая с Ларри Эллисоном. После чего дела у компании пошли веселее, но не проще. 2009 год по признанию участников выдался депрессивным, видимо сказывалась общая усталость, закрытие офисов на Украине и двухгодичные поиски ведущего инженера.

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

На данный момент офисы компании находятся в Сиднее, где проживают отцы основатели, в Чикаго – в основном sales forces, а так же команда разработчиков в Кишиневе.

Установка

Забрать дистрибутивы базы можно с официального сайта www.eloquera.com после регистрации. На выбор будут представлены архивы для desktop установки и для установки в виде сервиса (х86 или х64). При установке Eloquera как сервиса, подводных камней нет. На скриншоте ниже, можно увидеть предложенные для  установки компоненты при работе в виде сервиса.

Установка на любой более-менее современной машине займет не более 5 минут. После чего в вашем распоряжении будут:

  • Eloquera Config Studio;
  • Eloquera DB Studio;
  • Сама служба, отвечающая за работу базы.

Служба стартует автоматически после установки и работает под учетной записью Network Service.

Для простоты я буду использовать desktop, которая устанавливается по принципу x-copy,  т.е. надо всего лишь скопировать файлы в нужную директорию. Для работы будет необходим установленный .Net 4 Full Framework.

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

Режимы работы базы

БД Eloquera может работать в нескольких режимах:

  • Общая база данных для нескольких приложений, стандартный режим.
  • In-memory режим.
  • Desktop – режим встроенной в приложение базы.

Стандартный режим (Service mode)

В стандартном режиме работы Eloquera – доступен полный набор функций реализованных в этой объектно-ориентированной базе.

Управление доступом к сервису можно сделать на основе либо Windows аутентификации, либо внутренних средств БД. Смешанная модель аутентификации, как например для MS SQL Server, на данный момент не поддерживается. Настроить доступ к Eloquera можно с помощью Eloquera Database configuration, входящей в поставку, либо самостоятельно править файл конфигурации.

В целом, скриншот показывает все основные настройки, для сервиса. Например, можно изменить порт сервиса, размер выделяемой памяти.

Опция Enable write-through caching позволяет включить защиту базы от повреждения при работе в нестабильном окружении, когда возможны отключения питания, незапланированные остановки сервиса и прочие стихийные бедствия.

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

Для начала работы и получения  соединения с базой, необходимо будет добавить в проект ссылку на сборку Eloquera Database Client.

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

Разберем этот небольшой кусок кода построчно. Для соединения с базой данных используется класс DB. Конструктору класса передается строка соединения. В данном случае строку соединения для нас создал визуальный редактор файла конфигурации БД Eloquera. Класс DB реализует интерфейс IDisposable, поэтому будет правильно заключить его в using. В результате мы получили класс для работы с базами под управлением Eloquera.

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

Закономерным будет вопрос, куда же сохраняется база и как она выглядит. Ответ очень прост: база сохраняется в директорию, указанную в параметре Database Path.

В данном случае это C:\Program Files\Eloquera\Eloquera Server 3.0\Database. Перемещаемся по этому пути и видим файл ServiceDatabase.eq. Он назван в соответствии с тем, как была названа база в C# коде.

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

In-memory режим

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

Eloquera поддерживает in-memory режим как при работе в виде сервиса, так и при автономной работе (desktop mode). В бесплатной версии, база в памяти может занимать до 1 ГБ. Так же стоит помнить о физической доступности оперативной памяти, так как возможна ситуация когда размер базы будет таков, что Windows попытается разместить ее в файле подкачки на диске. Как вы понимаете, это совсем не прибавит скорости при работе.

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

При этом база будет существовать только в оперативной памяти, однако пустой файл все равно будет создан в файловой системе. Для того чтобы можно было возобновить работу с такой базой, надо использовать параметр persist в строке соединения. Т.е.:

В этот момент пригодится созданный заранее файл базы данных. В силу особенностей движка базы, файл является «якорем» для работы.

Сохранение базы произойдет при ее закрытии с помощью метода Close. Восстановление базы в памяти произойдет при следующем открытии базы с помощью метода OpenDatabase.

Пример:

О запросах и CRUD операциях детально будет рассказано ниже.

 

Режим встроенной базы (Desktop mode)

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

  • Eloquera.Client.dll
  • Eloquera.Common.dll
  • Eloquera.config (опционально, если вы будете описывать конфигурацию в C# коде)
  • Eloquera.Server.exe

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

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

Несмотря на то, что свойство Copy Local у этих ссылок равняется True, Eloquera.Server.exe у меня не скопировалась в директорию итоговой сборки приложения. Для себя я эту проблему решил следующим образом:

  1. Добавил все 4 файла как ссылки в проект.
  2. Изменил свойство Copy to Output Directory на Copy always.

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

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

 

Внимание!

Для того чтобы Eloquera стала работать в Desktop режиме, надо остановить сервис EloqueraDB, иначе вы получите ошибку о том, что невозможно соединится с сервисом по адресу (local).

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

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

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

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

Восстановление поврежденной базы данных

Начиная с версии 4.0 добавлен механизм восстановления базы данных при подозрении на повреждение. При возникновении такой ситуации, будет поднят флаг IsCorruptionSuspected, при появлении которого можно проигнорировать сообщение и продолжить работу, а можно предпринять  попытку восстановить базу с помощью метода RecoverDatabase(). Если все пройдет успешно метод вернет true.  Указанный флаг может возникнуть в любой момент работы, а не только во время закрытия базы, когда может происходить проверка состояния базы.

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

Продолжение следует…

 

Hard’n’heavy

2 комментарий на “Eloquera I

  1. Интересная СУБД… На первый взгляд выглядит очень заманчиво. Насколько перспективная весщчь? Что думают о ней в Майкрософт?

    • Я думаю что очень перспективная, уже Entrprise версия есть в продаже, ее не дают пощупать за так. Возможностей в самой базе по работе с данными очень большие, общался с разработчиками и так много всего сладкого. Тем более что последние полгода они выдают релизы часто и с новыми фичами. Наконец-то сделали NuGet пакет.
      А про MS не знаю, надо будет найти кого-нито там, кто больше связан с базами и запытать.

Оставить комментарий