16

倹約よりもcqlを使用することには明確な利点がありますか?それとも単に開発者がSQLに慣れすぎているためですか? thrift クエリから cql に切り替えたいと思っています。唯一の問題は、そうすることのマイナス面がわからないことです。彼らは何ですか?

4

2 に答える 2

21

リューベンの答えは良いものですが、いくつかの点で誤解されている可能性があると思います。まず、Thrift API には新しい機能が追加されないことに注意してください。下位互換性のためにあり、新しいプロジェクトにはお勧めしません。Thrift インターフェイスでは使用できない機能がすでにいくつかあります。

もう 1 つの要因は、Acunu から引用されたベンチマークが誤解を招くことです。準備済みステートメントを使用した CQL のパフォーマンスは測定されません。たとえば、https: //issues.apache.org/jira/browse/CASSANDRA-3634 のグラフを参照してください(おそらく、Eric Evans が両方を書いているため、Acunu の投稿が基づいているのと同じデータ セットです)。昨年は、CQL の解析と実行速度も改善されました。CQL 3 と Thrift の間に実際の速度の違いが見られることはまずありません。

最後に、Thrift がより柔軟であることに同意することさえできないと思います。CQL 3 データモデルでは、アンチパターンではないほぼすべての用途で Thrift と同じデータ構造を使用できます。モデルについてより体系的に考えることができるようになるだけです。たとえば、Lyuben は列の数が異なる行について言及しました。CQL 3 テーブルは引き続きその機能を利用できます。「ストレージ エンジン行」(Cassandra の低レベル ストレージであり、Thrift が直接使用するもの) と「CQL 行」(Thrift インターフェースを通じて表示されるもの) には違いがあります。CQL は、幅の広いストレージ エンジンの行を構造化されたテーブルとして視覚化するために必要な余分な作業を行うだけです。

簡単なSOの回答で説明するのは少し難しいですが、やや優しい説明についてはこの投稿を参照してください。

于 2013-03-29T17:19:16.163 に答える
17


CQL では、cassandra にクエリを実行し、数行でデータを取得できます (JDBC ドライバーを使用)

String query = "SELECT * FROM message;";
PreparedStatement statement = con.prepareStatement(query);

倹約ベースの API では、もう少し複雑です (Astyanax の例):

OperationResult<ColumnList<String>> result = 
     keyspace.prepareQuery(mail/*specify columnfamily structure*/)
             .getKey("lyuben@1363115059").execute();
ColumnList<String> columns = result.getResult();

パフォーマンスAcunu によって実行されたベンチマーク
に基づくと、Thrift (RPC) はクエリ パフォーマンスに関しては CQL よりわずかに優れていますが、このパフォーマンスの利点が大きな利益をもたらすためには、高いスループットが重要な状況にある必要があります。


検索するためのいくつかの優れた記事は次のとおりです。

編集

上記のベンチマークは時代遅れです。ポールは、準備されたステートメントに関する新しいベンチマークを提供しました。

于 2013-03-29T10:30:32.430 に答える