組み込みInnoDB新しいデータベースエンジン

OracleはEmbedded InnoDBをリリースしました。



最近では、「赤い巨人」が、Apatch 2.0ではなく、かなり民主的なGPLv2ライセンスの下でEmbedded InnoDBをリリースしました。

現時点では、このデータベースは32ビットバージョンのWindowsおよびLinuxでのみ使用できます。

ダウンロードとインストールのリスクはありません。最初に見回したいと思います。 ドックに移動して読みます。 今日は職場で仕事をしていませんが、ちょっとしたレビューと翻訳を行います。



以下の斜体で、ドックからのテキストは、この問題に関する私の意見である通常のフォントで書かれます。



コンセプト。



このデータベースは、重要なアプリケーション向けに設計されており、数キロバイトのデータと数ギガバイトのボリュームの両方に対応しています。

データにアクセスし、データベースとトランザクションを管理するために、特別なAPIが使用されます。

これはおそらく千葉SQLではないので、これまでのところそれほど面白くありません。

InnoDBは組み込みエンジンであるため、非常に高速です。

私はすでにこれをテストしたいと思っています。おそらく記事の終わりまでに、InnoDBをインストールして、そのようにテストすることを勧めるでしょう。

このデータベースの速度の理由は、データベースがアプリケーションと同じアドレス空間で実行され、従来のDBMSの場合のような高価な通信手順を回避できるためです。

うーん、Google Gearsのようなものですか?

重要な点は、このDBMSはリレーショナルデータベースではなく、その結果、トリガーなどの高レベルの機能を提供せず、SQLに似たものがないことです。 InnoDBは、データを効率的に読み書きするための低レベルAPIのセットです。

Embedded InnoDBを使用すると、他のDBMSをインストールすることなく、アプリケーションにデータベースプロセッサを埋め込むことができます。 データベース操作はプラグインを使用して実行されます。 これにより、標準アクションを実行できます。通常のリレーショナルテーブルおよび列を使用した挿入、更新、削除、およびトランザクションの管理とデータカーソルの取得が可能になります。



このDBMSを使用すると、次のことができます。





使用します。



セットをダウンロードし、データベースを起動して、任意のIDEを実行します。

データベースを作成します。

ib_err_t err = ib_database_create("test");





プレートを作成します。

シンプルな

CREATE TABLE T(c1 VARCHAR(32), c2 VARCHAR(32), c3 UNSIGNED INT, PK(c1, c2));





InnoDB API言語では、次のようになります。

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);








このデータベースの範囲は、主に自律的に機能するデバイスであり、定義上、外部との接続はありませんが、一部のデータを収集する機能は委任されています。 また、オープンソースアプリケーションがAndroidに完全にインストールされる必要があるため、モバイルデバイスで使用することもできます。

したがって、Google Gearsとの比較は、非常によく似たテクノロジーを示唆しています。 ブラウザベースのオフラインアプリケーションアプリ、デスクトップ用InnoDBのGearsの区別。

ただし、Googleはユーザーへの使いやすさの点でより適切に実装されており、完全にSQLを実行できます。

同じGoogleコードは次のようになります。



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倍以上簡潔ですよね?? しかし、すべての便利さにもかかわらず、GoogleはACIDトランザクション、組み込みのデータベースリカバリツール、またはBツリーインデックスを自慢することはできません。



All Articles