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つのケースを別々に処理することはそれほど難しくないと思います。
私がなんとか助けてくれることを願っています。