全て クラス 名前空間 関数 変数 型定義 列挙型 列挙値 フレンド ページ
プラグイン概要

APIを使う前に知っておきたいTransactdプラグインのこと

Transactd

TransactdサーバーはMySQLサーバーのプラグインとして動作します。クライアント接続の待ち受けは、MySQLとは別のポート(8610) で行います。接続管理なども完全に別のものとなります。
クラインアントからみると2つのサーバーが動作しているように見えます。 Transactdの処理はhandlerインターフェースを通してデータベースにアクセスします。通信プロトコルもMySQLとは異なった、tdapプロトコル を使用します。 MySQLとtdapの2つのプロトコルで同時に同じデータに問題なくアクセスできます。
尚、Transactdプラグインは、トランザクションが利用できるInnodbエンジンであることを前提としています。MyISAMでの動作確認 は行っていません。

plugin.png

APIの目標

SQLでの操作は、サーバー内で構文を解析し行単位でのアクセスメソッドに分解し処理を行い結果を返します。
Transactdはサーバー内部で行われる行単位の処理をクライント側でコントロールできるようにしたものです。 このAPIはわかりやすくとてもシンプルなものです。 また、このシンプルな処理をクライアント側で組み合わせ、SQLに相当するJoinやUnion、OrderBy、GroupByなど やや複雑な処理をC++で実装することで、開発者のコーディング量を最小限にし、スクリプト言語でも高速に動作するようにしています。 TransactdAPIは、処理速度を最大でかつ容易に扱えることを目標にしています。

サーバースレッドとコネクション

サーバーとの通信は、TCP ポート8610を通じて行われます。オペレーションはコネクションごとの接続スレッドにて処理されます。 同時アクセスするクライアント数が増えた場合その分だけスレッドが必要になりますが、スレッドの開始オーバーヘッドを避けるために 使用済のスレッドはプールされ次のスレッド要求があると再利用されるようになっています。またスレッドスタックを最小限にし 大量のスレッドによる、メモリの圧迫を最小限に抑えています。

クライアントスレッドとコネクション

1つのクライアントアプリケーションから、複数のデータベースをオープンできます。(同じデータベースを複数開くことも可) この時、オープンするスレッドがすべてで同じ場合かつ同じサーバー内のデータベースであれば、1つのコネクションをすべての データベースアクセスで共有します。スレッドが異なる場合は、別なコネクションによって処理されます。
また、明示的に別のコネクションによる接続開始を指示することもできます。これを使うと、コネクションプールの作成などを容易 に行うことができます。明示的に別のコネクションを作成する方法は database::connect()を参照してください。

Windows ローカルクライントでの高速通信

Windowsにおいて、サーバーとクライアントが同じコンピュータの場合、TCPによる接続ではなく共有メモリによる高速通信が行えます。 スタンドアロンの業務アプリケーションや、データの変換処理などで有用です。

解りやすいC++クライアントインターフェース

C++インターフェースとコンビニエンスAPIを使うと、C++による高速なアプリケーションを容易に作成できます。

Ruby、PHPとその他の開発言語

クライアントの開発に使用できる言語は、現在C、C++、Ruby、PHPとCOMコンポーネントを利用できる言語になっています。 C、C++、Ruby、PHPはLinux、Windowsの両方、COMコンポーネントはWindowsで利用可能です。COMコンポーネントは C#をはじめVB、Delphi、PHP、JScrip、VBScript、PowerShellなど多くの言語から利用可能です。 Ruby、PHPとCOMインターフェースはC++インターフェースの完全なラッパーでクラスとメソッドはほとんど同じです。 COMではクラス名とメソッド名の先頭は大文字になっています。リファレンスはC++のものを参照してください。

Btrieve API互換のCクライアントインターフェース

C言語のクライアントインターフェースはBTRVCALLID関数一つのみで、関数のプロトタイプ、オペレーション番号などはBtrieve API互換となっています。 最小限の変更で、既存のBtrieveアプリケーションをtransactdへマイグレーションできます。
C++インターフェースは、Cインターフェースを呼び出します。Cインターフェースとの動的バインディングにより ほとんど同じコードでTransactdとPSQL(Btrieve APIを含むアクティアン社(旧 Pervasive Software社)のデータベース)の両方のデータベースにアクセスできます。
2つのデータベースでサポートするAPIの種類や振る舞いの違いについては各レファレンスにて内容を記載しています。

データベーススキーマ

MySQLはテーブルのフィールドを明確に記述してテーブルを作成します。TransactdではMySQLの保持する この情報とは別にテーブルの情報を保持します。テーブルのメタ情報をスキーマと呼びますがTransactdは スキーマをMySQLのテーブルに保存して利用します。
このスキーマからMySQLのテーブルを作成することができます。また逆にMySQLの既存のデータベースからスキーマを 自動生成して、transactdでアクセスできるようにすることができます。詳しくは database::open() を参照してください。

Transactd SDK 2015年09月08日(火) 19時13分36秒 doxygen