0

Hectorを使用してCassandraデータベースにアクセスするアプリケーションを作成しています。1つの列のみをクエリする必要がある状況と、一度に複数の列をクエリする必要がある状況があります。列名の配列を受け取り、SliceQueryを使用して列のリストを返す1つのメソッドを作成することは、コードの観点からは最も簡単ですが、ColumnQueryを使用する場合と比較して、1つの列にSliceQueryを使用することに重大な欠点があるかどうか疑問に思います。

つまり、1つの列に対してSliceQueryよりもColumnQueryを使用することで、1列のケースを個別に処理するための追加のコードに値する十分な(または任意の)パフォーマンス上の利点がありますか?

4

1 に答える 1

2

Hectorのコードを見ると、ColumnQuery(ThriftColumnQuery.java)とSliceQuery( ThriftSliceQuery.java )を使用する場合の違いは、送信されるthriftコマンドが異なることです(それぞれ「get」または「get_slice」)。

これらの各操作がCassandraのサーバーによってどのように実装されているかについての正確なドキュメントは見つかりませんでしたが、Cassandraのソースをざっと見て、CassandraServer.javaを調べた後「get」操作がクライアントの方にあるという印象を受けました。単一の列をクエリするときのパフォーマンスを向上させるよりも便利です。

  • 「get」リクエストの場合、SliceByNamesReadCommandインスタンスが作成されて実行されます。
  • 「get_slice」リクエストの場合(HectorのsetColumnNamesメソッドを使用していて、使用していないと仮定setRange)、SliceByNamesReadCommand必要な列ごとにインスタンスが作成されてから実行されます(ただし、行は1回だけ読み取られます)。

結論として、私が見る限り、複数の列を処理するためのコレクションを作成するための(無視できる)オーバーヘッド以上のものはありません。ただし、それでも心配な場合は、DAOでHectorの使用をラップするときに、2つのケースを別々に処理することはそれほど難しくないと思います。

私がなんとか助けてくれることを願っています。

于 2012-10-01T17:58:11.130 に答える