Amazon Keyspaces で運用する Apache Cassandra 互換データベース - サーバーレスで始める広域分散 DB
サーバーレスで Apache Cassandra 互換のワイドカラムデータベースを運用する。オンデマンドとプロビジョンドのキャパシティ選定とパーティションキー設計を紹介します。
Keyspaces の特徴と Cassandra との違い
Keyspaces は Apache Cassandra 互換のマネージドデータベースサービスです。CQL を使用してテーブルの作成、データの読み書きを行い、既存の Cassandra ドライバー (DataStax Java Driver など) をそのまま使用できます。Cassandra クラスタの運用で必要なノード管理、パッチ適用、リペア処理、コンパクション調整が不要になります。ただし、Cassandra の全機能がサポートされているわけではなく、Lightweight Transactions (LWT) の一部、ユーザー定義関数、マテリアライズドビューなどは未サポートです。移行前に互換性マトリクスを確認し、アプリケーションが使用する CQL 機能がサポートされているか検証する必要があります。
キャパシティモードとパーティション設計
オンデマンドモードはリクエスト量に応じて自動スケールし、事前のキャパシティ計画が不要です。トラフィックパターンが予測困難な場合や、開発・テスト環境に適しています。プロビジョンドモードは読み取り/書き込みキャパシティユニットを事前に指定し、Auto Scaling で自動調整できます。トラフィックが安定している本番環境ではプロビジョンドモードの方がコスト効率が高くなります。パーティションキーの設計は Cassandra と同様に重要で、カーディナリティが高く、アクセスが均等に分散するキーを選択します。ホットパーティションが発生するとスロットリングの原因になるため、時系列データではタイムスタンプだけでなくバケット ID を組み合わせるなどの工夫が必要です。
セキュリティとバックアップ
Keyspaces は保存時の暗号化がデフォルトで有効で、 AWS マネージドキーまたはカスタマーマネージドキー (KMS) を選択できます。転送中のデータは TLS で暗号化されます。アクセス制御は IAM ポリシーで管理し、テーブルレベルの細かい権限設定が可能です。ポイントインタイムリカバリ (PITR) を有効にすると、過去 35 日間の任意の秒単位にテーブルを復元できます。誤ったデータ削除やアプリケーションのバグによるデータ破損からの復旧に有効です。 PITR は追加料金が発生しますが、本番環境では有効化を強く推奨します。 Keyspaces のデータモデリングを網羅的に学ぶなら、技術書 (Amazon)を参照してください。
Keyspaces の料金
オンデマンドモードは読み取り 100 万ユニットあたり約 0.297 ドル、書き込み 100 万ユニットあたり約 1.4846 ドルです。プロビジョンドモードは読み取りキャパシティユニット (RCU) あたり月額約 0.000742 ドル、書き込みキャパシティユニット (WCU) あたり月額約 0.000371 ドルです。DynamoDB と比較すると、料金体系はほぼ同等ですが、Keyspaces は CQL でアクセスするため、既存の Cassandra ワークロードの移行コスト (アプリケーション変更) が低い点がメリットです。ストレージは 1 GB あたり月額約 0.25 ドルで、PITR を有効にすると追加のストレージ料金が発生します。
データモデリングとクエリ設計
Keyspaces のようなワイドカラム型データベースでは、リレーショナルデータベースとは設計の考え方が異なります。先にクエリのパターンを決め、それに合わせてテーブルを設計する「クエリ駆動」が基本です。データをどう分散させるかを決めるパーティションキーと、パーティション内での並び順を決めるクラスタリングカラムを、想定する検索に合わせて設計します。正規化よりも、必要なデータをまとめて持つ非正規化が適することが多くあります。後から自由な条件で検索することは苦手なため、アクセスパターンを最初に洗い出してモデリングすることが、性能を引き出す前提になります。
整合性と性能のバランス
Keyspaces は、読み取りの整合性のレベルを選べます。常に最新の値を確実に読みたい場合は強い整合性を、多少の遅延を許容して性能と可用性を優先したい場合は緩やかな整合性を選びます。整合性を強くするほど応答や負荷の面でコストがかかるため、データの性質に応じて使い分けます。複数の処理が同じデータを同時に更新する場合の競合を防ぐ仕組みもありますが、性能への影響を理解して使います。求める一貫性と、レイテンシやスループットのバランスを意識して設計することが、ワイドカラム型データベースを効果的に活用する鍵になります。
移行とアプリケーション統合
Keyspaces は Cassandra と互換性があり、Cassandra 向けのクエリ言語やドライバをそのまま利用できます。既存の Cassandra アプリケーションを、コードの大きな変更なしに移行できる可能性があります。ただし、一部の機能や挙動には違いがあるため、移行前に、アプリケーションが依存している機能が対応しているかを確認することが重要です。サーバーレスで運用されるため、自前で Cassandra クラスターを構築・運用する手間がなくなる点が大きな利点です。互換性を活かしつつ、対応範囲の差異を事前に検証することで、スムーズな移行と運用負荷の軽減を実現できます。
運用と監視
Keyspaces はサーバーレスのため、ノードの追加やパッチ適用といったクラスター管理が不要です。容量はオンデマンドで自動調整するか、想定負荷に合わせてプロビジョニングするかを選べます。運用では、読み書きのスループットやスロットリングの発生状況を監視し、パーティションへのアクセスが偏っていないかを確認します。特定のパーティションにアクセスが集中すると性能が頭打ちになるため、キー設計で分散を図ります。継続的なバックアップにより、過去の任意の時点へ復元できるため、誤操作や障害に備えられます。管理の手間が少ない分、設計と監視に注力できます。
まとめ
Keyspaces は Cassandra 互換の CQL でアクセスできるサーバーレスデータベースです。クラスタ管理の負荷を排除し、オンデマンドキャパシティで使った分だけ課金されます。既存の Cassandra ワークロードの AWS 移行や、Cassandra のデータモデルが適したワークロードの新規構築に有効です。