DBオンラインリアルイベント開催!
3月13日開催 DB Online Day―ニッポンを強くする!データ活用の未来!
ニッポンのデータ活用を徹底討論!情シスの理想と現実とは?
後援:日本データベース学会/協賛:日立製作所、ウィングアーク1st、富士通
→詳細、お申込みはこちら
ミッションクリティカルに欠かせないデータベース技術「パーティショニング」
吉村 さて、今月も始まりました、「規子のうどんでGO!」
長江 そんな連載ではありません。
吉村 えっ、じゃあ、今まで一体何の話をしてきたんですか……。
長江 今までもこれからも、ミッションクリティカルなデータベースについて話しています。
吉村 拝承。
長江 ちなみに今回のテーマは「パーティショニング」です。
吉村 うどんのたとえで説明していただきたく。あと、そろそろ新しい日立用語をテーテーしていただきたく。
長江 それはもうちょっと待っていただきたく。パーティショニング、何となく分かりますよね?
吉村 テーブルを分割するってやつですよね。何となくは知ってるつもりなんですけど、実は詳しくは知らなかったりします。
長江 大規模システムやミッションクリティカルなシステムの設計・開発に携わったことがない方だと、パーティショニングという言葉自体は聞いたことがあっても、実際に触る機会はあまりないかもしれません。実際、一般的なリレーショナルデータベース製品では、パーティショニングの機能はオプション扱いになっていることが多いですしね。
吉村 確かに、パーティショニングの機能を上手に扱えるデータベース技術者は「上級者」というイメージがあります。
長江 そうですよね。でもHiRDBのように、そもそもミッションクリティカル用途を前提に作られているデータベース製品では、パーティショニングって割と普通に使われているんですよね。
吉村 そもそも、なぜパーティショニングはミッションクリティカルなシステムで多く使われているんでしょう?
長江 第1回でも説明したように、ミッションクリティカルなシステムで使われるデータベースは、高負荷トランザクションに耐えられなくてはいけません。パーティショニングもそのための機能の1つなんです。具体的には、表を複数に分割することで、ある特定のエリアのデータに対するアクセスが集中してボトルネックになるような事態を未然に防いだり、ある特定のエリアの障害やメンテナンスがシステム全体に及ぼす影響を最小化するための技術です。
吉村 ちなみにパーティションって、パーティ・ションっていう人が発明したって知ってました? 嘘ですけど。
長江 ……前回、データの処理を複数のサーバに分割して並列処理させることで、高負荷トランザクションに対応できることを説明しましたよね。でも、サーバをいくらたくさん並べて並列処理しても、それらが皆同じ巨大なテーブルにアクセスするのでは、アクセス競合が頻発してボトルネックになってしまいます。これを回避するには、テーブルを複数のパーティションに分割して、それぞれでアクセスを均等化してやればいいわけです。
吉村 なるほど。うどん店のたとえで言うなら、うどんの長さをぴったり同じにそろえれば商売繁盛間違いなしということですね!
長江 全然違います。強いて言えば、うどんを茹でる鍋を複数用意するというイメージでしょうか。厨房でうどんを茹でる料理人をいくらたくさんそろえても、鍋が大鍋1個だけだと明らかに非効率ですよね?
吉村 確かに。注文はばらばらに入ってきますし、茹でる人も複数いるので、大鍋1個だけだと茹でる量の調整が難しそうですし、作業の待ち時間も発生して無駄が多そうです。
長江 その点、小さめの鍋を複数並べて同時並行で茹でた場合は、複数いる調理人が常に無駄なく稼働できますし、ランダムに入ってくる注文にも柔軟に対応できます。それに、もし何らかの事情で鍋を交換しなくてはいけなくなった場合でも、大鍋を丸ごと交換となるとその間オーダーを完全にストップしなくてはいけませんが、小鍋に分けていればほかの鍋で茹でてる間にさっと交換できます。空の鍋を常に用意しておけば、鍋に問題が起きたときや、茹汁を交換したいときなどにすぐ交換できますし、何なら予備の鍋を常に火にかけて準備しておけば、ほぼ時間のロスなく交換できます。
吉村 それって、まさに「コールドスタンバイ」と「ホットスタンバイ」ですね!
長江 その通りです。パーティショニングは、大規模データベースの運用性や可用性を担保する上でもとても有効な技術なんです。