SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド

分析・集計処理の並列実行を複数の物理サーバーに拡張するには? アーキテクチャ2つのパターンを紹介

オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド 第5回


  • X ポスト
  • このエントリーをはてなブックマークに追加

シェアード・ナッシング・クラスタ

 各DBサーバーは自身の担当するストレージのデータにのみアクセス可能なアーキテクチャをシェアード・ナッシング・クラスタと言います。データベースの全データを何らかのルールにより分割し、各サーバーに担当させます。このデータの分割とサーバーへの割り当ては第3回で解説したパーティショニングの概念そのものです。

 ストレージは各DBサーバーに内蔵されるフラッシュ・メモリーやハードディスクの場合もありますし、ネットワーク・ストレージの場合もあります。DBサーバー内蔵ストレージ構成の場合、デバイスとの帯域を大きくとることができますが、DBサーバーの障害でアクセス不能なデータが発生します。また、DBサーバーの増減に対応しやすくするためにも、パブリック・クラウドで提供されるシェアード・ナッシング・クラスタはネットワーク・ストレージで構成される場合が多くなっています。

 各サーバーにデータを分割するパーティション・キーはDBMSによっては分散キーと呼ばれる場合もあります。パーティション・キーをどのようなアルゴリズムで分割するかには、値の範囲を指定するレンジ、文字列などの離散的な値の集合を指定するリスト、そして値をハッシュしたハッシュ・バケットで分割するハッシュがあります。どのアルゴリズムが適しているかは、どのような処理を実行させるのかに依存します。

 そのため、ある処理に最適化したパーティショニングが別の処理に対しては並列実行プロセス間の処理量の偏りが大きくなって並列化の効果が適切に出ないということもあり得ます。また、分析処理というのは「購買者の属性と商品」や「地域と商品」のように複数のデータ要素間の関係を調べることが多いため、大量データのジョイン処理が高速に実行できることが求められます。ですから、複数の表をフル・ジョインできるようにパーティショニングしてパーティションごとのジョインが1つのノード内で完結できるかも設計のポイントになります。

 シェアード・ナッシング・クラスタはデータのパーティショニングが処理にうまく適合したときに高い性能を発揮します。しかし、並列度を上げるためにDBサーバー・ノードを増設するとデータの再配置が必要になります。

データのパーティショニングがクエリーに適しているか
データのパーティショニングがクエリーに適しているか

 また、並列化する処理のアルゴリズムつまりSQL実行計画の途中の段階で各サーバー間でのデータ交換能力があるかも重要です。データ交換能力がない場合、単一ノード内で完結しない処理のデータはSQL実行計画の最終段階であるコーディネーター・ノードまで対象データを運び、そこで初めて他のノードが持っていたデータと結合されます。この場合、SQL実行計画の途中でデータを間引くことができません。そのため、このようなアーキテクチャではデータのパーティショニングがフル・パーティション・ワイズ・ジョインできるように配置できるかが処理時間に大きな影響をおよぼします。

 例えばOracle Databaseではシェアード・ナッシング・クラスタ構成のOracle Database Shardingとシェアード・エブリシング・クラスタ構成のOracle Real Application Clustersがありますが、Oracle Database Shardingの各シャード・データベース・ノード間はデータの交換能力を持っていません。各シャード・ノード内の並列実行と、コーディネーター・ノードを介した全シャード・ノードの並列実行は可能です。そのため各シャードに配分するデータのパーティショニングがフル・パーティション・ワイズできることを前提としています。シャード・ノード間のデータ交換能力がないため用途をオンライン・トランザクション処理に割り切っています。

 シェアード・ナッシング・クラスタはサーバー・ノードの台数を増やしやすいアーキテクチャではありますが、シェアード・ナッシング・クラスタに移行したらそれだけでアプリケーションの性能を上げられるかは判断できません。サーバー・ノード間のデータ交換能力の有無や、アプリケーションが発行する処理と適合するパーティショニングが可能であるのかといったことも検討する必要があります。

次のページ
シェアード・エブリシング・クラスタ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド連載記事一覧

もっと読む

この記事の著者

日下部 明(日本オラクル株式会社)(クサカベ アキラ)

 日本オラクル株式会社でOracle Databaseを担当するエンジニア。主にOracle Real Application Clustersを中心とする高可用性構成や性能チューニングの問題解決およびコンサルティングに従事。著書に「これは使えるOracle新機能活用術」(翔泳社)。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/15217 2021/11/24 18:03

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング