Spannerの保存から一定時間経過したデータをSSDからHDDに移行する
はじめに
Google CloudのSpannerはフルマネージドのリレーショナルデータベースサービスです。
今回はSpannerの学習のため、階層型ストレージ機能を使用してSSDからHDDにデータを移行する手順を実践してみました!
階層型ストレージ機能について
Spannerでは通常SSDにデータが保存されます。
階層型ストレージ機能を使用することでコールドデータをSpanner単体でHDDに保存・移行でき、ストレージコスト削減が見込めます。
コスト比較
asia-northeast1(東京)のシングルリージョンの場合ストレージコストを比較すると以下のようになっており、HDDに保存することで80%のコスト削減ができそうです。
ストレージタイプ | 料金(1GB当たりの月額) |
---|---|
SSD | $0.39 |
HDD | $0.078 |
階層型ストレージ機能の実践
階層型ストレージ機能はローカリティグループを作成し、ストレージポリシーを設定することで利用できます。
ストレージポリシーには保存するストレージ(SSD/HDD)、時間経過(最小1時間)でSSD→HDDに転送するオプションを設定できます。
サンプル:SSDにデータを保存し、1時間経過後にHDDにデータを移行するローカリティグループ
CREATE LOCALITY GROUP spill_to_hdd_1day OPTIONS (storage = 'ssd', ssd_to_hdd_spill_timespan = '1h');
また、ローカリティグループはデータベースやテーブル単位だけでなく、列やセカンダリインデックスレベルでの紐付けが可能です。
Spannerの準備
初めに検証用のSpannerの準備を行います。
コンソールからSpannerのページに移動して、今回は以下の設定で試行してみます。
-
エディション:Enterprise
-
インスタンス情報
- インスタンス名:demo-instance
-
インスタンスID:demo-instance
-
構成
-
リージョン:asia-northeast1(東京)
-
リージョン:asia-northeast1(東京)
-
コンピューティング容量
- 単位:処理ユニット
-
スケーリングモード:手動で割り当てる
-
数量:100
-
数量:100
-
データベース作成
- データベース名:demo-db
-
データベース言語:Google 標準 SQL
ストレージポリシーの設定
インスタンス、データベースの設定が完了したら、ストレージポリシーを設定したローカリティグループを作成します。
今回はテーブル単位に登録から1日経過したデータSSD→HDDに移行する設定を適用します。
- ローカリティグループの作成
- storage = 'ssd': デフォルトの保存先をSSDに設定
- ssd_to_hdd_spill_timespan = '1d': 1日の経過でHDDへの移行対象に設定
CREATE LOCALITY GROUP spill_to_hdd_1day OPTIONS (storage = 'ssd', ssd_to_hdd_spill_timespan = '1d');
- テーブル作成
CREATE TABLE NewsDemo ( NewsId STRING(36) NOT NULL, Description STRING(MAX), AnnouncedTime TIMESTAMP NOT NULL, ) PRIMARY KEY (NewsId), OPTIONS (locality_group = 'spill_to_hdd_1day');
- データ投入
-- 1000件分のデータを登録(省略) INSERT INTO NewsDemo (NewsId, Description, AnnouncedTime) VALUES (GENERATE_UUID(), 'ニュース1', CURRENT_TIMESTAMP()), ...
データの移行確認
最後にデータが移行されていることを確認します。
移行が完了するのを待ち、Spannerの[オブザーバビリティ] > [ストレージ使用量] > [データの探索]を確認します。
ポリシーで設定したデータ登録から1日経過後に約6日ほどでSSDからHDDにデータが移行されていることが確認できました!
Discussion