TransactdプラグインはMySQLサーバーのプラグインとして動作します。クライアント接続の待ち受けは、MySQLとは別のポート(8610) で行います。接続管理なども完全に別となり、クライアントから見ると2つのサーバーが動作しているように見えます。
TransactdはHandlerインターフェースを通してデータベースにアクセスします。通信プロトコルもMySQLとは異なるtdapプロトコル を使用します。
MySQLとtdapの2つのプロトコルで同時に同じデータにアクセスできます。
なお、Transactdプラグインは、トランザクションが利用できるInnodbエンジンの使用を前提としています。 MyISAMでの動作確認は行っていません。
サーバーとの通信は、TCPポート8610を通じて行われます。オペレーションはコネクションごとの接続スレッドにて処理されます。 同時アクセスするクライアント数が増えた場合はその分だけスレッドが必要になりますが、スレッドの開始オーバーヘッドを避けるために 使用済のスレッドはプールされ、次のスレッド要求があると再利用されるようになっています。またスレッドスタックを最小限にし、 大量のスレッドによるメモリの圧迫を最小限に抑えています。
Windowsにおいて、サーバーとクライアントが同じコンピュータの場合、TCPによる接続ではなく共有メモリによる高速通信が行えます。 スタンドアロンの業務アプリケーションや、データの変換処理などで有用です。
MySQLはテーブルのフィールドを明確に記述してテーブルを作成します。Transactdでは、MySQLの保持する この情報とは別にテーブルの情報を保持します。テーブルのメタ情報をスキーマと呼び、Transactdは スキーマをMySQLのテーブルに保存して利用します。
このスキーマからMySQLのテーブルを作成することができます。また逆にMySQLの既存のデータベースからスキーマを 自動生成して、transactdでアクセスできるようにすることもできます。詳しくは database::open() を参照してください。
Transactd クライアントの基本はCとC++のインターフェースからなります。その上に RubyやPHP、Javaといったインターフェースが構築されます。(現在用意されているのはC、C++、Ruby、PHP、COM)
C用インターフェースはtdclc_*.dll
(Windows)もしくはlibtdclc_*.so.*
(Linux/Mac OS X)という名前のライブラリで提供されます。 エクスポートされた関数はPSQL互換で、容易にPSQLからのマイグレーションができるようになっています。(このインターフェースの仕様の詳細はこのドキュメントでは述べません。)
Cのインターフェースは、レコードイメージをフィールドの長さと型に応じてバイナリフォーマットする必要があります。これは、これからアプリケーションを作成するユーザーにとっては大きな負担となります。代わりにC++インターフェースを使用してください。
C++用インターフェースはtdclcpp_*.dll
(Windows)もしくはlibtdclcpp_*.so.*
(Linux/Mac OS X)という名前のライブラリで提供されます。これらのライブラリは、C用ライブラリを呼び出して使用します。
C++用インターフェースは、C用のインターフェースをオブジェクト指向のわかりやすいインターフェースでラップしたものです。さらに、より便利なコンビニエンスAPIも追加されています。
クラスの構成図は以下の通りです。
Windowsではマルチバイト仕様m
とユニコード仕様u
、また、64bitと32Bitの組み合わせの4種類のファイルがあります。 作成するアプリケーションに合わせてリンクするDLLを変える必要があります。
Windowsでは、作成するアプリケーションのビルドオプションでTRDCL_AUTOLINK
マクロを定義すると、必要なDLLを自動でリンクできます。 (一般的には文字コードの取り扱いが容易なユニコードを使用することをお奨めします。)
1つのクライアントアプリケーションから、複数のデータベースをオープンできます。(同じデータベースを複数開くことも可) この時、オープンするスレッドがすべて同じ場合で、かつ、接続先が同じサーバー内のデータベースであれば、1つのコネクションをすべての データベースアクセスで共有します。スレッドが異なる場合は、別なコネクションによって処理されます。
また、明示的に別のコネクションによる接続開始を指示することもできます。これを使うと、コネクションプールの作成などを容易 に行うことができます。明示的に別のコネクションを作成する方法は database::connect()を参照してください。
C言語のクライアントインターフェースはBTRVCALLID関数1つのみで、関数のプロトタイプ、オペレーション番号などはBtrieve API互換となっています。 最小限の変更で、既存のBtrieveアプリケーションをTransactdへマイグレーションできます。
C++インターフェースは、Cインターフェースを呼び出します。Cインターフェースとの動的バインディングにより ほとんど同じコードでTransactdとPSQL(Btrieve APIを含むアクティアン社(旧 Pervasive Software社)のデータベース)の両方のデータベースにアクセスできます。
2つのデータベースでサポートするAPIの種類や振る舞いの違いについては各リファレンスにて内容を記載しています。
クライアントの開発に使用できる言語は、現在C、C++、Ruby、PHPとCOMコンポーネントを利用できる言語です。 C、C++、Ruby、PHPはLinux、Windowsの両方、COMコンポーネントはWindowsで利用可能です。COMコンポーネントは C#をはじめVB、Delphi、PHP、JScript、VBScript、PowerShellなど多くの言語から利用可能です。
Ruby、PHPとCOMインターフェースはC++インターフェースのラッパーで、クラスとメソッドはほとんど同じです。リファレンスはC++のものを参照してください。
PHPインターフェースはphp_transactd.so
が提供します。 インストールすると、 PHPのextension_dirに配置されます。また、php_transactd.so
が提供するAPIをPHPのクラスにまとめたtransactd.php
がinclude_pathに配置されます。
transactd.php
はphp_transactd.so
を通じC++インターフェースのso(DLL)を呼び出します。
基本的なクラスとメソッドはC++APIとほぼ同様です。C++との違いについては開発者ガイドを参照してください。
Rubyインターフェースはtransactd.so
が提供します。gemでインストールできます。 transactd.so
は内部でC++インターフェースのso(DLL)を呼び出します。
基本的なクラスとメソッドはC++APIとほぼ同様です。C++との違いについては開発者ガイドを参照してください。
COMインターフェースはtdclatl.dll
が提供します。
tdclatl.dll
は内部でC++インターフェースのdllを呼び出します。
.NetからCOMインターフェースを使用する場合は最初に[参照設定]にCOMのtransactd
コンポーネントを追加します。基本的なクラスとメソッドはC++APIとほぼ同様です。C++との違いについては開発者ガイドを参照してください。