Cassandraの特徴について
一般的に言われていること... ただし、表現?とか若干、主観が入ってるかもしれない...。
パフォーマンス
・書き込み操作について、非常に高いスループット
・特に書き込み ( 追加書き込み ) で非常に高いスループット
・データ更新・削除については、実際にはディスク上のデータの置換えをしないようにすることで、オーバヘッドを回避
・読取り操作について、それなりのスループット
・ハッシュに基づくデータ検索なので、キー等価検索の性能は高い。
・シーケンシャルアクセス的な読み取り操作には向いていない。
※CassandraのI/OはLSM-treeのバリエーションなので、パフォーマンスにはそのメリデメが反映される。
拡張性、弾力性 ( Elasticity )
・マスターレスのアーキテクチャにより、水平方向での直線的な拡張性を提供
・ボトルネックとなる特定の役割を果たすノードが存在しない。( マスター/スレーブのようなアーキテクチャではない。 )
・ノード数を2倍にするとスループットが倍増 ( ただし、データが適切に分散されることが前提 = 適切なモデリング )
・拡張作業が容易
・すべてのノードがほぼ同じ設定
・設定ファイルのIPアドレスとかは変えないといけない...けど、あとはだいたい同じ設定にできる。
・ダウンタイムや進行中の作業の中断なく拡張可能
※オンプレでの比較、クラウドサービスとの比較ではない
高可用性
・SPOF回避
・( 自動的に )データを複数のノードに複製するアーキテクチャ
・障害時にフェールオーバ切替が発生なし ( システムの複雑さ低減 )
・マルチデータセンタ対応のレプリケーション
※パッチ適用やバージョンアップを業務無停止( ローリングメンテ )で実行可能なのは大きなメリット
低コスト
・比較的低コストのサーバで構成可能
堅牢で高価なハードウェアを必要とするリレーショナルデータベースとは異なる。
※ディスクはSSD推奨
※ノード1台1台のスペックアップよりもノード追加推奨だが、商用サポートのディストリビューションの場合、ノードを増やすとライセンス費用も増える...
データ圧縮
・80%に達するデータ圧縮率
・ディスクのデータ量削減
・データ圧縮のCPUオーバーヘッドより、データ圧縮によるIO時間向上のメリットが大きい場合、読み取りと書き込みのスループットが向上
データ操作
・Cassandra Query Language( CQL )の提供
・なんとなくSQLに似ているので、なじみやすい。
・Relational ( RDB的 ) な操作はできない。( 本質はKVS的なものなので )
・テーブルの結合( JOIN )不可、参照整合性の概念なし ( クエリに合うようにテーブルを設計要 )
・Subquery ( 副問い合わせ )のサポートなし
・セカンダリインデックスはいちおう使用可能、ただし制約が多いし、効率悪い
・JSONサポート
※NoSQL系はRDBのように統一された規格( SQL )がないので、CQLが用意されているのは大きなメリットかと。
Consistency、トランザクション
・基本的に結果整合性 ( なので厳密なトランザクションが必要な業務には向かない。 )
・CassandraはDynamoDBと同様に結果整合性がベース
・定期的に手動メンテナンス( repair )が必要、repairするまでは整合性は保証されない。
・調整可能な整合性 ( Tunable consistency )
・読み取りまたは書き込み操作のレベルで整合性を調整可能
・トランザクションをサポートしない。
・ロールバック機構を提供していない。
・ロック機構を提供していない。
・以下の機能をサポートしているが、いろいろと制限あり。
・atomic batch( 複数処理を1単位として扱う )
・楽観的ロックのサポート CAS(軽量トランザクション)