MySQLとは

MySQLは、オープンソースのリレーショナルデータベース管理システム(RDBMS)で、オンプレミスまたはホストプロバイダーを介して簡単に実装、管理ができます。また、MySQLは、複数の同時書き込み操作をサポートし、複製によって拡張できます(ただし、複雑さが増すこともあります)。この理由に加え、メンテナンス/拡張の費用が比較的安価なことから、主に本番環境向けデータベースとして使用されています。

1994年に開発されたMySQLは、RDBMSの中でも最も確立されており、開発当時から目覚ましく進化しています。90%のウェブサイトがMySQLを使用しています。そのなかには、YouTube、Twitter、ウィキペディア、 Facebookなどの最大手サービスも含まれます。

データベースとしてMySQLを選択する理由

オープンソース機能

MySQLは、オープンソースのソリューションとして構築されているため、コモディティハードウェアにデプロイできるうえ、拡張費用も予測可能です。また、MySQLは幅広い互換性を備えているため、よりカスタマイズされたソリューションにいつでも切り替えられます(競合するトランザクショナルデータベースの多くは、まさにこの目的のためにMySQLに対応しています)。

高パフォーマンス

MySQLは、より速く走れるよう後部座席をなくしたレースカーのようなデータベースです。MySQLの開発者は、機能よりも速度とパフォーマンスを優先させるという決断を下しました。そのため、他のトランザクショナルデータベースのカテゴリーのプロバイダと比較して、MySQLにはより多くの制限があるにもかかわらず、より速いデータベースとなっています。

可用性と拡張性

高可用性と拡張性を実現するために複製し、分散するMYSQLの機能は非常に強力です。ただし、より高度な可用性と拡張性が得られる代わりに、複雑さとコストが増す点には注意が必要です。

MySQLが実際に役立つ事例

ウェブアプリケーション

MySQLは、主にウェブアプリケーション向けに設計されています。特に最適なのは、構造化され適切に設計されたウェブアプリケーションです。オラクルは、MySQLがウェブアプリに適したソリューションである理由について説明する、素晴らしいリソースを作成しています。

熟練したデータチームを持たない若い企業

MySQLは、その信頼性やユビキタス性、パフォーマンスにより、小規模な企業やスタートアップ企業に真っ先に選ばれがちなデータベースです。また、MySQLは、分析データベースとして使用するための本番環境のMySQLデータベースの複製を簡単に構築できるため、魅力的なオプションとなっています。MySQLは市販のデータベースシステムのなかでも最も文書化が進んでおり、しっかりした開発者コミュニティがあるほか、数多くのベンダーにより販売されています。

MySQLホストのオプションと料金

MySQLのソフトウェアはオープンソースで、無料でダウンロードできます。また、さまざまなクラウドベンダーにより提供されています。

オンプレミスでのMySQLのデプロイ

オンプレミスでデプロイすると、MySQLソフトウェアを無料でダウンロードしてデプロイできます。ただし、運用の総コストは割り当てるハードウェアに大きく左右されます。ディスクの空き容量、CPU、メモリが増加すればコストはより高くなります。サーバーのストレージと専用メンテナンスにかかるコストは、セルフホスト型MySQLソリューションに伴う追加費用です。

クラウドでのMySQLのデプロイ

クラウドでMySQLをホストすると、オンプレミスソリューションの場合ほど管理は複雑になりませんが、透明性と制御性の面で若干劣ります。

MySQLのプロバイダは数多くあります。クラウドホスト型の大手プロバイダには以下が含まれます。

Amazon RDS

Amazon RDSのオンデマンド料金は、最小のインスタンスで1時間あたりわずか数セントからです。長期契約の場合は、この料金は大幅に低くなります。Amazonは、「データベースインスタンスの可用性と耐用性を高める」というマルチアベイラビリティゾーンのデプロイを提供しています。ストレージ費用は含まれておらず、毎月GB単位で料金が計算されます。 これには、バックアップ用ストレージの追加料金はかかりません。

Google Cloud SQL

Googleでは、Cloud SQL(GoogleのMySQLサービス)向けに2種類の料金プランを用意しています。第1世代は完全なパッケージとして提供されるか、従量課金制です。第2世代はインスタンス実行中に1分ごとに課金され、より多くの構成が可能です。
Googleの料金計算ツールを使用すれば、ニーズに合ったプランを見積もることができます。また、Googleは、最初の12か月間は無料で使用できる300ドル分のクレジットを提供しています。

Oracle Cloud

Oracle Cloudは、サービス稼働時間に対して1時間ごとまたは1か月単位で課金されるとても分かりやすい料金設定です。1時間単位のストレージ料金は段階別になっており、1GBにつき月額数セントからスタートします。月極めのストレージプランは1TBあたり月額30ドルです。外部へのデータ転送は、1か月単位で最初のGBを超えると追加料金が発生します。

MySQLのアーキテクチャ

MySQLのアーキテクチャは、複数のレイヤーで構成されています。

アプリケーションレイヤー

MySQLのアプリケーションレイヤーでは、異なるクライアントがMySQLに接続してクエリを発行します。MySQL WorkbenchやLookerなどのアプリケーションは、MySQLのアプリケーションレイヤーに接続してクエリを送信し、データベースへのユーザーアクセスを管理します。

クエリプロセッサ

基底にあるストレージからデータの読み取りと書き込みを行うためにアプリケーションレイヤーからクエリが発行されると、クエリプロセッサはクエリをデータベースが実行可能なクエリプランに変換します。

トランザクション管理

MySQLはACIDに準拠しています。つまり、一連のクエリをトランザクション内でカプセル化でき、そのすべてが成功するか、すべて失敗するかのどちらかになります。トランザクションマネージャーはこれを管理するために、COMMITコマンドを発行してそれぞれのトランザクションを実行します。トランザクションが失敗すると、トランザクションマネージャーは、ROLLBACKコマンドを発行して、失敗したトランザクションで先にデータベースに加えられたすべての変更を取り消します。

リカバリー管理

MySQLは非常に復元力が高く、リカバリマネージャーの役割は、障害発生時に直前の安定した状態にデータベースを復旧することです。データベース上で(開始以降)完了したオペレーションをすべてログに記録し、障害が発生するとログにあるすべてのコマンドを実行するため、データベースを直前の安定した状態に効果的に復元することが可能です。

ストレージ管理

ストレージマネージャーは物理ディスクからデータを取得し、結果をクライアントに提供するために必要なメモリリソースを割り当てます。

プラガブルストレージ

MySQLのRDBMSは、そのプラガブルなアーキテクチャにより、ストレージエンジンに関して他のトランザクショナルデータベースとは大きく異なります。MySQLのサーバーコアコードは、ストレージエンジンとは分離しているため、MySQL内のストレージエンジンはスワップイン/スワップアウトすることができ、ユーザーはニーズに合わせて柔軟にストレージをカスタマイズすることが可能です。

データベースのパフォーマンスは使用するストレージエンジンに大きく左右されるため、このことは重要です。MySQLのドキュメンテーションには、対応するストレージエンジンの詳しい一覧が記載されています。

互換性

MySQLは、BDBエンジンとInnoDBエンジン(デフォルト)の統合を使用したトランザクションをサポートするため、同時書き込みの処理がより安全になります。このことから、エンタープライズ環境に必要とされる機能を追加するというトレンドが生まれました。

MySQLは、Linux、Solaris、Windows、AIX、HPUX上で動作し、32ビットおよび64ビットのバージョンがあります。

MySQLは、MariaDBおよびAmazon Auroraとほぼ互換性があります。他の言語と同様に、若干の違い(Auroraはリードレプリカのみサポートするなど)はありますが、3つの言語は近い関係にあります。MariaDBのメリットのひとつは窓関数を提供していることで、MySQLはこれに対応していません。

データの種類

MySQLは、適切に構造化されたトランザクションデータと第3正規形で構造化されたデータを使用すると、パフォーマンスかより向上します。また、より小規模で完全に近いデータセットでもパフォーマンスが高まります。MySQLは、まばらなデータや幅広いテーブルを好みません。テーブルがまばらであるほど、書き込みは難しくなり、テーブルが幅広くなるほど、読み込みが困難になります。

MySQLは、大型のテーブルや、非常に大規模なデーブルまで対応可能ですが、複雑さとコストは大幅に増大します。MySQLは、インデックスに大きく依存しているため、実行するクエリのタイプを事前に知っておけば、パフォーマンスに大きな違いが出ます。

推奨される最大データサイズ

ハード制限はありませんが、10憶行を超える読み込みは推奨されません。InnoDBテーブルには、最大1017列のハード制限があります。

実装およびMySQLのパフォーマンスチューニング

MySQLの実装

MySQLのチューニングについては、本が一冊書けるほど情報がたくさんあります(こういった本があります)。

敢えて言うなら、ローカルでホストする場合は、カスタマイズのオプションがより多くなります(ただ、自分で自分の首を絞めることになります)。クラウドホスト型ソリューションを選ぶなら、Google Cloud Storage でアカウントを作成するか、Amazon RDSを使用してクラスタを構築すると、ほんの数分で利用開始にこぎつけることができます。これらはホスト型ソリューションであるため、独自のサーバーにデプロイする際に注意しなければならないことの多くは、自分で解決しなくてもよくなります。

トランザクションで使用される場合、新規データストリーミングの挿入が好まれます。また、バッチ挿入も可能です。

MySQLのメンテナンスと拡張

MySQLは、小規模なデータセットとワークロードに対しては設定なしにすぐ使用できます。データと並列処理の需要が増大すれば、MySQLはいくつかの方法で拡張できます。

レプリケーション:レプリケーションは、単一のMySQLインスタンスの下で複数のサーバーを構成する一般的な方法です。レプリカ(複製)はそれぞれ、特定のタスク向けにプロビジョニングされます。

レプリケーションには主に2つの種類があります。

  • マスタースレーブ型レプリケーション - データの書き込みを担当する1つの本稼働データベースと、マスターデータベースの読み取り専用レプリカである複数のスレーブデータベースがある点が特徴です。これにより管理者は、インスタンス上で同時読み取りを拡張できます。

  • マルチマスター型レプリケーション - マスタースレーブ型レプリケーションと似ていますが、書き込みの拡張と可用性の向上の両方を実現します。ただし、このレプリケーションシステムにより複雑さが増すため、レイテンシも増大します。

クラスタリング:クラスタリングは、読み取りと書き込みを拡張するために複数の異なるデータベース感にデータを複製するレプリケーションとは異なり、パフォーマンスを高めるためにデータ自体がさまざまなサーバーに分散されます。また、MySQLクラスタの実装には、MySQL NDB Clusterというクラスタリング専用のストレージエンジンの実装も必要です。

パーティショニング:パーティショニングは、データベーステーブルをより小規模なサブセットに分割してインデックスサイズを減らすことにより、パフォーマンスを高める方法の一つです。パーティショニングで好まれる方法の一つに、シャーディングというプロセスがあります。これは、テーブルを水平分割し、一つまたは複数のマシン上の異なるデータベース間にテーブルを分割する方法です。Pinterestは、MySQLデータベースをスケーリングしていることで知られています。Pinterestは、シャーディング、マスター・マスター型レプリケーション、クラスタリングを使用して、単一のMySQLインスタンスに非常に大規模なテーブルを分散しています。

アナリティクスを快適に

ビジネスインテリジェンス、ビッグデータ分析、顧客の360°ビュー。
Lookerはお客様のどんなニーズにもお応えします。当社のデータエキスパートにご相談ください。

デモをリクエスト