* この投稿は、米国時間 9 月 24 日、Solutions Architects である Sandeep Parikh と Peter-Mark Verwoerd によって投稿されたもの(投稿はこちら)の抄訳です。


このシリーズの目標は、クラウドのワークロードがどのような料金になるかをはっきりさせ、コストに関する理解を深めていただくことです。


今回は、Google Compute Engine で NoSQL データベースを実行したときの料金に関する前回の投稿の続きです。クラウド内のマネージド NoSQL データベースの料金について説明します。

ここでいう“NoSQL”の意味については、前回の投稿をご覧ください。NoSQL データベースは、何でないかではなく何なのかによって定義されます。NoSQL データベースは、従来のリレーショナル データベースとは異なります。NoSQL とリレーショナルは異なる問題を解決するために異なる機能を持っているので、両者を交換できるものとして説明しようとするとおかしなことになります。しかし、NoSQL データベースの分類に使える広いカテゴリはあります。


データベースの概要

Google Cloud Bigtable は、Google Cloud Platform 上の新しいマネージド NoSQL データベースとして 2015 年にリリースされました。Bigtable は、BigQuery が社内用のツールである Dremel としてスタートしたのと同じように、社内ツールとして生まれました。Google は社内ツールとして Bigtable を長年使ってきており、2006 年には Bigtable のホワイトペーパーを公開しています。Bigtable は NoSQL データベースという市場を生み出したデータベースの 1 つで、いわゆるワイドカラム ストアです。このタイプのデータベースには、一般に次の 2 つの特徴的な機能があります。

  • 行ごとではなく、列ごとにデータを格納します。
  • カラムをグループにまとめたスーパーカラム ファミリーを持ちます。通常、グループ化はスキーマ作成時に定義され、スキーマに構造を与えます。

以上を除けば、ワイドカラム データベース、そして Cloud Bigtable は、ほかのキーバリュー ストアと機能的にはよく似ています。Cloud Bigtable が重点を置いているのは、高速でスケーラビリティのきわめて高いデータベースを完全にマネージドな形でお客様に提供することです。

Amazon DynamoDB は、Amazon の第 2 のマネージド NoSQL サービスとして 2012 年にリリースされました。第 1 のサービスである SimpleDB は 2007 年から提供されています。DynamoDB はスキーマレスなデータ ストレージのキーバリュー ストアで、すべての値はキーをインデックスとする値という形で格納されます。DynamoDB は、Amazon 社内で開発され使われてきた Dynamo の原則を基礎としています。Dynamo については、2007 年の論文で説明されています。


データベースの料金計算

Cloud Bigtable の料金は、ノードあたりの料金と、格納されているデータ量に対する料金の 2 つのパラメータによって決まります。このうち、ノード数に対する料金はそのままの意味です。ストレージに対する料金は、ストレージタイプとして SSD と HDD のどちらを選ぶかによって変わります。Cloud Bigtable は現在のところベータであり、SSD しか選択できないようになっているため、比較では SSD の料金を使わなければなりません。

DynamoDB も、格納されているデータ量に基づいて料金を設定しています。料金設定にノードの概念はありませんが、バックエンドの複数のパーティションにまたがってデータを格納しているので、1 秒あたりの読み書き操作の数に基づく料金があります。しかし、AWS の読み書き料金の計算では、次の 3 つの要素を考えに入れなければなりません。

  • DynamoDB では整合性(一貫性)のあるデータか結果整合性のあるデータを読み出せますが、料金が異なります。結果整合性なら半額になります。
  • 読み書きに対してオンデマンドでの支払いをすることができます。
  • DynamoDB リザーブド キャパシティ(RC)を購入できます。
RC を選択してあらかじめ特定の料金を払っておくと、使った容量に対する料金が割安になります。EC2Redshift のリザーブド インスタンスと同様に、RC の契約は 1 年か 3 年になります。


データベースのサイズ変更

2 つのデータベースを比較するにあたって重要なのは、両者をどのようなパラメータで比較するのかということです。

Cloud Bigtable の最小のクラスタは 3 ノードです。個々のノードが 10,000QPS(クエリ/秒)の能力を提供するので、3 ノードのクラスタでは 30,000QPS となります。この料金はスカラーです。つまり、ノード数が 3 倍になると料金も 3 倍になります。このサイズとパフォーマンスのクラスタでは、比較のポイントとして妥当なところでしょう。

30,000 のクエリは Cloud Bigtable に対する読み出しか書き込みなので、DynamoDB でクエリがどのように読み書きに分かれるのかを決める必要があります。料金を計算するためには、読み書きの回数を指定しなければならないのです。話を単純にするために、半分に割って読み出しが 15,000、書き込みが 15,000 ということにします。

最後に、格納するデータの大きさについて考えなければなりません。どちらのサービスも、データ ストレージに対して階層的な料金設定にはなっていません。そこで、このサンプルではそれぞれに 10TB ずつ格納するものとします。


料金の比較

計算は 2015 年 9 月 4 日に行い、結果をこの投稿に記載しました。この投稿の公開後に料金や計算プログラムが変わっているかもしれないので注意してください。

また、AWS は DynamoDB の料金見積もりプログラムを公開していますが、RC の計算が含まれていません。必要に応じて RC の料金をこちらで計算して数字に組み込んでいます。

以下に示す料金は、特に断りのない限り月額です。

Cloud Bigtable での見積料金:  $3,164.30
内訳は、ノードに $1,423.50、ストレージに $1,740.80

DynamoDB(オンデマンド)での見積料金:  $11,353.88
内訳は、プロビジョニングした容量に $8,550.13、ストレージに $2,803.75

単純にオンデマンドで実行した場合、Cloud Bigtable の方がはるかに割安です。ストレージでは Cloud Bigtable の方が $1,000 安く、操作では DynamoDB が 6 倍になっています。この種の比較を行うとき、ワークロードには非常に大きな散らばりがあるので、パフォーマンスについて結論を導き出すのは難しくなることがあります。この場合、サービスのパフォーマンス特性は料金に組み込まれています。そこで、同じようなパフォーマンスのデータベースでは、Cloud Bigtable の料金は DynamoDB の 3 分の 1 未満だということができます。ここで“同じような”と言っているのは、まったく同じではないからです。

Cloud Bigtable にはどんな種類の操作でも可能という柔軟性があり、どの操作でも料金は同じです。そのため、アプリケーションが読み出しの多いものでも、書き込みの多いものでも、料金は同じになります。それに対して DynamoDB では、操作によって料金が変わります。読み出しよりも書き込みの方が高く、整合性のある読み出しの方が結果整合性のある読み出しよりも高くなります。

それでは、すべての読み出しが結果整合性なら料金がどれくらい変わるかを見てみましょう。こうすると、DynamoDB 利用時のパフォーマンスは確実に変わりますが、それによって料金はなるほどと感心するほど下がるのでしょうか。

DynamoDB(オンデマンド、読み出しはすべて結果整合性)での見積料金:  $10,641.37
内訳は、プロビジョニングした容量に $7837.62、ストレージに $2803.75

結果整合性の読み出しだけを使ったとしても、Cloud Bigtable の料金に大きく近づくわけではありません。ちなみに、100% 読み出し、100% 結果整合性の読み出しの場合も計算してみました。そうすると、今までの額よりもさらに下がりましたが、Cloud Bigtable の料金よりも安くなるわけではなく、そもそもこのようなユースケースは現実的ではないので、ここには掲載しません。

しかし、DynamoDB には RC 料金があります。それも見てみましょう。

DynamoDB(1 年契約の RC)での見積料金: 
月額: $4,480.89*
前払い額: $26,955.00**
実質月額: $6,727.14***

実質月額の内訳は、プロビジョニングした容量に $3,923.39、ストレージに(今までと同じですが)$2803.75 です。こうすると、DynamoDB の料金はほとんど半額近くに下がり、実際にプロビジョニングした容量の価格は半額以下になります。しかし、これでも Cloud Bigtable の月額よりもまだ高い額です。そして、容量のロックインのために前払いで $25,000 も余分に払わなければなりません。

最後に、3 年契約の RC の料金を見ておきましょう。

DynamoDB(3 年契約の RC)での見積料金: 
月額: $3,867.03****
前払い額: $32,346.00*****
実質月額: $4,765.53******

実質月額の内訳は、プロビジョニングした容量に $1,961.78、ストレージにまた同じ $2,803.75 です。前払いで $32,000 も余分に支払って 3 年分もロックインしても、パフォーマンスで $500、ストレージで $1,000 も余分に支払わなければならないのです。

このシリーズの第 1 部では資本コストについて説明しました。そこでも明らかにしたように、ほとんどの企業には年 7% の資本コストがかかっています。その分、DynamoDB を使うコスト全体に $7,000 近く($6,792)が加算されます。


まとめ

今回の内容はお役に立ったでしょうか。別々のクラウド プラットフォームで料金を見積もるのは難しいことです。ここでは、計算方法をわかりやすくすることを目的として書きました。Cloud Bigtable は、NoSQL ワークロードのオプションとして、前払い額もなく長期的に縛られることもないのに、低料金だということがおわかりいただけたでしょう。Cloud Bigtable は、提供する価値はもとより、お客様のニーズにぴったり合わせてスケーリングできます。詳細は、ドキュメント、「Cloud Bigtable のパフォーマンスを理解する」、「時系列データのための Cloud Bigtable のスキーマ設計」などを参照してください。

コメント、アイデア、質問などは、petermark@google.comparikhs@google.com にお送りください。お便りをお待ちしています。


* DynamoDB は、最初の 25 の読み込み容量ユニット(RCU)と書き込み容量ユニット(WCU)を無料としています。
Amazon は、1 か月を 732 時間として計算します。私たちもそれを使って計算しています。
1 年契約 RC 時間単価(読み) = $0.0025/100 RCU. ((15000 - 25)/100) * 0.0025 * 732 = 274.04
1 年契約 RC 時間単価(書き) = $0.0128/100 WCU. ((15000 - 25)/100) * 0.0128 = 1403.1
1403.1 + 274.04 + 2803.75 = 4480.89

** 1 年契約 RC 前払い額(読み) = $30/100 RCU. ((15000 - 25)/100) * 30 = 4492.5
1 年契約 RC 前払い額(書き) = $150/100 WCU. ((15000 - 25)/100) * 150 = 22462.5
4492.5 + 22462.50 = 26955

*** (26955/12) + 4480.89 = 6727.14

**** 3 年契約 RC 時間単価(読み) = $0.0016/100 RCU. ((15000 - 25)/100) * 0.0016 * 732 = 175.39
3 年契約 RC 時間単価(書き) = $0.0081/100 WCU. ((15000 - 25/100) * 0.0081 * 732 = 887.9
175.39 + 887.9 + 2803.75 = 3867.03

***** 3 年契約 RC 前払い額(読み)= $36/100 RCU. ((15000 - 25)/100) * 36 = 5391
3 年契約 RC 前払い額(書き) = $180/100 WCU. ((15000 - 25)/100) * 180 = 26955
5391 + 26955 = 32346

****** (32346/36) + 3867.03 = 4765.53


- Posted by Peter-Mark Verwoerd and Sandeep Parikh, Google Solutions Architects