Cassandra 互換データベース - Amazon Keyspaces で実現するサーバーレスな分散データベース
Amazon Keyspaces (for Apache Cassandra) と DynamoDB を活用した分散データベースの設計・運用方法を解説します。
Apache Cassandra と Amazon Keyspaces の位置づけ
Apache Cassandra は大規模な分散データベースとして、高い書き込みスループット、線形スケーラビリティ、マルチリージョンレプリケーションを特徴とする NoSQL データベースです。Netflix、Apple、Instagram など大規模サービスで採用されていますが、オンプレミスでの運用には高度な専門知識が求められます。ノードの追加・削除時のデータリバランス、コンパクション戦略の最適化、トゥームストーンの管理、JVM のチューニングなど、運用タスクは多岐にわたります。Amazon Keyspaces は Apache Cassandra 互換のフルマネージドデータベースサービスで、CQL (Cassandra Query Language) をそのまま使用できます。既存の Cassandra アプリケーションのドライバーとツールをほぼ無修正で利用でき、運用負荷を大幅に削減しながら Cassandra のデータモデルとクエリパターンを維持できます。サーバーレスアーキテクチャにより、テーブルの作成後すぐにデータの読み書きが可能で、キャパシティの事前プロビジョニングは不要です。
Amazon Keyspaces の特徴とアーキテクチャ
Amazon Keyspaces はサーバーレスで動作し、テーブルのスループットはトラフィックに応じて自動的にスケールします。オンデマンドモードでは読み書きリクエストに対する従量課金で、トラフィックが少ない時間帯のコストを最小化できます。プロビジョンドモードでは予測可能なワークロードに対してコスト効率の高い料金設定が可能です。ストレージは自動的に拡張され、データは 3 つのアベイラビリティゾーンにまたがって複製されるため、99.999% の可用性 SLA を提供します。暗号化は保存時と転送時の両方でデフォルトで有効になっており、AWS KMS によるカスタマーマネージドキーの使用も可能です。Keyspaces は CQL 3.x の主要な機能をサポートし、テーブル定義、データ型、クエリ構文は Cassandra と互換性があります。ただし、軽量トランザクション (LWT) やカウンター型など一部の機能には制限があります。Point-in-Time Recovery (PITR) により、過去 35 日間の任意の時点にテーブルを復元でき、誤操作やデータ破損からの回復が容易です。以下は Keyspaces でテーブルを作成する CQL の例です。 CREATE TABLE my_keyspace.orders ( customer_id text, order_id timeuuid, product_name text, quantity int, total_amount decimal, PRIMARY KEY (customer_id, order_id) ) WITH CLUSTERING ORDER BY (order_id DESC) AND CUSTOM_PROPERTIES = {'capacity_mode': {'throughput_mode': 'PAY_PER_REQUEST'}};
Cassandra から Keyspaces への移行戦略
既存の Cassandra クラスターから Keyspaces への移行は、段階的なアプローチが推奨されます。まず cqlsh や DataStax ドライバーを使用して Keyspaces への接続を検証し、スキーマの互換性を確認します。データ移行には AWS Glue を使用したバッチ移行と、デュアルライト (両方のデータベースに同時書き込み) による段階的移行の 2 つのアプローチがあります。 Glue を使用する場合、 Cassandra からデータを読み取り、 Keyspaces に書き込む ETL ジョブを構成します。大規模なデータセットの移行では、 Keyspaces のプロビジョンドモードで十分な書き込みキャパシティを確保し、移行完了後にオンデマンドモードに切り替えるのが効率的です。アプリケーション側の変更は最小限で済みます。接続エンドポイントの変更と、 TLS 接続の設定 (Keyspaces は TLS が必須) が主な変更点です。移行時のパフォーマンステストでは、 Keyspaces の読み取り一貫性 (LOCAL_QUORUM がデフォルト) とレイテンシ特性を事前に検証することが重要です。 分散データベース設計の基礎から応用まで、書籍 (Amazon)で体系的に学べます。
Keyspaces と DynamoDB の使い分け
AWS で分散データベースを選択する際、Keyspaces と DynamoDB はどちらも候補になります。Keyspaces は既存の Cassandra アプリケーションの移行先として最適で、CQL の知識とスキルをそのまま活用できます。複合パーティションキーやクラスタリングカラムによる柔軟なデータモデリング、TTL (Time to Live) によるデータの自動期限切れ、静的カラムによるパーティションレベルの共有データなど、Cassandra 固有のデータモデリングパターンを維持できます。一方 DynamoDB は AWS ネイティブのサービスとして、Lambda、AppSync、API Gateway などとのシームレスな統合を提供します。DynamoDB Streams によるイベント駆動アーキテクチャ、グローバルテーブルによるマルチリージョンレプリケーション、DAX (DynamoDB Accelerator) によるマイクロ秒レベルのキャッシュなど、AWS エコシステムとの統合が強みです。新規開発で Cassandra の経験がないチームには DynamoDB を、既存の Cassandra ワークロードの移行には Keyspaces を推奨します。両サービスとも IAM 認証、VPC エンドポイント、暗号化をサポートし、エンタープライズレベルのセキュリティ要件を満たします。
Keyspaces の料金
オンデマンドモードは読み取り 100 万ユニットあたり約 0.297 ドル、書き込み 100 万ユニットあたり約 1.4846 ドルです。プロビジョンドモードは RCU あたり月額約 0.000742 ドル、WCU あたり月額約 0.000371 ドルです。ストレージは 1 GB あたり月額約 0.25 ドルです。DynamoDB と料金体系はほぼ同等ですが、CQL でアクセスできるため既存 Cassandra ワークロードの移行コストが低い点がメリットです。
まとめ - Cassandra 互換データベースの最適な選択
Cassandra の移行先としての Keyspaces と、AWS ネイティブの DynamoDB を、ワークロードの特性と既存資産に応じて使い分けることで、最適な分散データベース戦略を構築できます。CQL 互換が必要な場合は Keyspaces、サーバーレスの柔軟性を重視する場合は DynamoDB が適しています。