GridDB クラスタを構築する際には、オンプレミスでもクラウド上でも、事前にハードウェア要件を見積もっておくことが必要です。少なくとも、以下の3つのポイントについての見積もりが必要でしょう:
- メモリ使用量
- クラスタ内のノードの数
- ディスクの使用量
このブログでは、上記3つのポイントについて見積方法を説明しますが、これらの見積量は、GridDB のためだけのものです。OSやその他アプリケーションのためのメモリやディスクスペースは含まれていませんので、注意して下さい。
メモリ使用量
GridDBはインメモリ・データベースなので、メモリの使用量の見積もりが非常に重要になってきます。まず、取り扱うデータの行数と、1行が持つデータサイズを見積もります。これらの数字がデータベース全体のサイズの概算値になります。メモリ使用量は以下の式で見積られます。
メモリ使用量 = (行データサイズ × 取り扱う行数 ÷ 0.75) \ + (8 × 取り扱う行数) x (assigned index number + 2) ÷ 0.66 (byte)
少々複雑な式ですが、入力する数値にはある程度余裕を持たせておくことをお勧めします。
メモリ使用量の計算が終わったら、次はクラスタを構成するノード数を決定します。
それでは具体的な例を上げて、メモリ使用量を計算してみましょう。
こちらのブログで紹介した電力会社のアプリケーションを考えてみます。まず、行データサイズは100バイトとします。行数については、何個のセンサーを使うかに依存しますが、ここではざっくり10億行としましょう。すると計算式は
(100 bytes × 1,000,000,000 ÷ 0.75) + (8 × 1,000,000,000 × 6 ÷ 0.66) = 133333333333.3333 bytes + 72727272727.27273 = 202020202020.202 bytes = 202GB
よってこの例では、クラスタシステムに少なくとも200GB程度のメモリが必要です。
ただしこれは、全てのデータを”ホットデータ” としてメモリ内で処理する場合の値です。GridDB では、メモリでの高速処理と、ディスクでの低速処理を混在させることが可能です。この例では、仮に、頻繁にアクセスするデータは全データの半分ぐらいとし、残りの半分のデータはディスクで保存することにしましょう。すると、システムが必要な合計メモリ容量は~101GB 程度ですみます。
ノード数
ノード数を見積もるには、合計のメモリ使用量の情報が必要です。また、システムで複製するレプリカ数の情報も必要です。GridDB のデフォルトではレプリカ数は2になります。
ノード数 = (合計メモリ使用量 ÷ ノード毎のメモリ量) × レプリカ数
この見積もり値は、最低限の要件であることに注意して下さい。ある程度ノード数に余裕がある方が、ロードバランシングや高可用性の機能を使いやすくなります。
先程の例に戻って、各ノードのメモリ数を16GB とすると、必要なノード数は
(101 GB ÷ 16GB) x 2 = 13
つまり、13ノードとなります。
ディスク使用量
まず、GridDB によって生成されるファイルのサイズを見積もります。GridDB では、チェックポイントファイルと、トランザクションログファイルの2種類のファイルが生成されます。
これらの数値を正確に見積もるためには、ノードあたりのメモリ使用量を次の式で計算します:
ノードあたりのメモリ使用量 = (全メモリ使用量 × レプリカ数) ÷ ノード数 (bytes)
現在取り上げている例では:
(101GB x 2)÷13 = 15.53GB
この値を使って、チェックポイントファイルのサイズは、次の式で計算できます:
ファイルサイズ = ノードあたりのメモリ使用量 × 2 (bytes)
現在取り上げている例では:
15.53GB x 2 = 31.07GB
トランザクションファイルのサイズの見積もりはDBの更新の頻度に依存するので、少々複雑です。
行の更新の頻度を予測し、チェックポイント間のインターバル時間を設定する必要があります。ここで仮に、行の更新頻度を毎秒10,000 回し、チェックポイントのインターバル期間を、デフォルト値の1200 秒(20分) としましょう。トランザクションファイルのサイズは以下の式で計算できます。
ファイルサイズ = 行データサイズ × 行データ更新頻度 \ × チェックポイント間のインターバル (bytes)
現在の取り上げている例では:
100 bytes x 10,000 (frequency updates) X 1200 = 1200000000bytes = 1.2GB
ディスク使用量は、以下のように各予測値の合計になります:
ディスク使用量 = トランザクションログファイルサイズ \ + チェックポイントファイルサイズ \ + メモリに収まらないデータの合計サイズ
現在取り上げている例では:
31.07GB + 1.2GB + 15.53GB = 47.8GB
よって、今回の10億行のデータベースを取り扱う、メモリ合計100GB、13ノードのクラスタサーバーシステムでは、レプリカ数が2 の場合、1ノードあたり約50GB のディスクスペースが必要であることがわかりました。
合計のストレージ容量としては、約650GB となります。
これで、ハードウェア要件の概算が完了しました。さあ、実際にシステムを立ち上げてみましょう!
ブログの内容について疑問や質問がある場合は Q&A サイトである Stack Overflow に質問を投稿しましょう。 GridDB 開発者やエンジニアから速やかな回答が得られるようにするためにも "griddb" タグをつけることをお忘れなく。 https://stackoverflow.com/questions/ask?tags=griddb