web-dev-qa-db-ja.com

節約よりもcqlを使用する利点

節約よりもcqlを使用することには明確な利点がありますか、それとも開発者がSQLに慣れすぎているだけですか?節約クエリからcqlに切り替えたいのですが、唯一の問題は、そうすることの欠点について確信が持てないことです。彼らは何ですか?

15
Daniel Tomey

クエリ
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によって実行された benchmarks に基づくと、クエリのパフォーマンスに関しては、Thrift(RPC)はCQLよりもわずかに進んでいますが、高スループットが重要な状況にある必要があります。このパフォーマンス上の利点には、大きな利点があります。


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

[〜#〜]編集[〜#〜]

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

17
Lyuben Todorov

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

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

最後に、Thriftの方が柔軟性があることに同意することすらできないと思います。 CQL 3データモデルでは、アンチパターンではないほぼすべての使用法でThriftが使用するのと同じデータ構造を使用できます。それはあなたがより組織化された方法でモデルについて考えることを可能にするだけです。たとえば、Lyubenは、列数が異なる行について言及しました。 CQL 3テーブルは引き続きその機能を利用できます。「ストレージエンジン行」(Cassandraの低レベルストレージであり、Thriftが直接使用するもの)と「CQL行」(Thriftインターフェイスから見えるもの)には違いがあります。 CQLは、ワイドストレージエンジンの行を構造化テーブルとして視覚化するために必要な追加の作業を実行するだけです。

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

21
the paul