• 検索結果がありません。

開発者視点でみたMySQL

ドキュメント内 untitled (ページ 63-72)

(2008年11月GA)

8. 開発者視点でみたMySQL

8−1. Oracle開発者向けポイント(1 / 2)

SQL標準(JIS/ANSI/ISO準拠)にのっとっていない、Oracle特有のSQLがMySQLには通り ません。(外部結合の(+) 記号、Merge文、Decode関数等)

Oracleは「空文字 (ʼʼ)」と「NULL」が同じ扱いですが、MySQLは違うものとして扱われます。

MySQLはデータベース名とテーブル名の大文字小文字を区別する(Case Sensitive) 設定 があります。Unix系OSの場合、デフォルトでは区別する設定

(lower̲case̲table̲names =0)

と なっていますので注意が必要です。尚、他のオブジェクト(カラム名やSP名等)は常に区別さ れません。Oracleでは全て区別されません。

①外部結合の(+) 記号は、Left Outer Join句で代替可能です。

②Merge文はReplace文で代替可能です。

(厳密にはDelete>Insertとなり若干動作が異なります。)

③Decode関数はCase文で代替する事が可能です。

【解決策】

【解決策】

大文字小文字を同一として扱いたい場合、「lower̲case̲table̲names =1」を指定 してください。尚、ディスク上のテーブルファイル名等は小文字で保存されます。

【解決策】

特に区別する要件がない場合は、アプリケーション全体で、「NULL」もしくは「空文

字列(ʼʼ)」のどちらかに統一する事で混乱が回避できます。

8−1. Oracle開発者向けポイント(2 / 2)

MySQLは数値型のPrimaryキーがない場合、Rowidが参照できません。

デフォルトのトランザクション分離レベルが異なります。Oracleは「Read Commited」、MySQL

(InnoDB)は「Repeatable Read」。

MySQL(InnoDB)は行ロックをサポートしますが、Update時のWhere句カラムにIndex張られて いない場合、テーブルロックとなるので注意が必要です。

MySQLアプリケーション開発や、マイグレーション時に、上記のような軽微な違いがクリティ カルとなる場合があるので注意が必要です。

【解決策】

Primaryキーは可能な限り数値型で設定してください。

【解決策】

MySQLの初期化パラメータ 「transaction-isolation = READ-COMMITTED」を設定する事で 標準分離レベルを「Read Commited」とすることが可能です。

また単一セッション内のみ変更する場合は、MySQLクライアントから

「SET TRANSACTION ISOLATION LEVEL READ COMMITTED」を発行する事で可能です。

【解決策】

Where句となりうるカラムには全てIndexを作成してください。

(総件数が少ないものはこの限りではないです。)

8−2.MySQL コネクタ

Connector/J

Connector/NET

Connector/PHP

クライアントプログラムから MySQLサーバへ接続するドライバである、MySQL コネクタについてご紹介します。

Connector/ODBC 

MySQL用JDBCドライバです。JDBC APIを利用してMySQLへアクセスします。

GPLライセンスのオープンソースソフトウェアとして提供されています。

HibernateやSpringのようなフレームワークと連携して利用できます。

MySQL用ODBCドライバです。ODBC APIを利用してMySQLへアクセスします。

MS ACCESSからの利用も可能です。

.NET アプリケーション用のADO.NET ドライバです。ADO.NET インターフェイスを実装し、ADO.NET 対 応ツールを統合します。100% 純粋な C# で書かています。

また、MySQL Visual Studio プラグインも用意されていますので、Visual Studioにデータベース保守 ツールを組込む事も可能です。

PHP用の MySQL APIです。2つの異なるものを利用できます。(両方を同時に利用する事も可能)

Mysqlエクステンション : MySQL 4.1より前のバージョンで使用することを目的としたものです。

Mysqliエクステンション: MySQL 4.1以降のバージョンで使用でき、mysqlエクステンションよりオブ

ジェクト指向のプログラムインターフェースとなります。

8−3.MySQL 全文検索

「含む検索」(where col like ʻ%keyword%ʼ)はIndexが利用できないため、全表検索となり速度低下の原因となります。

MySQLが標準で持つFull TEXT Indexを利用する事(但しMyISAMのみ)で、全文検索が可能となりますが、標準では日本 語をサポートしていません。MySQLで日本語全文検索を利用したい場合、Tritonnを導入する事で可能となります。

3table結合時(300万件+ 900万件+900件) 条件table単体(300万件)

参考処理速度 Mysql 5.0.67

0.17 sec 0.09 sec

検索キーワード1文字

0.01 sec 0.02 sec

検索キーワード2文字

検索対象キーワードは、 Wikipediaのタイトル100万語から頭9文字を切り出し登録。3倍に増幅(300万件)してN-gram方式 でIndex登録した。登録テーブルに対して、全文検索を行い、5行をランダムで抽出した場合の速度。ハードウェア環境につい ては「 1−3. 」と同様の環境となります。

参考速度(Tritonn利用時)

Tritonn (SennaのMySQLバインディング)について

全文検索エンジンである「Senna」をMySQLに組込みこんだTritonnを利用する事で、標準のFull Text  Index検索用SQLで日本語全文検索が可能となります。日本語全文検索は主に2つの方式があります。

‡形態素解析方式:辞書登録された形態素(単語)で分ち書きを行う方式です。「MeCab」エンジンを利用します。

辞書のメンテが必要となります。形態素に一致しない単語は検索されませんが、適合率が高 いです。(ユーザの意図しない検索結果が出にくい)

‡N-Gram方式 :単語を「N文字」ずつ分割してIndex登録する方式です。検索時の条件も同じように分割して Indexスキャンするため全て検索されますが、ユーザが意図しないキーワードが検索結果として 表示される可能性があります。(例:「京都」で検索した場合に、「東京都」も検索される。)

Tritonnプロジェクト URL:http://qwik.jp/tritonn/

【参考資料】 その他サードパーティ製品

† InnoDB Hot Backup

InnoDB のホットバックアップ用ツール

− ソフトウェアライセンスとサポートサービス

Sunより購入可能 (SLAはInnobase社の定義)

http://www.innodb.com/wp/products/hot-backup/

† ZRM − Zmanda Recovery Manager

Web管理コンソールを備えたバックアップユーティリティソフトウェア ストレージエンジン毎に最適なバックアップ方法を選択

バックアップ時の圧縮・暗号化にも対応

Sunより購入可能

http://www-jp.mysql.com/products/backup/zrm.html

† DRBD Plus

DRBDの拡張パッケージで有償版。

最大3台までのコンピュータのディスク内容をリアルタイムでミラーする、

Linux向けのソフトウェアソリューション。比較的低速なWAN回線でのミラーリング に対する最適化機能も備えており、ローコストにディザスタリカバリ・システムを 構築できます。

SmartStyleより購入可能

http://www.s-style.co.jp/mysql̲support̲service/mysql̲ha/drbd.html

【参考資料】MySQLライセンスの比較

Knowledge Base Enterprise

Monitor ライセンスへ 課金単位

専用バイナリ の同梱 InnoDB

ライセンス 課金単位 商用

ライセンス

サーバ

同梱

(サーバ)

※1 MySQL Enterprise

サーバ

同梱

(サーバ)

× ※1 MySQL Enterprise

(GPL)

追加機能/サービス 年間サポート

バイナリ ライセンス

※1 MySQL Enterpriseは技術サポートとライセンスが一体の年間サブスクリプションです。

標準ではGPLライセンスのバイナリを提供する。追加費用なしでGPLを外す事も可能(商用ライセンスのバイナリの利用)

GPLを外す場合、手続きに3〜4週程度の期間がかかる。

・VMwareなど、仮想で複数OSを持つサーバでは、MySQLが動作する仮想OS毎にライセンス購入が必要。

・ブレードサーバは1台(1エンクロージャ)につき、1ライセンスとなる。但し、上記の仮想OSの考え方と同様に、MySQLが動作する OSがブレードサーバ内に複数稼動していれば、稼動OS分だけライセンスが必要となる。

・Coldスタンバイ、Hotスタンバイにかかわらず、物理的に1サーバであれば、1ライセンスとしてカウントする。

・仮想環境、またはブレードサーバにおいては、Coldスタンバイ分はカウントされない。同時稼動するOS数分だけライセンスが必要となる。

„

MySQL Enterprise Server

・有償顧客専用バイナリ

※SUN:「標準はGPLライセンス → 無償で商用ライセンスに変更可能」

„

MySQL Enterprise Monitor (日本語版あり) MySQL統合監視ツール

„

技術サポート

・英 語・・・レベル分けにより24×7 対応

・日本語・・・2008年4月9日より、日本法人にて日本語で応対開始(平日9:00〜17:00)

„

メンテナンスアップデート

„

アップデートアラート・テクニカルアラート

„

Knowledge Base : ナレッジベース

„

Indemnification : 知財(著作権や商標が管理されているため)訴訟に関する補償

„

基本価格体系

・サーバー数・年単位

商用ライセンスを選択した場合でも、契約期間終了時点で契約を更新していなければ、

ライセンスは自動的にGPLに切り替わるので注意ください。

【参考資料】MySQL Enterprise 詳細

Webアプリやエンタープライズ環境向けサービスの年間サブスクリプション契約。

サブスクリプションのサービスレベルはBasic, Silver, Gold, Plutinumの4種類

【参考資料】ライセンス単位課金の計算方式について(2009年4月確認)

„ サーバ単位課金ライセンスの計算方法について

①サーバに搭載されるCPU数及びコア数についての考え方

1サーバあたりのコア数やCPU数に制限はない。但し、複数CPUを積んでもリニアにスケールとは限らない。

②仮想環境(VMWare、Xen、HyperV等)の考え方

1サーバホスト上に、MySQLが稼動する複数の仮想OSがある場合、MySQLが稼動する仮想OSの数分カウントする。

但し、Coldスタンバイ用の仮想OSのように通常稼動していない仮想OSの考え方は、同時に稼動している仮想OS数となる。

(Hotスタンバイ機は「同時に稼動している仮想OS」に含まれる。)

例: 1サーバホストに、仮想OSとして以下が稼動している場合、5ライセンスの購入が必要 Windows2000server × 1 ⇒1ライセンス

Windows2003server × 1 ⇒1ライセンス

RHEL5.2 × 2 (Coldスタンバイが1) ⇒1ライセンス SUSE Linux Enterprise 11 ×2(Hotスタンバイが1) ⇒2ライセンス

③ブレードサーバの考え方

ブレード1枚単位ではなく、エンクロージャ単位で1サーバとする。

但し、1サーバ内で稼動OSが複数ある場合は、上記の仮想環境と同じ考え方が適用される。

⇒同時に稼動しているOS数分のライセンス購入

④スタンバイ機について

Coldスタンバイ、Hotスタンバイにかかわらず、物理的に1サーバであれば、1ライセンスとしてカウントする。

この場合、上記仮想環境の考え方と異なり、同時に稼動しているOS数とはならない。

但し、スタンバイ機用の価格割引ライセンスが存在する。

現在変更されている可能性もありますので、ご購入検討時に再確認いたします。

ドキュメント内 untitled (ページ 63-72)

関連したドキュメント