メモリ

最新の書き込みデータはメモリ内のテーブル(Memtable)に存在します。しかしディスクに書き出された古いデータはOSのファイルシステムキャッシュに格納されます。言い換えると メモリは多ければ多い程良く、仮想化環境では最低でも1GBを推奨します。もちろん最新のデータセットに必要なRAM以上を用意するのは無駄ですが、専用ハードウェアにおいては4GB以下で使用する理由はありません。ハイエンドの構成では、16もしくは32GB以上のノードで構成されるクラスタが存在します。

RAMはキーキャッシュ(0.5で導入)や、行キャッシュ(0.6で導入)にも役立ちます。

CPU

Cassandraでは大部分の負荷は実際にはメモリ依存になる前にCPU依存になります。Cassandraは並列度が高く、与えたコアを効率良く使います。ハイエンドのクラスタ構成ではクアッドもしくは8コアが良いでしょう。仮想マシンで実行する場合は、CPU BurstingをサポートするRackspace Cloud Serversなどのプロバイダを検討してみてください。

ディスク

手短に言うと、理想的には最低2つのディスクがある方がよいです。1つはコミットログ(CommitLogDirectory)を保持するため、もうひとつは データファイルディレクトリ(DataFileDirectories)に使用するためです。しかし正確な答えは使用方法に大いに左右されますので、そこで何が起こっているのかを理解するのことが重要です。
(訳注: CommitLogDirectory、{{DataFileDirectories}}は対応するstorage-conf.xmlの設定項目名です。)

Cassandraは大きく異なる2つの目的でデータをディスクに永続化します。1つは新しい書き込み要求があった場合、クラッシュやシステムシャットダウン後にその要求を再現できるようコミットログとして保持するため、もうひとつは閾値を超えたMemtableの内容をSSTableとしてディスク上のデータディレクトリに書き出すためです。

コミットログはCassandoraノードへのすべての書き込みを記録し、そのためクライアントの操作をブロックする可能性がありますが、読み込みはノード起動時にしか行われません。一方SSTable(データファイル)は非同期で書き込まれますが、クライアントからの参照要求を満たすために読み込まれる場合があります。また、SSTableはコンパクション(`Compaction{{)と呼ばれるプロセスで定期的にマージされ、再作成されます。コミットログとSSTableの重要な違いは、SSTableとしてディスクに書き出されたコミットログはパージされてしまうことです。つまり}}CommitLogDirectory{{にはまだコミットされていないデータのみが保持されるのに対して、}}DataFileDirectories`のディレクトリにはノードに書き込まれたすべてのデータが保持されます。

まとめると、{{CommitLogDirectory}}に異なるデバイスを使用する場合、そのディスク容量は多い必要はありませんが、すべての書き込み(アペンド)要求(すなわちシーケンシャルI/O)を受け取れるよう十分速くなければなりません。そして{{DataFileDirectories}}に複数のディスクを使用します。それらのディスクにはすべてのデータを保持できるだけの十分な容量で、かつメモリにキャッシュされていないデータの読み込みと、SSTableへの書き出し、コンパクションという書き込みの両方を満たせるだけの十分な速度が必要です。

[MemtableSSTable]で述べているように、コンパクションは最悪の場合、一時的にひとつのボリューム(つまりデータディレクトリ)に対して最大そのデータと同じだけの空き領域を要求します。したがってディスクキャパシティが50%以下に近づいている場合、データディレクトリのボリュームをRAID0にすべきです。 B. Todd Burruss はメーリングリストで「Cassandraや他のデータベース製品のファイルサイズについて語るとき、[RAIDの]ストライプサイズは関係ないように見える。私の場合は128kに設定しているが、16kや256kに設定しても同じ結果だった。」とコメントしています。

ext2/ext3では、64bit環境でも最大ファイルサイズが2TBです。ext4ではそれが16TBになります。Cassandraは1つのファイルでディスクスペースの半分を占めることもあるため、容量の大きいディスクでRAIDを組んでいる場合はXFSを使用した方がよいでしょう。特に32bitカーネルを使用している場合はそうです。XFSのファイルサイズ制限は32bitカーネルで最大16TB、64bitでは基本的に無制限です。

クラウド

Cassandraのヘビーユーザーの何社かはクラウド環境にデプロイしています。例えばCloudKickはRackspace Cloud Serversを、SimpleGeoはAmazon EC2を使用しています。コミュニティの一般的な総意としては、CPU Bursting、ローカルディスクのRAID、およびパブリック/プライベートインターフェースの分離といった機能を備えるRackspaceのVMの方がパフォーマンスが良いとしています。

https://c.statcounter.com/9397521/0/fe557aad/1/|stats

  • No labels