BT

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

| 作者: Jonathan Allen フォローする 530 人のフォロワー , 翻訳者 徳武 聡 フォローする 0 人のフォロワー 投稿日 2011年2月20日. 推定読書時間: 2 分 |

原文(投稿日: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のシャーディングが可能になる。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT