使用cql超过thrift的优点

时间:2013-03-29 10:15:28

标签: cassandra thrift cql

使用cql而不是thrift有什么明显的优势,还是仅仅是开发人员习惯于SQL的情况?我想从thrift查询切换到cql,唯一的问题是我不确定这样做的缺点。它们是什么?

2 个答案:

答案 0 :(得分:22)

Lyuben的答案很好,但我相信他可能会在几点上被误导。首先,您应该知道Thrift API不会获得新功能;它是为了向后兼容,而不是推荐用于新项目。已有一些功能无法通过Thrift界面使用。

另一个因素是来自Acunu的引用基准具有误导性;它们不会使用预准备语句来衡量CQL的性能。例如,请参阅https://issues.apache.org/jira/browse/CASSANDRA-3634处的图表(可能与Acunu帖子所基于的数据集相同,因为Eric Evans编写了两者)。去年,CQL解析和执行速度也有了一些改进。您不太可能观察到CQL 3和Thrift之间的任何实际速度差异。

最后,我认为我甚至不同意Thrift更灵活。 CQL 3数据模型允许使用Thrift为几乎所有非反模式使用的相同数据结构;它只是让你以更有条理的方式思考模型。例如,Lyuben提到了具有不同列数的行。 CQL 3表仍然可以利用该功能:“存储引擎行”(这是Cassandra的低级存储,Thrift直接使用的)和“CQL行”(您通过Thrift接口看到的)之间存在差异。 CQL只是做了将宽存储引擎行可视化为结构化表所需的额外工作。

在一个快速的答案中解释有点困难,但请参阅this post稍微温和的解释。

答案 1 :(得分: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执行的benchmarks,Thrift(RPC)在查询性能方面稍微领先于CQL,但是您需要处于这样一种情况,即高吞吐量对于这种性能优势具有重要意义益处。


要查找的一些优秀文章是:

修改

以上基准已过时,保罗提供newer benchmarks on prepared statements