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

    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 индексами.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 13

      0
      Аля sqlite только для бОльших объемов?
        0
        Ну несовсем:
        Первое отличие, как я уже писал, тут нет сиквела… все взаимодействие через API.
        Второе оно умеет востановление данных в случае сбоя. Делается это простым скриптом запуска.

        А вот про объемы данных — это их дока, обешают быстрое обрашение даже к базам в несколько гиг, но на прктике еще не проверял…
          0
          К тому же оно транзакционное, есть роллбак коммит, и savepoint насколько я знаю ни sqlite ни гугл Gears не умеют откатываться к savepoint.
            0
            SQLite уже умеет
          0
          Gears как раз использует SQLite. code.google.com/intl/uk/apis/gears/api_database.html
          И странно что автор сравнивает Inno DB с Gears. Его нужно сравнивать с Berkeley DB, FireBird, MS SQL CE, SQLite. Чесно говоря это сравнение сладкого с зелёным.
          0
          В чем преимущества перед проверенной временем BDB?
            0
            Это интересный конкурент, даже не совсем конкурент, оба продукта от Оракле. Корпорация иногда идет на такое когда выпускает две вроде аналогичные технологии…
            У инноБД есть ряд преимуществ:
            ИнноБД это просто библиотека не нужно устанавливать не нужно ничего конфигать, протсо кидаешь свой exe файл+длл и приложение готово к работе…
            ИнноБД умеет rollback to save point, насколько я понял BDB тоже не на уровне каждой транзакции?? Нашел там только точки восстановления состояния базы целиком.
            0
            замена мускулю? ;)
              0
              :)) да по производительности инннодб четкий движок… этот можно в прям в мускуль встраивать — даже плагин есть специальный…
              но замена врятли… он же как длл :))
                0
                Это больше ориентировано на минималистичные приложения, на те где не требуется клиент-серверная архитектура, разделение прав пользователей, и такие сложные элементы как триггеры, хранимые процедуры и прочее.
                  0
                  вы знаете примеры софта\приложений, который бы использовал клиент-серверную архитектуру, разделение прав пользователей, триггеры, хранимки, представления, ограничения и при этом работал бы с мускулем? %)
                +1
                Да. Могу привести пример продукты Alcatel-Lucent.
                Они сделали биллинг(!) для GSM операторов на мускле. И до определенного объема данных оно работало. Посчастливилось некоторое время поадминить эту систему.
                Кстати, в таблицах с типом InnoDB было до 125*10^6 записей.

                >клиент-серверную архитектуру
                имел в виду соединение через сокеты
                >разделение прав пользователей
                Гранты на базы для различных пользователей. Очень даже используются.

                Вот еще пример не простого использования мускл.
                Так вот для таких целей Embedded InnoDB не подойдет
                  0
                  Gears использует SQLite. code.google.com/intl/uk/apis/gears/api_database.html
                  Ваше сравнение некоректно.
                  Сравнивать нужно с Berkeley DB, MS SQL CE, SQLite, Oracle Database Lite. Чесно говоря это сравнение сладкого с зелёным. У всех перечисленых движков есть ACID, встроенные средствами восстановления базы данных, и B-tree индексами. Отличаются только скоростью, удобством API, и фичастостью.
                  Кстати по расспространённости Inno DB конкурентам сильно сливает. Berkeley DB просто в невероятном количестве устройств работает годами.

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

                  Самое читаемое