ビッグデータの保存コスト: クラウドでビッグデータを保存する最も安価な方法とは？

データをクラウドに移行することにはさまざまなメリットがありますが、特に重要なのは**価格**です。残念ながら、クラウドにデータを保存するための正確なコストを計算するとなると、複雑な価格設定や、ジョブを実行するために必要なリソース数を予測するのが難しいため、少し面倒な作業になることがあります。

クラウド・ストレージ・コストの問題について、ビッグデータのロギングを例にして説明してみましょう。この場合、ビッグデータをクラウド上に保存するには、データベースに直接保存する方法、ログファイルをアップロードする方法、S3/CloudFront経由でロギングする方法の3つの方法があります。この記事では、ビッグデータをクラウド上に保存すると実際にいくらかかるのかを説明し、より良い見積もりができる手助けになればと思います。


#ビッグデータを保存する際の価格の前提条件
まず、価格設定モデルにいくつかのパラメータを設定する必要があります。もちろん、これはあらゆる全ての状況を反映するものではありませんが、この演習の目的のために、いくつかの簡単な仮定を設定したいと思います。

ここでは、次のような前提条件を設定します。

- Amazon Web Services、米国東部地域
- 24時間365日の利用、1年間の予約インスタンス、ヘビー利用
- 1日あたり10億ログ行、1ログ行あたり平均1,000バイト、1日あたり合計1テラバイト、1ヶ月あたり30テラバイト
- 保管費用のみ（加工は含まれていません）
- [AWS Pricing Calculator](https://calculator.aws/?utm_source=xp&utm_medium=blog&utm_campaign=content#/://aws.amazon.com/)を使用して計算された価格（すべての価格は米ドル表示）

繰り返しになりますが、これらはあくまでも目安です。顧客のニーズはここに記載されているものとは異なる場合があり、パフォーマンスの調整により必要なハードウェアが変更される場合があります。クラウドでデータを収集する場合は、どの方法を使用しているのか、どのくらいの費用がかかるのかをお気軽にお知らせください。

#データベースにビッグデータを直接保存する
AWSでは、クラウド上でリレーショナルデータベースを運用するための2つのオプションが用意されています。Relational Database Service (RDS)と、Elastic Compute Cloud (EC2)にカスタムインストールする方法です。どちらの場合も、ログを収集、生成、保存するためのログサーバーが必要になります。

##Log Server
ログサーバーは、1日あたり10億件のログ、つまり平均して1秒間に約11,000件のログを処理できるようにしなければなりません。一部の企業では内製のソリューションを使用していますが、開発と保守には多くの時間と費用がかかります。そこで、[Fluentd](https://www.fluentd.org/?utm_source=xp&utm_medium=blog&utm_campaign=content)のような既製のロガーとプラグインを使ってデータベースと統合してみましょう。

Treasure Data（Fluentdの主要な貢献者）のCTOである[Kazuki Ohta氏](https://www.quora.com/syslog/Has-anyone-done-any-comparative-study-on-syslog-ng-rsyslog-Scribe-and-Flume-in-regards-to-throughput-If-one-is-planning-to-use-any-of-these-systems-as-merely-a-transport-mechanism-that-is-almost-realtime-in-nature-what-should-one-pick?utm_campaign=content&utm_medium=blog&utm_source=xp)によると、「FluentdはIntel Xeon L3426（4Core HT 1.87GHz）で1コアあたり18,000メッセージ/秒の処理が可能 」とのことです。つまり、Intel Xeon E5-2686 v4 (Broadwell) プロセッサ (4 vCPU) を搭載した 4 つの Amazon EC2 r4large インスタンスと、30.5 ギガバイトの RAM があれば、ピーク時を含めたロギングやデータベースへのデータ書き込みを処理するのに十分すぎるほどの性能を持っているはずです。

1年間予約されたインスタンスの1時間あたりのレートは$0.168で、4インスタンスの場合、4 \* $0.168 \* 24 \* 365、年間約$5,900となります。

しかし、いくつかの追加料金が発生する可能性があります。

US Eastから別のAWSリージョンに30テラバイトのデータを転送する場合、1ギガバイトあたり0.02ドル、または0.02ドル \* 30 \* 1000 = 600ドルかかります。
インスタンス間のバランスを取るためには、弾力性のあるロードバランサーが必要になります。Amazonによると、ロードバランサーのコストは1時間あたり約0.0225ドル、フルタイムで稼働している場合は1ヶ月あたり約16ドルです。

| 項目 | 金額 |
|:-----------|------------:|
| 4 Amazon EC2 r4.xlarge instances       | $5,900 / year        |
| Data transfers      | $7,200 / year        |
| Elastic Load Balancer      | $200 / year        |
| **Total**	     | **\$13,300**   / year      |


##Amazon RDS
まず、Amazon RDSについての注意点です。RDSデータベースには[6416テラバイトのストレージ制限](https://aws.amazon.com/about-aws/whats-new/2019/05/amazon-rds-mysql-mariadb-postgresql-64tib-support/?utm_source=xp&utm_medium=blog&utm_campaign=content)があり、今回の例のニーズには小さすぎるということです。Amazon RDSをシャーディングに利用するオプションもありますが（詳細は[こちらのリンク](https://aws.amazon.com/blogs/database/sharding-with-amazon-relational-database-service/?utm_source=xp&utm_medium=blog&utm_campaign=content)を参照してください）、この記事では他のより適切なオプションに焦点を当ててみます。

##Elastic Compute Cloud (EC2)
EC2上でMySQLを実行するには、多くのスペースが必要です。ストレージを最適化したd2.8xlargeインスタンスで合計48テラバイトのストレージが必要です。毎月30テラバイトのデータが生成されるので、1ヶ月半ごとにもう1つのインスタンスが必要になり、1年を通して合計8つのインスタンスが必要になります。オンデマンドで作業してスケーリングを続けるよりも、1年間前もって予約しておいた方が安く済みます。d2.8xlargeインスタンス1つのコストは、1時間あたり3.216ドル、1ヶ月あたり2,300ドル、1年あたり28,000ドル程度です。年間8つのインスタンスを使用した場合、約225,000ドルになります。

残念ながら、インスタンスを停止するとデータがすべて失われてしまいます（仮想マシンを再起動するとデータは残りますが）。それを確実に維持するためには、Amazon EBSがプロビジョニングしたIOPSのSSDボリュームが必要です。

より手頃なオプションとしては、1ヶ月分の生データと古いデータの集計のみを保存し、残りはS3にアーカイブするという方法があります。ログファイルを1:4の比率でgzipすることができるので、1ヶ月間のローカルストレージは7.5テラバイト(=30TB/4)で十分です。S3の場合、このコストは月に約170ドル、年間では約13,700ドルです（最初の7.5テラバイトは12ヶ月、次の7.5テラバイトは11ヶ月など）。必要なのはd2.8xlargeインスタンス1つだけで、上記のように年間28,000ドルのコストがかかります。

これらのコストを合わせると、ビッグデータをデータベースに直接保存するためには、1年あたり55,000ドルかかると見積もることが出来ます。

| 項目 | 金額 |
|:-----------|------------:|
| Log Server      | $13,300 / year        |
| S3 Storage      | $13,700 / year        |
| d2.8xlarge instange      | $28,000 / year        |
| **Total**	     | **\$55,000**   / year      |

#ログファイルアップロード
この場合、データはS3やDynamoDB、Redshiftに継続的にアップロードされる大きなログファイルとして保存されます。

##Log Server
ログサーバーの要件は、データをデータベースに保存するのではなく、ファイルとして保存することを除けば、先ほどの方法と同じです。上記の価格を参照してください。

##S3
S3の標準ストレージで月7.5テラバイトの場合、1ギガバイトあたり0.023ドルです。先に計算した通り、1ヶ月あたり約170ドル、1年あたり約13,700ドルとなります。これにログサーバのランニングコストを加えて、合計で約3万ドル/年となります。(各ファイルは68バイトしかないので、透明な画像ファイルのストレージのコストはわずかです)

##DynamoDB
DynamoDBでは、データの保存にかかる費用は月に1ギガバイトあたり0.25ドルとなっています。DynamoDBで月30テラバイトのデータを保存している場合、コストは大体月に7,700ドル、年間では60万ドル強になります。ログサーバーのコストと合わせると、年間613,300ドルになります。

##Redshift
年間で360テラバイトを利用するには、ds2.8xlargeのインスタンスが23個必要になります（それぞれ16TBの容量）。1年間予約して前払いした場合、約790,000ドルの費用がかかります。

もっと費用対効果の高いオプションは、2つのds2.8xlargeインスタンスを使用して1ヶ月分のデータを保存し、残りをAmazon S3にアーカイブすることです。コストは約69,000ドルで、1年間の期間の前払いで、上記で計算したS3のコストを加えたものになります。

ログファイルをアップロードするための費用は、合計で年間9万6千ドルとなります。

| 項目 | 金額 |
|:-----------|------------:|
| Log Server      | $13,300 / year        |
| S3 Storage      | $13,700 / year        |
| d2.8xlarge instange      | $69,000 / year        |
| **Total**	     | **\$96,000**   / year      |


#S3/CloudFront ロギング
この方法は、S3ディレクトリから画像へのHTTPリクエストを介してイベントを追跡し、自動的にログを生成します。余分なロギングサーバーを必要とせず、1ヶ月あたり7.5テラバイトのストレージしか必要としません。先に計算したように、S3で月7.5テラバイトのストレージを使用すると、年間で約13,700ドルになります。

CloudFrontも使わないと、クエリ文字列経由でのロギングなどの機能は使えません。CloudFrontのGETリクエストのコストは10,000リクエストあたり0.0075ドルです（価格は[こちら](https://aws.amazon.com/cloudfront/pricing/?utm_source=xp&utm_medium=blog&utm_campaign=content)）。10億回のHTTPリクエストであれば、1日あたり750ドル、年間では約27万ドルのコストがかかります。

従来は S3 へのリクエストにも料金がかかりますが、キャッシングヘッダを設定している限り、これらの料金は最小限に抑えられます。透過画像へのアクセスには68×10億バイトのデータ転送が必要で、1日あたり68ギガバイト、1ヶ月あたり2040ギガバイトになります。S3からの外部へのデータ転送は1ギガバイトあたり0.02ドルで、1ヶ月あたり約40ドル、1年あたり約500ドルとなります。

これらのコストを足し合わせると、S3/CloudFrontのロギング経由でビッグデータを保存する場合の合計価格は284,200ドル/年になります。


| 項目 | 金額 |
|:-----------|------------:|
| S3 Storage      | $13,700 / year        |
| CloudFront Requests	| $270,000 / year| 
| CloudFront Data Transfers      | $500 / year        |
| **Total**	     | **\$284,000**   / year      |

#ビッグデータの保存：まとめ
おさらいとして、ここまで説明してきた上記の方法のそれぞれの総費用は以下の通りです。

| 項目 | 総費用 |
|:-----------|------------:|
|Directly the Database|	$55,000 / year|
|**Uploading log files to S3**|	**\$30,000** / year|
|Uploading log files to DynamoDb|	$613,000 / year|
|Uploading log files to Redshift|	$96,000 / year|
|S3/Cloudfront Logging|	$284,000 / year|

これらの分析に基づいて、ログファイルをS3にアップロードする方法が、ビッグデータをクラウドに保存するための最も安価な方法です。他の方法と比較し、S3/CloudFrontのログはかなり高価です。

もちろん、これはビッグデータをクラウドに保存するためのコストを計算する方法の一例に過ぎません。自社のビジネスニーズや目的に応じて、マイレージは異なる場合があります。最も重要なことは、この計算式にはいくつかの大きな未知数があるということです。DBAや開発者の実装・保守にかかる費用は含まれておらず、データ処理にかかる費用も含まれていないためです。

とはいえ、この概要が、クラウドにデータを保存するためのコストを見積もる上での参考になれば幸いです。

#ビッグデータ・ストレージについて助けが必要ですか？
ビッグデータのワイルドで複雑な世界において助けが必要ですか？ここでは、あなたがすべき2つのことをご紹介します。

まず、ブログ記事**「[データウェアハウス製品 Best 17とその価格について](https://www.xplenty.com/jp/blog/17-best-data-warehousing-tools-and-resources-ja/)」**をチェックしてください。
第二に、データストレージを最適化する方法についてXplentyにオンラインデモに申し込み、相談してください。XplentyのクラウドベースのETLソリューションは、自動化されたデータフローを構築するためのシンプルで視覚的なデータパイプラインを提供し、企業が必要とするインサイトを提供します。ぜひ[オンラインデモ](https://try.xplenty.com/jp-demo?utm_source=xp&utm_medium=blog&utm_campaign=whats-the-cheapest-way-to-store-big-data-on-the-cloud-ja)を申し込み、無料トライアルを試してみてください。