drizzle

Webサイトに求められるデータベースを考える
Drizzleプロジェクトの目指すもの、その先を読む


株式会社ミクシィ
研究開発グループ
前坂 徹 (http://torum.net/)
2008/09/03

SQLiteではできないこと

 Drizzleのアナウンス後に目立ったフィードバックは、「軽量SQLデータベースを目指すのであれば、SQLiteで十分だ」という興味深い批判でした。

 確かに Drizzleは軽量SQLデータベースという点ではSQLiteと重なります。しかしながら、SQLiteは1つのファイルに対して操作を行う組み込みデータベースとして優れたものですが、サーバプロセスを持つわけでなく、われわれの目指すmassively concurrentな世界で使うべきものではありません。

 一方、DrizzleはWebアプリケーションとクラウドコンピューティングに適した、並列性に長けた高効率サーバプロセスを持つDBMSです。こういった面から、SQLiteとは異なるドメインに存在するプロジェクトであることがご理解いただけるかと思います。

MySQLそのものとの違いはどこにある?

 MySQLがWindows系OS向けにも提供されているのに対して、DrizzleはUNIX系のOSのみをターゲットにしており、そもそもWindows用のバージョンは存在しません。こうした点を含め、MySQLとの間での大きな違いをまとめると以下のようになるでしょう。

POSIX環境への絞り込み

 MySQLはさまざまな環境にポートされており、多様なエリアで活躍していますが、DrizzleはPOSIX環境にターゲットを絞り込んでいます。

通信系

 通信プロトコル関連ではUNIXソケットへの対応を取り除き、TCP/IPのみに削減しています。また、デフォルトのポートは4427を使うことになっています。これはIANAによって公式に割り当てられたポート番号です注3

注3)詳しくはIANAのドキュメントを確認ください。 http://www.iana.org/assignments/port-numbers

MySQL関連のスクリプトやデータベースを削除

 「script/mysql_install_db」などのスクリプトや、「mysql」などのシステムデータベースはDrizzleでは存在しません。これは、極力MySQLのINFORMATION_SCHEMAを作り直し、それを利用しようという動きから決定しました。

TIMEZONEサポートの削除

 DrizzleではTIMEZONEのサポートはなく、UTCを使用します。

ストレージエンジン

 Drizzle がデフォルトで使用するエンジンはInnoDBです。

 MySQLのパッケージに含まれるMERGEエンジンとFEDERATEDエンジンはDrizzleには含まれません。BLACKHOLEエンジンについては、デフォルトではインストールされませんが、configure時のオプションに--with-plugins=blackholeを指定することで、インストールできるようにしています。

データタイプ関連

 MEDIUMINTは存在せず、整数であればINTを使用します。これは、ハードウェア的にも、ユースケース的にも3バイトの整数を持つ意味がないに等しいという判断から削除されました。

 BLOB系では、TINYBLOB、MEDIUMBLOB、LONGBLOBなどが削除され、代わりにBLOBを使用します。理由はInnoDBを含め、モダンなストレージエンジンは、どのBLOBタイプを使ったとしても、内部的にはBLOBタイプにマッピングするからです。

 また、これらのタイプを削減することにより、パーサの処理性能が上がるという理由もあります。同様にTEXT型でも、TINYTEXT、MEDIUMTEXT、LONGTEXTが削除され、TEXT型に統一されています。また、Drizzleでは外部(自作など)のデータ型もプラグインとして使用できます。

 そのほかにも、空間系の型、YEAR型、MyISAM用のFULLTEXTインデックスなどが取り除かれています。詳しい内容は常時、開発 Wikiに反映していく予定です。

 現時点でデフォルトサポートするデータ型は表1のとおりです。

TEXT SET DATE INT(1、2、4、8バイトのみ)
BLOB ENUM DATETIME DOUBLE.
VARCHAR   TIME DECIMAL
VARBINARY   TIMESTAMP  

表1 現在サポートしているデータ型

データベース機能の削減

 Drizzle からは現在、ACL(アクセス制御リスト)、ビュー、ストアドプロシージャ、Prepared Statements、クエリキャッシュ、トリガなどの機能が取り除かれています。

 ただし、取り除いたとはいっても、デフォルトで使用できないだけであって、マイクロカーネルアーキテクチャを実現した際には、必要に応じて機能を復活させることができます(自分で高速なコンポーネントを書いてロードさせるなど)。現在、ACLをロード可能にする作業が、PAM(Pluggable Authentication Modules)を使って行われています。

 そのほかの変更はhttp://drizzle.wikia.com/wiki/MySQL_Differencesで閲覧できます。

次のページへ 2/3 次のページへ

 

 Index
Drizzleプロジェクトの目指すもの、その先を読む
  Page 1
・Drizzleとは
・プロジェクトはこうして始まった!
→ Page 2
・SQLiteではできないこと
・MySQLそのものとの違いはどこにある?
  Page 3
・プロジェクトは完全にコミュニティベース
・いますぐDrizzleを試すには

 



Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間