Pull to refresh

Embedded InnoDB новый движок Баз данных

Reading time 4 min
Views 2.8K
Oracle выпустила Embedded InnoDB.
 
Совсем недавно «красный гигант» выпустили Embedded InnoDB, под довольно демократичной лицензией GPLv2, не Апатч 2.0 но тоже сносно.
В данный момент данная БД доступна только для 32-х битных версии Windows и Linux.
Качать и ставить я бы пока не рискнул, сначала хочется осмотреться. Идеться в доку и читается. Так как сегодня на работе мне делать все равно нечего сделаю небольшой обзор-перевод.

Курсивом ниже будет написан текст из доки, обычным шрифтом мое мнение на этот счет.

Концепция.


Данная БД разработана для критичных приложений и с успехом справляется как килобайтами данных так и объемами в несколько гигабайт.
Для доступа к данным и управлением БД и транзакциями используются специальные API.
Это типо никакого тибе SQL, пока не так занимательно.
Так как InnoDB является встраиваемым движком, он супер быстрый.
Вот это уже хочется протестировать, возможно к концу статьи они так раскрутят меня установить InnoDB и протестировать.
Причина быстроты данной БД является то, что она запускается в том же адресном пространстве, что и ваще приложение, и позволяет избежать дорогостояших процедур коммуникации как в случае с классическими СУБД.
Хм, что-то вроде Google Gears??
Важный момент, что данная СУБД не является реляционной базой данных и как следствие не предоставляет таких высокоуровневых функции как триггеры и ничего похожего на SQL. InnoDB это лишь набор API низкого уровня для эффективного чтения/записи ваших данных.
Embedded InnoDB позволяет вам встраивать процессор дазы данных в ваше приложение, без необходимости устанавливать любую другую вашу СУБД. Операции с базой данных осуществляются по средствам плагина. Который позволяет осуществлять стандартные действия: insert, update, delete с обычными реляционными таблицами и колонками, а так же позволяет управлять транзакциями и возврашать курсоры данных.

Данная СУБД позволяет:
  • Работать с таблицами колонками и индексами.

  • Ваши вызовы происходят не с помощью SQL, вы оперируете вызовами API.

  • Ваше приложение может быть без инсталятора. Все библиотеки линкуются как динамически так и статически. Все параметры имеют значения по умолчанию. Все необходимые файлы будут созданы. В данный момент нет необходимости проставлять никакие системые переменные.
  • Расбота с базой данный осуществляется транзакциями ACID (Atomicity, Consistency, Isolation, Durability) и поддерживают commit / rollback / savepoint операции.
  • Приложение возвращает данные в виде классического курсора.

  • Вы можете контролировать уровни изолированности транзакции, а атк же модели блокировок как для таблиц так и курсоров.

  • Умеет внешние ключи.

  • Не позволяет менять свойства колонок после создания таблицы.

  • Умеет B-tree структуры данных.


 

Использование.


Качаем ставим, старутем бд, запускаем любое IDE.
создаем БД:
ib_err_t err = ib_database_create("test");
создаем табличку:
простой
CREATE TABLE T(c1 VARCHAR(32), c2 VARCHAR(32), c3 UNSIGNED INT, PK(c1, c2));
в языке API InnoDB будет выглядеть так:
ib_trx_t ib_trx;
ib_id_t         table_id = 0;
ib_tbl_sch_t    ib_tbl_sch = NULL;
ib_idx_sch_t    ib_idx_sch = NULL;
char            table_name[IB_MAX_TABLE_NAME_LEN];

snprintf(table_name, sizeof(table_name), "%s/%s", database_name, name);

/* Pass a table page size of 0, ie., use default page size. */
ib_table_schema_create(table_name, &ib_tbl_sch, IB_TBL_COMPACT, 0);

ib_table_schema_add_col(ib_tbl_sch, "c1", IB_VARCHAR, IB_COL_NONE, 32);
ib_table_schema_add_col(ib_tbl_sch, "c2", IB_VARCHAR, IB_COL_NONE, 32);
ib_table_schema_add_col(ib_tbl_sch, "c3", IB_INT, IB_COL_UNSIGNED, 4);

/* Index schema handle is "owned" by the table schema handle in this
case and will be deleted when the table schema handle is deleted. */
ib_table_schema_add_index(ib_tbl_sch, "PRIMARY_KEY", &ib_idx_sch);

/* Set prefix length to 0. */
ib_index_schema_add_col( ib_idx_sch, "c1", 0);

/* Set prefix length to 0. */
ib_index_schema_add_col( ib_idx_sch, "c2", 0);

ib_index_schema_set_clustered(ib_idx_sch);

/* Create the transaction that will cover data dictionary update. */
ib_trx = ib_trx_begin(IB_TRX_SERIALIZABLE);

/* Lock the data dictionary in exclusive mode */
ib_schema_lock_exclusive(ib_trx);

/* Create the actual table from the schema. The table id of the new
table will be returned in table_id. */
ib_table_create(ib_tbl_sch, &table_id);

/* Commit the transaction */
ib_trx_commit(ib_trx);

/* Release the data dictionary lock. */
ib_schema_unlock(ib_trx);

ib_table_schema_delete(ib_tbl_sch);

 
Область применения данной бд это в первую очередь автономно работающие устройства, которые по определению не имеют связи с внешним миром, но на них возложены функции сбора некоторых данных. Так же возможно применение на мобильных устройствах, учитывая что приложение с открытым кодом оно должно отлично установится в андроид.
Так и напрашивается сравнение с Google Gears, очень схожие технологии. Различие Gears для броузерзерных оффлайн приложений приложений, InnoDB для десктопных.
Однако гуглы все лучше реализовали по части дружилюбия к пользователю, гугл умеет полноценный SQL.
Аналогичный предышему код на гугл будет выглядеть так:
 
try {
            db = Factory.getInstance().createDatabase();
            db.open("BaseApp11");
            db.execute("create table if not exists baseapp11 (Timestamp int)");
            db.execute("delete from baseapp11");
        } catch (GearsException e) {
            Window.alert(e.toString());
        }

В как минимум 100 раз лаконичнее не правда ли?? Но несмотря на все удобство гугл не может похвастаться ни транзакциями ACID, ни втроенными средствами восстановления базы данных, ни B-tree индексами.
Tags:
Hubs:
+6
Comments 13
Comments Comments 13

Articles