1秒あたり約1000の異なるイベントを取得しています(4ノードクラスター)。各イベントの後に、いくつかのカウンターを増やす必要があります。私の質問は、列が1つだけで、すべてのカウンターがコンマ "、"で区切られた文字列のように扱われる通常の列ファミリー(例: "1,3,5,6,0,2")を使用する方がよいかどうかです。複数の列を持つカウンター列ファミリーを作成する方が良いですか?カウンター列ファミリーは、読み取りが高速な整合性レベル1で読み取りと書き込みを実行できるというドキュメントを読みました。書き込みパフォーマンスはあまり気にしません。
1 に答える
これは、イベントの受信方法とレイテンシの要件に依存すると思います。
複数のソースから同時にそれらを受信していて、できるだけ早くデータを書き込む必要がある場合は、カウンターの方が優れたアプローチであるように思われます。1 つの大きな列では、現在の値を読み取るだけでなく、任意の列へのすべての書き込みをシリアル化する必要があります。これにより、アプリケーション コードが不必要に複雑になる可能性もあります。パフォーマンスに問題がある場合は、カウンター列ファミリーの行キャッシュを有効にしてみてください。カウンター列ファミリーをキャッシュしようとしたことはありませんが、サポートされていないというドキュメントはありません。試してみて、JMX 統計をチェックして、機能しているかどうかを確認できます。
イベントをシングル スレッドで受信しており、1000 イベントのデータを読み取り、現在のカウンター値をメモリに保持しながら cassandra に 1 回書き込むなどの処理を実行できる場合は、1 つの列で十分です。ただし、一度にいくつかのカウンター値を読み取る必要がある場合は、読み取るたびに不要なデータを大量にフェッチすることになることを認識する必要があります。1 つの列のパフォーマンスが大幅に向上することを示すいくつかのテストを行わない限り、私はカウンターを優先します。