現在、多数の Web サイトやストアから大量のリアルタイム イベントを収集し、その後の分析やレポート作成を行う、非常に書き込みの多い Web 分析アプリケーションを使用しています。
最初に計画したアーキテクチャには、リクエストを処理する Web サーバーのクラスターが含まれ、すべてのデータを Cassandra クラスターに書き込み、同時にリアルタイムの集計レポート用に多数のカウンターを更新しました。また、CassandraFS で Hadoop を直接利用して (datastax が提供する HDFS の代替として)、より複雑な分析のために Cassandra にあるデータで Map Reduce ジョブをネイティブに実行することも計画しています。MapR ジョブの出力は、Cassandra の ColumnFamilies にネイティブに書き戻されます。Hadoop map reduce は、書き込みが多いメインの cassandra クラスターの読み取り専用レプリカで実行されます。アイデアは、複数のデータ ホップを回避し、分析用のすべてのデータを 1 つのリポジトリに格納することでした。
最近では、ノードの頻繁な停止と応答時間の悪さを伴う cassandra クラスターの管理と成長に関する問題について耳にし、実際に直面しています。Couchbase は、応答時間と動的に成長し、クラスターを管理する点で、はるかに優れているようです。そのため、Cassandra を Couchbase に置き換えることを検討しています。
ただし、これにはいくつかの疑問が生じます。
Couchbase は、ほとんどシーケンシャルな書き込みが多いシナリオで適切に拡張できますか? 書き込まれる生データが読み戻されることはめったになく、集計されたメトリックのみが読み戻されるため、このシナリオではインメモリ キャッシングをあまり利用していません。さらに、Couchbase が非常に頻繁に (または常に) データを書き戻すためにディスクにアクセスする必要がある場合に何が起こるかについては、あまり読むことができませんでした。最終的に Cassandra よりもパフォーマンスが低下するのでしょうか?
Hadoop インターフェイスはどうなりますか? Couchbase には独自の map reduce 機能がありますが、範囲が限られていることは承知しています。単一のデータベースからすべての分析とレポートをサポートできるようにするには、CouchbaseDB と HDFS の間でデータをやり取りする必要がありますか?