NewSQLデータベースは、RDBMSとの一定の互換性を保ちつつ、RDBMSの弱点であったスケールアウトによる拡張を実現するデータベースとして注目されている。本稿では、RDBMSとNewSQLデータベースの違いを明確にしたうえで、NewSQLデータベースを効果的に活用するためのポイントを解説する。
RDBMSとNewSQLデータベースの違い
スケールアウトとは、システムの処理能力を増強する際に、サーバ単体の性能を向上させる(スケールアップ)のではなく、サーバの数を増やすことで対応する方法である。稼働中のサーバを停止させずに実施することができるため、スケールアップに比べサービスの停止時間を短くすることができるというメリットがある。スケールアウトは、特にインターネット・アプリケーションのような24時間サービスを求められるシステムでは有効だが、RDBMSのスケールアウトには以下に述べる制約があるため、アプリケーションのデータベース層においてはスケールアップが一般的となっている。
RDBMSでのスケールアウト方法には、レプリケーションとシャーディングの2つがある(図1)。
出典:ITR
レプリケーションは、データベースのコピーを複数のサーバに配置することでスケールアウトを実現する。元となるデータベースは”マスター”、そしてコピーされたデータベースは”レプリカ”と呼ばれ、マスターに対して行われたデータの更新がレプリカに反映される。レプリケーションでは、データの読み込みは複数のサーバに負荷が分散されるが、データの書き込みはマスターのみに行われるためスケールアウトにより得られる効果はない。
一方、シャーディングは、データベースを複数の”シャード”に分割し、それぞれを別のサーバに配置することでスケールアウトを実現する。シャーディングでは、データの書き込みについてもサーバ間での負荷分散が可能になるが、分割したサーバが1台でも停止するとデータベースが利用できなくなり、可用性が失われる。
これに対して、NewSQLデータベースでのスケールアウトは、レプリケーションとシャーディングを組み合わせることで実現する(図2)。データベースを複数のシャード(リーダ)に分割し分散配置したうえで、シャードごとに他のサーバにレプリカ(フォロワー)を作成する。これにより、データの書き込みについても複数のサーバに負荷が分散されるだけでなく、可用性も確保することができる。
出典:ITR
NewSQLデータベースは、このようにRDBMSの弱点であるスケールアウトによる拡張を可能にするが、その一方でデメリットも存在する。NewSQLデータベースはレプリケーションとシャーディングを同時に行うため、複雑なデータ管理によるオーバーヘッドが大きい。したがって、サーバ数が少ない構成では期待されるパフォーマンスは得られず、より大規模なシステムでなければスケールアウトの効果が発揮されない。
また、NewSQLデータベースは、アプリケーションのデータベース層においてRDBMSの代わりに使用することを前提としているため、RDBMSとの互換性が要求される。しかし、RDBMSとの完全な互換性が保証されるわけではなく、ストアドプロシージャ、トリガー、表単位でのロックといったRDBMSでは一般的な機能が実現されていない場合もある。このような非互換性は製品によって異なるため、必要な機能範囲を特定したうえで製品を選定する必要がある。