プロジェクト

全般

プロフィール

Cassandra DB

はじめに

Cassandaの概要

Apacheプロダクト(オープンソースソフトウェア)として開発・提供されているスケーラビリティの高い分散型のNoSQLデータベースで、単一故障点を排しビッグデータを扱うのに適したデータベースです。大量のデータを高速に書き込み・読み込みに対応しています。

2007年にFacebook社のエンジニア Avinash Lakshman(Amazon Dynamo の作者)とPrashant Malikにより開発、2008年にオープンソース化し、2009年にApacheインキュベータプロジェクトに寄贈、IBM、Twitter、Rackspace社の貢献を受けて2010年にApacheトップレベルプロジェクトに昇格しました。

Cassandra 5.0 2024年
Cassandra 4.1 2022年
Cassandra 4.0 2021年
Cassandra 3.0 2015年
Cassandra 2.0 2013年
Cassandra 1.0 2011年

NoSQLの分類とCassandra

NoSQLデータベースには、キーバリュー型、ドキュメント型、カラムファミリー型、グラフ型がありますが、Cassandraはカラムファミリー型に分類されます。

クエリー言語

CassandraはNoSQLに属しますが、SQLに類似したCQL(Cassandra Query Language)を使用します。
分散型なので性能向上にはサーバーを増設することで実現します。

クラスタ

Cassandraではデータを複製して複数のノードに配置します。これにより、ノードが故障してもデータの欠落は発生しません。
また、クラスタのコントロールをするマスターは存在しません。これにより単一故障点(Single Point Of Failure)を持たない構成を実現しています。

データ量が増えてきた場合、ノードを追加することでスケールアウト(性能向上)が可能で、またノードの追加にあたりノードの停止を不要としています。

さらに、クラスタ(データセンター)を複数構成しクラスタ間を同期することで、DR(Disaster Recovery)対応も可能としています。

これらは、CAP(Consistency、Availability、Partition-tolerance)定理において、APを満たす設計です。

  • 可用性(Availability):ノードの1つが故障しても他のノードが応答
  • 分断耐性(Partition-tolerance):データセンター間が切断しても各データセンターがそれぞれ稼働継続

ただし、データを複製し複数ノードに配置することは、一貫性の欠如が課題となります。Cassandraではデータの読み書き時に複数ノードに複製したデータ間に不一致があっても、多数決(3ノードのうち2ノードが一致している)で、最新の値を返却するとともに、それを修復する仕組み(Read Repair)を持ちます。

パーティション

Cassandraは、ノードへの分散配置の単位をパーティションとし、パーティションキーにより配置ノード(3つ)が決まります。
そのため、均等に分散配置するには、パーティションキーをどのように定義するかデータモデルの設計が重要となります。

パーティションサイズは2GB程度に収まるようにデータモデルを設計するのがミソ。

開発試験でのクラスタ

Cassandraは分散型のデータベースでクラスター構成を取りますが、開発・試験用に単一マシンで実行することが可能です。また、ローカルマシンにDockerで複数ノードを実行してクラスタ構成を取ることもできます。

苦手なこと

  • パーティションをまたがる検索
  • データの更新

できないこと

  • テーブル(カラムファミリー)のJOIN
  • ACIDトランザクション


10分前に更新