CUBRID

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 13:19, 15 июня 2020.
CUBRID
Cubrid logo.png
Разработчики: Naver Search Solutions
Выпущена: 20 ноября, 2008
Написана на: C, C++, Java
Операционная система: Linux, Windows
Локализация: English
Тип ПО: База данных
Лицензия: Свободное и общедоступное программное обеспечение
Веб-сайт официальный сайт


Cubrid - основанная на SQL реляционная система управления базами данных с открытым исходным кодом. Разработана в 2008 году Naver Сorporation, используется преимущественно для веб-приложений. Название состоит из сокращений слов cube и bridge. Движок распространяется под лицензией GPL 2.0, в то время как GUI и API - под лицензией Berkeley Software Distribution. СУБД написана на C и C++, интерфейс администрирования — на Java, поддерживаются ОС Linux и Windows. CUBRID использует объектно-реляционный подход к хранению данных. Поэтому, в ней нет столбцов — есть атрибуты, нет таблиц — есть классы, нет строк — есть экземпляры классов, нет типов данных — есть домены, нет процедур — есть методы. CUBRID доступен для Microsoft Windows и Linux (большинство дистрибутивов) для 32- и 64-разрядных архитектур. Также реализована частичная поддержка OS X .

Лицензионная политика

Рисунок 1 – Лицензия CUBRID

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

CUBRID имеет отдельную лицензию на серверный движок и интерфейс в соответствии с рисунком 1. Серверный движок использует лицензию GPL v2 или выше, которая позволяет распространение, изменение и приобретение исходного кода. Интерфейс и инструменты имеют лицензию BSD, в которой нет обязательств по открытию производных работ. Причина принятия двух отдельных лицензионных систем заключается в том, что CUBRID не хочет давать никаких ограничений независимым поставщикам программного обеспечения (ISV) для разработки и распространения различных приложений на базе CUBRID.[Источник 1]


Архитектура

Особенностью, отличающей CUBRID от других реляционных систем баз данных, является ее трехуровневая клиент-серверная архитектура, изображенная на рисунке 2, состоящая из сервера баз данных, посредника соединений и прикладного уровня. Опишем части архитектуры подробнее (API прикладного уровня описаны в следующем разделе).

Рисунок 2 – Архитектура CUBRID

Сервер баз данных

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

Посредник соединений

Основные роли посредника соединений CUBRID заключаются в следующем:

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

Поскольку посредник соединений не привязан к одной машине с сервером базы данных, CUBRID может использовать преимущества аппаратных ресурсов нескольких машин при обработке запросов к одной базе данных.

Особенности

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

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

CUBRID дает возможность настроить конфигурацию ведущий/ведомый или ведущий/ведомый/реплика. Журналы транзакций используются для репликации изменений с главного (ведущего) сервера на подчиненный (ведомый) и реплицирующий сервер, обеспечивая при этом точные и предсказуемые функции обработки отказа и возврата к исходному состоянию на основе CUBRID heartbeat. Окружение можно настроить в двух режимах для репликации журнала транзакций: синхронном и асинхронном. [Источник 2]

Высокое производительность

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

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

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

Масштабируемость и оптимизация данных

Дизайн и архитектура CUBRID обеспечивают как горизонтальную, так и вертикальную масштабируемость. Тома базы данных (файлы), а также количество столбцов могут расти в режиме онлайн, если это необходимо. Практически нет ограничений на размер базы данных, количество таблиц или индексов, а также количество строк в таблице. Управление Мультиверсионным параллелизмом, свободные хэши блокировки, эскалация уровня строк и блокировки, стимулируемые защелки страниц для чтения и записи и аналогичные оптимизации производительности позволяют сохранить тот же уровень производительности при увеличении объема данных и работы. Удаленное пространство повторно используется и ненужные данные быстро очищаются, сохраняя при этом контроль ввода-вывода и использования памяти.

Работоспособность/Надежность

Восстановление и оперативное резервное копирование на основе протокола Wal (Write-Ahead-Logging) гарантирует согласованность и корректность базы данных даже в случае программных или аппаратных сбоев. Существует три возможных уровня резервного копирования: полное, первое инкрементное и второе инкрементное, что обеспечивает различную свободу выбора размера и продолжительности резервного копирования в зависимости от уровня доверия.

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

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

Доступ пользователя может контролироваться на уровне таблицы и типа доступа, с помощью фильтров IP/user/database.

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

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

Простота разработки

Для упрощения работы с CUBRID в нем были реализованы различные механизмы:

  1. Поддержка регулярных выражений.
  2. Большое число API - JDBC, PHP/PDO, ODBC, ADO.NET, OLEDB, Python, Perl, Ruby, C (драйвер CCI[Источник 3], Node.js, а также инструментов разработки/администрирования - CUBRID Manager, CUBRID Query Browser, CUBRID Migration Toolkit:, CUBRID Web Manager. [Источник 4]
  3. Поддержка большого числа типов данных.
  4. Лучшая производительность на SSD.
  5. Почти полная совместимость с MySQL.


Интерфейсы

Командная строка

CUBRID поставляется со встроенным интерфейсом командной строки csql, который может использоваться для выполнения операторов SQL на сервере CUBRID. Инструмент может использоваться в одном из двух режимов:

  • CS ( клиент / сервер ), который может подключаться к локальным или удаленным серверам CUBRID
  • SA ( автономный режим), используемый главным образом для целей администрирования, который монтирует локальную базу данных путем эмуляции экземпляра сервера

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

Графические

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

  • CUBRID Manager - это средство администрирования базы данных для CUBRID, распространяемое по лицензии BSD.
  • CUBRID Query Browser - облегченная версия CUBRID Manager.
  • CUBRID Web Manager - это веб-версия CUBRID Manager, которая может быть развернута на удаленных серверах.
  • Инструмент CUBRID Migration Toolkit - это инструмент, который позволяет переносить данные из MySQL и предыдущих версий баз данных CUBRID на последний сервер базы данных CUBRID.

История выпуска

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

Версия Дата выпуска Дата выпуска бета-версии Дополнение
10.2 Декабрь 2019 Включает полезные расширения SQL, а также ускорена работа CUBRID.
10.1 Июль 2017 Включает полезные расширения SQL: CTE (Common Table Expressions)[Ссылка 1] и другие.
10.0 Февраль 2016 Обеспечивает изоляцию снимков на основе протокола MVCC[Ссылка 2]. Включает множество расширений SQL и функций / операторов.
9.3 Май, 2014 Новые функции SQL, поддержка блокировки схемы, поддержка различных синтаксисов SHOW, повышение производительности.
9.2 Сентябрь, 2013 SQL-профилирование, поддержка новых SQL, несколько улучшений
9.1 Март, 2013 Новые функции SQL и подсказка индекса, улучшения производительности и оптимизации.
9.0 Октябрь, 2012 Поддержка интернационализации, индекс функции, индекс фильтра, сканирование индекса, утверждение MERGE, функции окна.
8.4.3 20 Ноября, 2012 Баланс базы данных , балансировка нагрузки уровня API, встроенный веб-менеджер с поддержкой мониторинга
8.4.1 24 Февраля, 2012 1 Февраля, 2012 Важные оптимизации производительности, расширения SQL, оператор REGEXP.
8.4.0 1 июля, 2011 12 Марта, 2011 Улучшения высокой доступности, усовершенствования API CUBRID C, заметная оптимизация производительности, охватывающая индекс.
3.1 31 Декабря, 2010 12 Ноября, 2010 Поддержка BLOB и CLOB, поддержка мониторинга высокой доступности, усовершенствования драйверов (JDBC, ODBC и CUBRID C API).
3.0 4 Октября, 2010 19 Июля, 2010 Расширения SQL, улучшения высокой доступности
2.2 30 Апреля, 2010 Улучшения высокой доступности, усовершенствования API CUBRID C, некоторые улучшения производительности
2.1 Декабрь, 2009
2.0 Август, 2009
1.4 Март, 2009
1.3 Февраль, 2009
1.2 Январь, 2009
1.1 Ноябрь, 2008 CUBRID стал проектом с открытым исходным кодом
1.0 Октябрь, 2008 Первый стабильный выпуск

Примеры

Получение данных (PHP)
<html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=euc-kr">
    </head>
    <body>
    <center>
    <table border=2>
    <?php
        /**
         * Информация для подключения
         */
        $host_ip = "localhost";
        $host_port = 33000;
        $db_name = "demodb";
        /**
         * Подключаемся к серверу. Непосредственно подключение не выполняется, 
         * только передаем информацию по подключению
         */
        $cubrid_con = @cubrid_connect($host_ip, $host_port, $db_name);
 
        if (!$cubrid_con) {
            echo "Database Connection Error";
            exit;
        }
    ?>
    <?php
        $sql = "select sports, count(players) as players from event group by sports";
        /**
         * Запрашиваем результат SQL запроса.
         * Непосредственно подключаемся к БД
         */
        $result = cubrid_execute($cubrid_con, $sql);
 
        if ($result) {
            /**
             * Получаем имена столбцов
             */
            $columns = cubrid_column_names($result);
            /**
             * Получаем количество столбцов
             */
            $num_fields = cubrid_num_cols($result);
            /**
             * Выводим имена столбцов на экран
             */
            echo("<tr>");
 
            while (list($key, $colname) = each($columns)) {
                echo("<td align=center>$colname</td>");
            }
 
            echo("</tr>");
 
            /**
             * Получаем результаты
             */
            while ($row = cubrid_fetch($result)) {
                echo("<tr>");
 
                for ($i = 0; $i < $num_fields; $i++) {
                    echo("<td align=center>");
                    echo($row[$i]);
                    echo("</td>");
                }
 
                echo("</tr>");
            }
        }

        cubrid_commit($cubrid_con);
        cubrid_disconnect($cubrid_con);
    ?>
    </body>
    </html>
Добавление данных (PHP)
<html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=euc- kr">
    </head>
    <body>
    <center>
    <table border=2>
    <?php
        /**
         * host_ip is the IP address where the CUBRID Broker is installed
         * host_port is the port number of the CUBRID Broker
         * db_name is the name of CUBRID Database
         */
        $host_ip = "localhost";
        $host_port = 33000;
        $db_name = "demodb";
        $cubrid_con = @cubrid_connect($host_ip, $host_port, $db_name);
 
        if (!$cubrid_con) {
            echo "Database Connection Error";
            exit;
        }
    ?>
    <?php
        $sql = "insert into olympic (host_year,host_nation,host_city,"
            . "opening_date,closing_date) values (2008, 'China', 'Beijing',"
            . "to_date('08-08-2008','mm-dd- yyyy'),to_date('08-24-2008','mm-dd-yyyy')) ;"
        $result = cubrid_execute($cubrid_con, $sql);
        if ($result) {
            /**
             * Handled successfully, so commit.
             */
            cubrid_commit($cubrid_con);
            echo("Inserted successfully ");
        } else {
            /**
             * Error occurred, so the error message is output and rollback is called.
             */
            echo(cubrid_error_msg());
            cubrid_rollback($cubrid_con);
        }
        cubrid_disconnect($cubrid_con);
    ?>
    </body>
    </html>

Источники

  1. "CUBRID". Дата обновления: 04.05.2020. https://www.cubrid.org/cubrid (дата обращения: 16.05.2020).
  2. "CUBRID Manuals". Дата обновления: 04.05.2020. http://cubrid.org/documentation/manuals (дата обращения: 16.05.2020).
  3. "CCI driver". https://www.cubrid.org/manual/en/9.1.0/api/cci.html (дата обращения: 01.06.2020).
  4. "CUBRID Github". Дата обновления: 13.05.2020. https://github.com/CUBRID/cubrid (дата обращения: 16.05.2020).

Ссылки

  1. "Иерархические и рекурсивные запросы в SQL". https://ru.wikipedia.org/wiki/Иерархические_и_рекурсивные_запросы_в_SQL (дата обращения: 01.06.2020).
  2. "MVCC". https://ru.wikipedia.org/wiki/MVCC (дата обращения: 01.06.2020).