Pull to refresh

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

Reading time4 min
Views2.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:
Total votes 12: ↑9 and ↓3+6
Comments13

Articles