時系列データの読み込み、保存、アーカイブ

このトピックでは、Google Cloud Platform を使用した時系列データの保存、読み込み、アーカイブの方法に関するベスト プラクティスに加えて、データの変換に関するヒントを参照することにより、データの分析とモデリングに焦点を当てることができます。

財務時系列ライフサイクル

時系列ライフサイクルは、複数のステージで構成されます。

データ収集

時系列で作業する前に、データを取得する必要があります。時系列データは、次のようなさまざまなソースから抽出できます。

  • 金融市場フィード。
  • 金融市場データ プロバイダから提供されるファイル。
  • 時系列データ用に加工可能な独自のログ。

抽出、加工、書き込み

抽出、加工、書き込み(ETL)プロセスは、1 つ以上のソースからデータを抽出して、適切な形式に加工し、データベースなどの最終保存先に書き込みます。

ライフサイクルの ETL ステージをセットアップする場合は、次の情報も決定する必要があります。

  • データをファイル形式で保存するのかデータベース形式で保存するのか。
  • ファイルまたはデータベースを構造化する方法。
  • 組織のメンバーに付与するアクセス権。

分析

分析は、間違いなく時系列ライフサイクルの最も重要なステージですが、このトピックの範囲外です。時系列データの分析方法については、次のチュートリアルを参照してください。

アーカイブ

時系列ライフサイクルの最終ステージには、あまり費用のかからない保存場所への古くなったデータやあまりアクセスされないデータのアーカイブだけでなく、不用なデータの削除も含まれます。

Cloud Platform での時系列ライフサイクルの管理

次のソリューションは、1 日あたり最大で数テラバイトのデータと数万のファイルを処理できる能力を備えたいつでも稼働可能なソリューションです。1 日あたり 10 TB を超えるデータを蓄積する場合は、Avere などの代替ソリューションをおすすめします。

財務データを扱う場合は常にセキュリティが重要になるため、時系列ライフサイクルの各段階でセキュリティに関する留意点を考慮する必要があります。このドキュメントでは、関連情報を提示しながらセキュリティのベスト プラクティスについて説明します。Cloud Platform は、さまざまな方法でデータの安全性、完全性、秘匿性を維持します。たとえば、送信中はすべてのデータが暗号化され、その後は Cloud Platform が ISO 27001、SOC3、FINRA、PCI に準じて処理します。

ストレージのベスト プラクティス

ETL プロセスの一環として、時系列データの保存場所を選択する必要があります。Cloud Platform には、Google Cloud Storage が付属しています。このプロダクトは、信頼性、性能、可用性の高い Google のインフラストラクチャでのデータ保存を可能にします。

時系列データの形式

データは、ファイルまたはデータベースを使用して表現できます。データベースは、一定期間にわたって大量のデータやクエリを処理する場合により良いアプローチになりますが、ファイルは、初めてのセットアップをより迅速に行うことができます。

このトピックで示す例では、ファイルベースのアプローチを想定していますが、Cloud Bigtable のマニュアルで、時系列データベース スキーマの設計方法の詳細を参照できます。

ファイルとディレクトリの規則

既存のファイル システムの使用が確立されている場合は、ファイルとディレクトリの既存の命名規則を遵守し、POSIX インターフェースを使用してファイルにアクセスする必要があります。

新しいシステムの場合や、システムに命名規則を変更する柔軟性がある場合は、次のベスト プラクティスを考慮してください。

ディレクトリ構造

1 日以上を単位として時系列データを分析する場合は、月次ディレクトリを収集して管理することをおすすめします。月次ディレクトリは、1 か月間に数百個のファイルが生成される場合にうまく機能しますが、その量を超えると、アクセス オペレーションが遅くなる可能性があります。

また、日次ディレクトリのように 1 か月間に複数のディレクトリを作成することもできますが、ディレクトリの数が多すぎると特定のファイルを見つけるのが困難になります。

ディレクトリ名とファイル名

分析を容易にするために、ディレクトリやファイルごとに一意の接頭辞と日付接尾辞を使って名前を付けることを検討してください。

  • 一意の接頭辞は、為替、証券、アルゴリズム識別子などの収集するデータに関係している必要があります。

  • 日付接尾辞は、単純な形式にする必要があります。月次ディレクトリには、YYYYMM を使用します。日次ファイルには、YYYYMMDD を使用します。さらに頻繁に読み込んで分析する場合は、時、分、秒を含むように日付接尾辞を拡張します。

ストレージ バケットの命名規則

Cloud Storage バケット名は、グローバルに一意であり、一般公開 URL を介してアクセスできます。バケット名は公に募集されたり、公表されたりしませんが、悪意のある人物がその URL を訪問したり、同様の名前のバケットを作成してその存在を確認したりすることにより、名前を推測できます。

難読化された名前で単一のトップレベル バケットを作成することにより、データの制御を支援してください。たとえば、MD5 ハッシュを使用して名前の一部を生成できます。次のシェル スクリプトは、コマンドラインを使用して 28 文字の MD5 ハッシュを生成する方法を示しています。

date | md5sum | cut -c -28

バケットは区別できるようにする必要があるため、生成されたハッシュの最後に文脈的に関連する接尾辞を追加すると役に立つ場合があります。たとえば、上記スクリプトが「9fcc54d94e40fcc58199efc22ca3」を生成した場合は、接尾辞の「data」またはアーカイブ バケット用の「arch」を追加できます。最終的な名前は、「9fcc54d94e40fcc58199efc22ca3data」のようになります。

バケットへのアクセスの制御

難読化されたバケット名を作成することに加えて、アクセス制御リスト(ACL)を使用して、バケットへのアクセスを制御できます。特定のユーザーまたはユーザーのグループに微調整したデータアクセス権を付与できます。

個人またはグループのアクセス

各従業員にメールアドレスを使ってデータへのアクセス権を付与できますが、その場合は、従業員ごとに手動で削除または追加する必要があるため、不要な管理オーバーヘッドが増えることになります。

代わりに、付与したい権限レベルごとに Google グループを作成し、そのグループをバケット ACL に追加することを検討してください。そうすれば、個々の従業員を対応するグループに追加することができ、そのアクセスが自動的に管理されることになります。

アクセスレベル

Cloud Storage は、バケット ACL の微調整が可能な細分化を提供します。Reader 権限を持つユーザーはバケットの内容を表示できますが、Writer 権限を持つユーザーはバケット内のオブジェクトを削除できます。使用可能なアクセスレベルの詳細については、Cloud Storage の範囲と権限を参照してください。

数人のプロジェクト オーナーを維持することがベスト プラクティスです。オーナーが 1 人だけだと何か問題が発生したときにデータにアクセスできなくなる可能性がありますし、プロジェクト オーナーが多すぎると誤ってデータが削除される可能性が高まります。

  1. GCP Console で、Cloud Storage ブラウザに移動します。

    Cloud Storage ブラウザに移動

  2. バケット行の末尾にあるメニューで、[バケットの権限を編集] をクリックします。
  3. バケット権限のダイアログ内で、[項目を追加] をクリックし、新しいアクセスルールに使用するプロパティを入力します。
  4. [保存] をクリックし、新しい権限項目を保存します。

読み込みのベスト プラクティス

Cloud Storage バケットを作成して構成したら、時系列データを Cloud Platform に読み込むことができます。

読み込みツール: rsync

Cloud Storage コマンドライン ユーティリティ gsutil には、転送元と転送先を同期しる有用なコマンド rsync が含まれています。rsync を使用して、データを Cloud Storage に読み込むことができます。

gcloud auth login コマンドは、Cloud Platform サービスへのアクセスに必要な認証情報を取得します。

gcloud auth login

次に、market-data-repository/market-data-201501 というディレクトリを作成します。

mkdir -p ~/market-data-repository/market-data-201501

次に、gsutil コマンドを使用して、2015 年 1 月の 10 個のマーケット データソースから 200 個のファイルをダウンロードして、それらをディレクトリに読み込みます。

gsutil -m cp gs://solutions-public-assets/market-data-repository/market-data-*/market-data-*-201501* ~/market-data-repository/market-data-201501

その後で、次のコマンドを実行することにより、Cloud Storage バケットとローカル ディレクトリを同期できます。[YOUR_BUCKET] は、使用するバケット名に置き換えてください。

gsutil -m rsync -r ~/market-data-repository/ gs://[YOUR_BUCKET]

次のような出力が表示されるはずです。

Building synchronization state…
Starting synchronizationCopying
file:///.../market-data-repository/market-data-201501/market-data-1-20150101 [Content-Type=application/octet-stream]...Copying
file:///.../market-data-repository/market-data-201501/market-data-1-20150102 [Content-Type=application/octet-stream]...Copying
...
[Additional output lines...]
...
file:///.../market-data-repository/market-data-201501/market-data-1-20150103 [Content-Type=application/octet-stream]...Copying   ...c22ca3data/market-data-201501/market-data-1-20150130: 104.15 KiB/104.15 KiB    Copying file:///.../market-data-repository/market-data-201501/market-data-1-20150131 [Content-Type=application/octet-stream]...Uploading   ...c22ca3data/market-data-201501/market-data-1-20150131: 104.21 KiB/104.21 KiB

Storage Browser を訪問することにより、ファイルを表示できます。バケットには、2015 年 1 月のファイルが格納されている market-data-201501 というディレクトリが含まれています。

時系列マーケット データ

rsync の機能をテストするために、ローカル ディレクトリ内のファイルのいずれかを編集してから、再度 rsync コマンドを実行できます。[YOUR_BUCKET] は、使用するバケット名に置き換えてください。

gsutil -m rsync -r ~/market-data-repository/ gs://[YOUR_BUCKET]

編集したファイルが Cloud Storage バケット内で更新された唯一のファイルになります。

毎日 rsync コマンドを実行する cron ジョブの作成を検討してください。これは、コマンドを自動化することによって、バケットの同期の維持を保証するためです。rsync コマンドは、転送を再試行して元のストリームに再接続し、冗長なアップロードを排除することによっても障害に対処します。転送が完了するたびに、rsync が自動的に送信元と送信先の間のチェックサムを検証します。

ローカル ディレクトリのクリーニング

rsync コマンドはローカル ディレクトリをクリーニングしないため、定期的にデータを削除する必要があります。月に 1 回、すべてのディレクトリの内容を削除するスクリプトの自動化を検討してください。

読み込みツール: Cloud Storage FUSE

Cloud Storage バケット用のファイル システム インターフェースを維持したい場合は、Cloud Storage FUSE を使用できます。これは、Linux 上のファイル システムとして Cloud Storage バケットをマウント可能にするオープンソース Fuse アダプタです。

たとえば、次のコマンドを実行して Compute Engine インスタンスを作成できます。コマンドには、インスタンスのストレージへのフルアクセスに必要な範囲が含まれています。[YOUR_INSTANCE] は、使用するインスタンス名に置き換えてください。

gcloud compute instances create [YOUR_INSTANCE] --machine-type n1-standard-1 --image-project debian-cloud --image-family debian-9 --scopes https://www.googleapis.com/auth/devstorage.full_control

次のようなコードが表示されます。

Created [https://www.googleapis.com/compute/v1/projects/.../zones/us-central1-c/instances/[YOUR_INSTANCE]].NAME          ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
[YOUR_INSTANCE] us-central1-c n1-standard-1             123.456.7.8  123.456.789.01 RUNNING

この後で、次のコマンドを実行して、インスタンスに SSH 接続できます。[YOUR_INSTANCE] は、インスタンスに使用する名前に置き換えてください。

gcloud compute ssh [YOUR_INSTANCE]

次のコマンドを実行して、時系列バケットを空にします。文字列 /* がコマンドの最後に付いていることを確認してください。付いていない場合は、バケットも削除されます。[YOUR_BUCKET] は、使用するバケット名に置き換えてください。

gsutil -m rm -r gs://[YOUR_BUCKET]/*

次に、次のコマンドを実行して、Cloud Storage FUSE をインストールします。

export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y gcsfuse

次に、バケットをセットアップしてマウントできます。まず、ディレクトリを作成します。

mkdir ~/market-data-repository

次に、バケットをディレクトリにマウントできます。[YOUR_BUCKET] は、使用するバケット名に置き換えてください。

gcsfuse [YOUR_BUCKET] ~/market-data-repository &

ファイルを新しいディレクトリにコピーすることによって、時系列データを追加します。まず、ディレクトリを作成します。

mkdir -p ~/market-data-repository/market-data-201501

次に、gsutil コマンドを使用して、ファイルをディレクトリにコピーします。

gsutil -m cp gs://solutions-public-assets/market-data-repository/market-data-*/market-data-*-201501* ~/market-data-repository/market-data-201501

ファイルには Storage ブラウザからアクセスできます。

時系列ストレージ ブラウザ

機能をテストするために、時系列ファイルのいずれかの名前を変更できます。ディレクトリに移動します。

cd ~/market-data-repository/market-data-201501

次に、ファイルの名前を変更します。

mv market-data-1-20150101 market-data-1-20150101-test

ファイル名が変更されたことが Storage ブラウザで確認できます。

時系列マーケット データ、更新済み

ローカル ディレクトリのクリーニング

Cloud Storage FUSE を使用している場合は、ローカル ディレクトリのクリーニングがより難しくなります。これは、ローカル サーバーに対する変更や削除が Storage バケットに反映されるためです。アーカイブのベスト プラクティスに記載されているプロセスを使用して、データの個別のコピーを定期的に保存することを検討してください。このオプションでは、アーカイブ プロセスが発生するまで、データを維持するための十分な記憶容量が存在することを保証する必要があります。

データへの直接アクセス

ウェブブラウザを使用して次の URL を訪問することにより、データにアクセスできます。[YOUR_BUCKET] は、使用するバケット名に置き換えてください。

https://storage.cloud.google.com/[YOUR_BUCKET]/market-data-201501/market-data-1-20150102

認証プロセスを確認する場合は、シークレット ブラウザ ウィンドウからこの URL にアクセスする必要があります。

アーカイブのベスト プラクティス

年間のデータ費用は月あたり数セントから数ドルにまで及ぶため、アーカイブまたは削除システムを実装するのに多くの費用がかかる可能性があります。データへのアクセスの利便性を考えると、データを現状のまま維持することをおすすめします。

ただし、アーカイブ ソリューションを実装する必要がある場合は、6 か月以上経過したすべてのデータをアーカイブして、12 か月以上経過したすべてのデータを削除する方法もあります。次のセクションでは、このプロセスを順を追って説明します。このソリューションでは、アーカイブのユースケースに適した安価で耐久性の高いストレージの Cloud Storage Nearline を使用します。

アーカイブ バケットの作成

  1. GCP Console で、Cloud Storage ブラウザに移動します。

    Cloud Storage ブラウザに移動

  2. [バケットを作成] をクリックします。
  3. [バケットを作成] ダイアログ内で、以下の属性を指定します。
  4. [作成] をクリックします。

バケットの作成

バケットに対するデフォルトの権限はそのままにします。

アーカイブ プロセスのセットアップ

次に、6 か月以上経過したデータをアーカイブするプロセスをセットアップする必要があります。Cloud Storage の転送機能を使用して、定期的なアーカイブをセットアップできます。

6 か月以上経過したデータをアーカイブするプロセスをセットアップするには、GCP Console を使用して、定期的な転送をスケジュールすることができます。次に例を示します。

  1. メニューで、[ストレージ] をクリックしてから、左側のナビゲーションで [転送] をクリックします。
  2. [転送を作成] ボタンをクリックします。
  3. [Cloud Storage バケット] で、[参照] ボタンをクリックして、時系列データをインポートするバケットを選択します。
  4. [ファイル フィルタを指定する] をクリックします。[最短] フォーム フィールドに、「4380」と入力します。この設定は、6 か月以上経過したものをアーカイブします。
  5. [続行] ボタンをクリックします。
  6. [Cloud Storage バケット] で、[参照] ボタンをクリックして、アーカイブ バケットを選択します。
  7. [転送されたオブジェクトをソースから削除] を選択してから、[続行] ボタンをクリックします。
  8. [スケジュール] で、[毎日次の時刻に実行] を選択して、「12:00:00 AM」と入力します。
  9. [作成] ボタンをクリックします。

転送実行をすぐに表示したい場合は、ファイル フィルタを指定せずに手順に従ってください。

時系列即時転送

削除プロセスのセットアップ

バケットにライフサイクル イベントを追加することにより、削除プロセスをセットアップできます。次の JSON を oneyear.json という名前のファイルにコピーします。このコードは、365 日以上経過したオブジェクトを削除する必要があることを示しています。

{
     "rule":
     [
       {
         "action": {"type": "Delete"},
         "condition": {"age": 365}
       }
     ]
 }

次に、ライフサイクル イベントを作成します。[YOUR_BUCKET] は、使用するバケット名に置き換えてください。

gsutil lifecycle set oneyear.json gs://[YOUR_BUCKET]

費用

この記事のガイドラインに従えば、以下を前提として、年間費用が最小になります。

  • 毎月、約 2 ギガバイトの時系列データをインポートします。
  • 最初に 1 年分のデータを Cloud Storage にインポートします。これは、約 24 ギガバイトに相当します。
  • Python で pandasnumpyscikit-learn を使用して、または、Cloud Datalab を使用する同等のサービスで、データを分析します。
  • 毎日、100 メガバイトのデータをダウンロードします。

この前提で、月間費用と年間費用は次のようになります。

  • 1 月目の末時点で、最初のユーザー分として月額約 $ 15.50
  • 1 年目の末時点で、最初のユーザー分として月額約 $ 16.00
  • 2 年目の末時点で、最初のユーザー分として約 $ 17.30

これらの図のそれぞれでは、ユーザーが追加されるたびに毎月 $ 9.00 が加算されます。年間金額は約 $ 195 です。

クリーンアップ

この記事の例を実行した場合は、リソースの料金が請求されます。さらなる費用負担を回避するには、時系列バケット、アーカイブ バケット、ソリューションの一部として作成したすべての Compute Engine インスタンスを削除します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...