DBWEB2005 特別セッション：
OSSコミュニティとの連携
Firebirdの概要

Agenda Firebirdの歴史
 Firebirdの概要

 Firebirdのロードマップ
 Firebirdの入手方法
 Firebird日本ユーザー会について

Firebird日本ユーザー会
加藤 大受
本資料はFirebird日本ユーザー会のWebサイト（http://firebird.gr.jp）より入手可能ですcopyright(c)2005 Firebird日本ユーザー会

copyright(c)2005 Firebird日本ユーザー会

Firebirdの登場
 FirebirdとはFirebirdの歴史

copyright(c)2005 Firebird日本ユーザー会

Firebird Foundation
 会費制でFirebird Projectを支援する団体
 Firebird Foundationの目的 オープンソースのFirebirdリレーショナル・データベース・エンジンの開発を支援し促進すること。
 非商用のインフラ及び機構を提供すること、それらによって資金を受け入れて運用すること。これらの資金を、開発を促進させるために支出すること。
 関連する個人、他の非営利団体及び営利企業の交友関係と共同作業を強化すること、また、Firebirdソフトウェア、関連する製品群及び諸活動における、開発、サポート及び振興への参加を立案すること。
copyright(c)2005 Firebird日本ユーザー会

 2000年7月25日にInprise Corp.(現在のBorlandSoftware Corp.)がＩｎｔｅｒＢａｓｅ 6.0のソースコードをInterBase Public Licenseにて公開され、このソースコードをベースにプロジェクトがスタート
 オープンソースのFirebird Projectにて開発
 2002年3月12日にInterBase 6.0とフルコンパチブルのFirebird 1.0がリリース
 2004年2月21日にFirebird 1.5がリリース
 現在、新バージョンであるFirebird 2.0 β１版を開発中

copyright(c)2005 Firebird日本ユーザー会

Firebirdのベースとなっている
InterBaseとは？
 Borland Software Corp.が開発・販売
 全世界で累計出荷本数100万本以上
 バージョン
 1983年 Version 1.0
 1986年 Version 2.0
 1988年 Version 3.0
 1992年 Version 3.3(インターナショナル版)
Version 3.2J(初めての日本語版)
 1994年 Version 4.0
 1997年 Version 5.0
 2000年 オープンソース版InterBase V6.0
 2001年 Version 6.5
 2003年 Version 7.0
 最新版はInterBase 7.1
copyright(c)2005 Firebird日本ユーザー会

1

Firebirdの歴史（参考資料）
 参考URL インターベースロードマップ（木村明治翻訳） http://www.geocities.jp/kimura804/rdb/cva
lde/IbRoadmap_j.htm

Firebirdの特徴

 How InterBase came to be（林 務翻訳） http://tech.firebird.gr.jp/firebird/index.php?firebird_xsite=34

copyright(c)2005 Firebird日本ユーザー会

copyright(c)2005 Firebird日本ユーザー会

Firebirdの概要

Ｆｉｒｅｂｉｒｄの概要

 ライセンス 簡単なインストールと環境設定

 InterBase Public License v.1.0
 InterBase 6.0をベースにしているモジュール

http://firebird.sourceforge.net/index.php?op=doc&id=ipl

 Initial Developer's Public License. (IDPL) Firebird Projectが追加した新規のモジュール

http://firebird.sourceforge.net/index.php?op=doc&id=idpl

 両ライセンスともMozilla Public License v.1.1
をベースにしており、商用利用も可能性

copyright(c)2005 Firebird日本ユーザー会

 簡易なインストーラを装備

 データベースの初期サイズの設定が不要 ユーザー領域、ロールバック領域、テンポラリ領域の設定が不要（ページサイズの指定は可能）
 １つのデータベース（ｆｄｂ）の中にデータページ、インデックスページ、ディクショナリが格納されている。
 ガーベージコレクション
 クエリオプティマイザを搭載
 経済的な設計（スモールフットプリント）

copyright(c)2005 Firebird日本ユーザー会

Ｆｉｒｅｂｉｒｄの概要

Firebirdの概要

 インデックスのガーベージコレクション

 Multi-Generational Architecture（MGA) OS の不安定さをカバーする Guardianプロセス
 同一バージョンでのデータベースの完全な互換性
 他のプラットフォームからのデータベースファイルのコピーで対応可能

 マルチデータベースファイル対応
 OSのファイル制限回避のため

copyright(c)2005 Firebird日本ユーザー会

 各行はユニークなトランザクションIDを保持
 行の更新が行われるとサーバは新しいトランザク
ションIDとともに新しいバージョンの行をディスクに書き込み、古いバージョンとのデルタに変換する。
 データを書き直すのではなく、常にデルタを格納

copyright(c)2005 Firebird日本ユーザー会

2

Firebirdの概要

Firebirdの概要

 トランザクション
 デフォルトトランザクション

 Transaction ID(TID)

READ WRITE WAIT ISOLATION LEVEL SNAPSHOT

アクセスモードREAD ONLYREAD WRITE



ロック対応



排他レベル

WAITNO WAIT

 TIDは32bit integer 1秒間に100トランザクションの場合、1年4ヶ月11日2時間30分でTIDがオーバーフローしてしまう
 TIDをリセットするためにはバックアップ／リストアが必要となる

 CURRENT_TRANSACTION変数でTIDの取得が可能

SNAPSHOTSNAPSHOT TABLE STABILITY
READ COMMITTED [[NO]RECORD_VERSION] 表ロック WITH LOCK句の指定

copyright(c)2005 Firebird日本ユーザー会

Firebirdの特徴

INSERT INTO T1(TID,C1,C2)
VALUES(CURRENT_TRANSACTION,’1234’,’ABCD’);

copyright(c)2005 Firebird日本ユーザー会

Firebird の特徴
 イベントアラータ

 安定性
 商用製品(InterBase 6.0)をベースにしており、非常に安定したアーキテクチャを採用
 他のオープンソースRDBMSと異なり、頻繁なリビジョンアップがない。

 データの更新をイベントとしてクライアントに伝える Firebird の独自機能

 サブプロジェクトでQAを実施

copyright(c)2005 Firebird日本ユーザー会

Firebirdの特徴
 UDF(ユーザー定義関数)
 Delphi,C++などで簡単にユーザー定義関数の作成が可能で、組み込みも容易 多次元配列

copyright(c)2005 Firebird日本ユーザー会

Firebird の特徴
 シャドウデータベース
 データベースのミラーリング機能
 同一サーバ内でミラーデータベースの作成が可能。
サーバが自動的にツーフェーズコミットで書き込み

 16次元までの配列をサポートするデータ型
 Blob フィルタ
 サブタイプを変換するライブラリを登録しておくことでJPEG <-> GIF などの変換が可能

copyright(c)2005 Firebird日本ユーザー会

copyright(c)2005 Firebird日本ユーザー会

3

Firebirdの特徴

GUI管理ツール（IBOConsole) 統一されたアーキテクチャ
 Firebirdのすべての機能がDLLとして提供されているシングルサーバのEmbedded ServerからServerプラットフォーム版まで統一機能が提供されている
 シングルユーザ向けとマルチユーザ向けの製品を同一ソースで開発が可能

copyright(c)2005 Firebird日本ユーザー会

copyright(c)2005 Firebird日本ユーザー会

Firebird対応のミドルウェア
 Jaybird

Firebird対応のミドルウェア

 タイプ4のJDBCドライバ
 最新バージョンは2.0
 XAインタフェースにも対応

 Firebird .Net Data Provider
 .Net対応ドライバ（C#で書かれている）
 最新バージョンは1.6.3

 IBPhoenix Firebird ODBC Driver 最新バージョンは1.2.1
copyright(c)2005 Firebird日本ユーザー会

copyright(c)2005 Firebird日本ユーザー会

Firebird対応ミドルウェア

Firebird対応のミドルウェア

 Delphi／C++Builder用のコンポーネント

 PHP

 IBObjects
 http://www.ibobjects.com/
 Jason wharton氏が開発し、有償でソースコード付で販売されている

 FIBPlus http://www.devrace.com/en/fibplus/ ロシアのDevrace社が開発・販売

copyright(c)2005 Firebird日本ユーザー会

 InterBase関数を利用することで対応可能
 Windowsの場合
 extension=php_interbase.dll

 UNIX／Linuxの場合
 configure時に --with-interbase=/opt/firebirdを付けてPHPのコンパイルを行う

 その他の言語
 Perl, Zope, Rubyなどのスクリプト言語でも利用することが可能
copyright(c)2005 Firebird日本ユーザー会

4

Firebird関連のツール

その他のプロジェクト

 IBOConsole

 Fyracleプロジェクト

 フリーのFirebird／InterBase用の管理ツール
 http://www.mengoni.it/downloads.html
 日本語UI対応

 Marathon
 フリーのFirebird／InterBase用の管理ツール
 http://alanti.net/firebird/marathon/

copyright(c)2005 Firebird日本ユーザー会

 Janus Software社が開発しているOracleのPL/SQLをFirebirdに移植するコンパイラとランタイム
 コンパイラは有償、ランタイムはフリーライセンス
 Janus Software社Fyracleについて(英文) http://www.janussoftware.com/fb_fyracle.html

copyright(c)2005 Firebird日本ユーザー会

Firebird 1.0

Firebirdのロードマップ 2002年３月にリリース
 InterBase 6.0と100%の互換性
 リリースプラットフォーム：
 Windows, Linux, FreeBSD, Solaris,
MacOS X, AIX, HP-UX Linux版は glibc 2.2系(Red Hat 7.3,AS 2.1,SuSE Linux 8)

copyright(c)2005 Firebird日本ユーザー会

copyright(c)2005 Firebird日本ユーザー会

Firebird 1.5

Firebird 1.5

 2004年3月にリリースされた最新版
 Firebird 1.0からの変更点

 SQLの改良
 「CASE」句、「COALESCE」句、「NULLIF」句をサポート
 「GROUP BY」句への以下の機能をサポート

 ファイル名の変更 メモリ効率の改良
 メモリ上でのソート機能を実装
 新しいメモリマネージャの実装

 SuperServer版でXNETプロトコルの対応
 ローカル共有メモリの利用

 Class版でのSMP対応の強化
copyright(c)2005 Firebird日本ユーザー会

 内部関数 サブクエリー 列のエイリアス名
 数値（列の位置）

 「SELECT FIRST X」と「ORDER BY」をサブクエリーでサポート
 SELECT文での明示的ロックのサポート
 SELECT ... FOR UPDATE WITH LOCK EXECUTE STATEMENT文のサポート
 トリガー・プロシージャでのSAVE POINTのサポート

copyright(c)2005 Firebird日本ユーザー会

5

Firebird 1.5

Firebird 2.0

 仕様改良 2005年１１月１１日にβ 01リリース
 ODSバージョンが11に変更
 ６４ビットプラットフォームのサポート
 レコード番号の対応

 1テーブル64インデックスの制限を撤廃
 メタデータのコンパイルのタイミングの変更

 ソースコードをCからC++へ変更

 40bit (内部は64-bit)のレコード番号に対応し、30GBのサイズ制限を撤廃

 Raw Deviceの対応
 Raw Deviceにデータベースの格納が可能

 ガーベジコレクションの改良 バックグランド処理対応

copyright(c)2005 Firebird日本ユーザー会



copyright(c)2005 Firebird日本ユーザー会

Firebird 2.0

Firebird 2.0

導出テーブルのサポート

 CREATE SEQUENCE構文

SELECT<select list>
FROM<table reference list><table reference list> ::= <table reference> [{<comma> <table reference>}...]<table reference> ::=<table primary>| <joined table><table primary> ::=<table> [[AS] <correlation name>]| <derived table><derived table> ::=<query expression> [[AS] <correlation name>][<left paren> <derived column list> <right paren>]<derived column list> ::= <column name> [{<comma> <column name>}...] SQL:1999のCREATE SEQUENCE構文のサポート
 CREATE GENERATORからの移行を推奨
 構文
CREATE { SEQUENCE | GENERATOR } <name>
DROP { SEQUENCE | GENERATOR } <name>
SET GENERATOR <name> TO <start_value>
ALTER SEQUENCE RESTART WITH <start_value>
GEN_ID (<name>, <increment_value>)
NEXT VALUE FOR <name>copyright(c)2005 Firebird日本ユーザー会

copyright(c)2005 Firebird日本ユーザー会

Firebird 2.0

Firebird 2.0

 EXECUTE BLOCK構文 DSQLで使用できる名前のないプロシージャ
 構文
EXECUTE BLOCK [ (param datatype = ?, paramdatatype = ?, ...) ][ RETURNS (param datatype, param datatype, ...) }AS[DECLARE VARIABLE var datatype; ...]
BEGIN
...
END
copyright(c)2005 Firebird日本ユーザー会

Procedure SQL 名前付きカーソルをサポート
構文
DECLARE [VARIABLE] <cursor_name> CURSOR FOR( <select_statement> );OPEN <cursor_name>;
FETCH <cursor_name> INTO <var_name> [, <var_name> ...];
CLOSE <cursor_name>;
Example:DECLARE RNAME CHAR(31);
DECLARE C CURSOR FOR ( SELECT RDB$RELATION_NAME FROMRDB$RELATIONS );BEGINOPEN C;
WHILE (1 = 1) DO
BEGIN
FETCH C INTO :RNAME;
IF (ROW_COUNT = 0) THENLEAVE;SUSPEND;
END
CLOSE C;END

copyright(c)2005 Firebird日本ユーザー会

6Firebird 2.0
 CROSS JOIN構文の追加
 ROW句の追加

SELECT ...
[ORDER BY <expr_list>]
ROWS <expr1> [TO <expr2>]

 CURRENT_TIMESTAMP関数およびNOW関数
がミリ秒単位に変更
 GROUP BY句で任意の式に対応

GROUP BY
SUBSTRING(CAST((A * B) / 2 AS VARCHAR(15)) FROM
1 FOR 2)

 ORDER BY句で列番号に対応

SELECT * FROM RDB$RELATIONS ORDER BY 9copyright(c)2005 Firebird日本ユーザー会

Firebird 2.0
 インデックスの拡張
 Firebird 1.5までの252バイトのインデックス長を撤廃し、ページサイズまで対応可能
 インデックスページへの物理データ格納を廃止し、インデックスはレコード番号を保存 インデックスの再構築問題への対応

 セキュリティの強化
 ハッシュアルゴリズムをDESからSHA-1に変更

copyright(c)2005 Firebird日本ユーザー会

Firebird 2.0

Firebird 3.0

 Win32 Local Protocol: XNET デフォルトプロトコルになった Classicサーバへの接続も可能 Services API
 ClassicサーバへのServices API組込の完了
 WAITトランザクション
 TIMEOUTの設定が可能
 isc_tpb_lock_timeout
 LIKE演算子の改良
 BLOBでも正しく動くようになった Knuth-Morris-Pratt(KMP)アルゴリズムを採用
 Blob内の文字列検索などが早くなった

 Firebird 3.0=Firebird 2.0+Vulcan
 スケラビリティの向上

copyright(c)2005 Firebird日本ユーザー会

 64ビットCPUの対応
 クラスタリング対応

 Java VMの搭載
 Javaプロシージャのサポート

copyright(c)2005 Firebird日本ユーザー会

Firebirdの入手方法
 FirebirdのオフィシャルWebサイト

Firebirdの入手方法

 http://firebird.sourceforge.net
 ソースコード、製品バイナリ、ミドルウェアの入手が可能

copyright(c)2005 Firebird日本ユーザー会

copyright(c)2005 Firebird日本ユーザー会

7

Firebird日本ユーザー会

Firebird日本ユーザー会について

 2004年4月に設立
 国内におけるFirebirdのさらなる浸透を促進するための非営利・中立な任意団体
 これまでの実績
 2004年6月

 第１回セミナーの実施

 2004年9月

 オープンソースカンファレンス2004出展
 Project Administratorのニコライ氏を招へいし、テクニカルセミナーを実施
 ニコライ氏へのインタビューの実施

 http://www.itmedia.co.jp/enterprise/articles/0409/1
6/news085.html

copyright(c)2005 Firebird日本ユーザー会

copyright(c)2005 Firebird日本ユーザー会

Firebird日本ユーザー会
 現在の活動
 Webページでの技術情報の配信 http://www.firebird.gr.jp
 メーリングリストの提供
http://groups.yahoo.co.jp/group/Firebird-jp-general/ セミナーの実施 日本語による技術情報の提供
copyright(c)2005 Firebird日本ユーザー会

これからもFirebirdおよびFirebird日本ユーザー会をよろしくお願いします。

copyright(c)2005 Firebird日本ユーザー会

8