最近では、「赤い巨人」が、Apatch 2.0ではなく、かなり民主的なGPLv2ライセンスの下でEmbedded InnoDBをリリースしました。
現時点では、このデータベースは32ビットバージョンのWindowsおよびLinuxでのみ使用できます。
ダウンロードとインストールのリスクはありません。最初に見回したいと思います。 ドックに移動して読みます。 今日は職場で仕事をしていませんが、ちょっとしたレビューと翻訳を行います。
以下の斜体で、ドックからのテキストは、この問題に関する私の意見である通常のフォントで書かれます。
コンセプト。
このデータベースは、重要なアプリケーション向けに設計されており、数キロバイトのデータと数ギガバイトのボリュームの両方に対応しています。
データにアクセスし、データベースとトランザクションを管理するために、特別なAPIが使用されます。
これはおそらく千葉SQLではないので、これまでのところそれほど面白くありません。
InnoDBは組み込みエンジンであるため、非常に高速です。
私はすでにこれをテストしたいと思っています。おそらく記事の終わりまでに、InnoDBをインストールして、そのようにテストすることを勧めるでしょう。
このデータベースの速度の理由は、データベースがアプリケーションと同じアドレス空間で実行され、従来のDBMSの場合のような高価な通信手順を回避できるためです。
うーん、Google Gearsのようなものですか?
重要な点は、このDBMSはリレーショナルデータベースではなく、その結果、トリガーなどの高レベルの機能を提供せず、SQLに似たものがないことです。 InnoDBは、データを効率的に読み書きするための低レベルAPIのセットです。
Embedded InnoDBを使用すると、他のDBMSをインストールすることなく、アプリケーションにデータベースプロセッサを埋め込むことができます。 データベース操作はプラグインを使用して実行されます。 これにより、標準アクションを実行できます。通常のリレーショナルテーブルおよび列を使用した挿入、更新、削除、およびトランザクションの管理とデータカーソルの取得が可能になります。
このDBMSを使用すると、次のことができます。
- テーブル、列、インデックスを操作します。
- 呼び出しはSQLを使用して行われず、API呼び出しで操作します。
- アプリケーションにインストーラーがない場合があります。 すべてのライブラリは、動的および静的の両方にリンクします。 すべてのパラメーターにはデフォルト値があります。 必要なすべてのファイルが作成されます。 現時点では、システム変数を置く必要はありません。
- データベースは、 ACIDトランザクション(原子性、一貫性、分離、耐久性)によって処理され、コミット/ロールバック/セーブポイント操作をサポートします。
- アプリケーションは、クラシックカーソルの形式でデータを返します。
- テーブルとカーソルの両方のモデルをロックするだけでなく、トランザクション分離レベルを制御できます。
- 外部キーが可能。
- テーブルの作成後に列プロパティを変更することはできません。
- Bツリーデータ構造が可能。
使用します。
セットをダウンロードし、データベースを起動して、任意の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ツリーインデックスを自慢することはできません。