BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース SQL ServerとSQL Azureの分割とシャーディング

SQL ServerとSQL Azureの分割とシャーディング

原文(投稿日:2011/02/14)へのリンク

水平分割とシャーディングは巨大なデータセットを扱う開発者にとって重要な道具だ。SQL Serverのような現代的なデータベースサーバはテラバイトのRAMと数百の論理的プロセッサをサポートするが、単一のテーブルに保存できるデータのサイズには現実的な上限がある。ここで水平分割の出番だ。水平分割は単一のサーバでも複数のサーバでもできる。複数のサーバにまたがる分割は通常、シャーディングと言われる。

MicrosoftはSQL Server 2005でテーブルあたり1,000の分割ができるようにした。この形式の分割は単一のサーバ内で、単一の論理テーブルを複数のファイルグループに分割するために使われる。こうすることですぐにI/Oが改善する。スキーマの設計が優れているのなら、性能の他の側面も劇的に改善する。しかし、この方法は不都合なことも多い。単一のマシンに限られているので、効果的に適用するには強力なデータベースサーバとストレージエリアネットワークが必要だ。またハードウエアのコスト加えて、水平分割を行うにはエンタープライズまたはデータセンターのライセンスが必要だ。これらのライセンスの1プロセッサあたりのリテールの販売価格は27,495ドルと54,990ドルだ。

水平分割とシャーディングに興味があるのならSQL Server 2008を使った分割テーブルとインデックスストレージを読むといい。長い文書だが、SQL Serverのこれらの機能を使いたい開発者は必読だ。もちろん、比較対象の機能はDB2OracleSybase Adapter Server、そしてMySQLでも見つかる。

SQL Serverでは複数のサーバにまたがったデータの完全な分割はそのままでは行えない。ストアドプロシージャやサービス層のコードに必要なロジックを書けば実現できるが、そのようなアドホックな方法は製品の本当の要求に注力したいと思っている開発者を不幸にするだろう。SQL Serverの分散パーティションビューのような機能も使えるだろう。しかし、使い方は煩わしい。例えば分割用の列としてIDENTITY列とTIMESTAMPが利用できない。にもかかわらず、分割用の列は主キーの一部でなければならない。

SQL Azureは“フェデレーション”と呼ばれる仕組みを通じて分割を行う機能を提供する予定だ。一見すると素晴らしい効果が期待できる機能のようだが、SQL Azureでのフェデレーションはプレビュー版にもほど遠い。

それまでの間、SQL Serverを使い続けたい開発者はサードパティ製のツールを使ってチューニングすることができる。その中のひとつとして最近リリースされたEnzo SQL Shardライブラリがある。.NETのTask Parallelライブラリを基にしたこのライブラリをを提供するのはBlue Syntaxのオープンソースプロジェクトだ。このライブラリを使うことでSQL ServerとSQL Azureのシャーディングが可能になる。

この記事に星をつける

おすすめ度
スタイル

BT