16

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

4

2 回答 2

21

柳本的回答很好,但我相信他可能在几点上被误导了。首先,您应该知道 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 只是完成了将宽存储引擎行可视化为结构化表所需的额外工作。

在快速的 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 回答