和SQL(结构化查询语言)类似,Cassandra也即将在未来的发行版本中提供Cassandra查询语句(CQL)。
比如使用Keyspace名称为WebSiteKS,使用CQL表示为:
USE WebSiteKS;
查询Column Family为Standard1,Key为k的值:
SELECT FROM Standard1 WHERE KEY = “k”;
更新Column Family为Standard1,Key为k,Column为c的值:
UPDATE Standard1 WITH ROW(“k”, COL(“c”, “hello!”));
更多的有关CQL的语法详细信息可以参考官方的文档:https://svn.apache.org/repos/asf/cassandra/trunk/doc/cql/CQL.html
抛开CQL的语法,深入到Cassandra的内部实现,其也无非是解析CQL的操作类型,然后将其转化为内部的操作接口进行调用。
USE语句实现逻辑:
case USE: clientState.setKeyspace((String)statement.statement); |
这里将Keyspace进行了切换,和直接调用Thrift API的setKeyspace效果一致。
SELECT语句实现逻辑:
case SELECT: SelectStatement select = (SelectStatement)statement.statement; List avroRows = new ArrayList(); avroResult.type = CqlResultType.ROWS; List rows = null; if (!select.getKeyPredicates().isRange()) rows = multiSlice(keyspace, select); else rows = multiRangeSlice(keyspace, select); |
这与调用Thrift API的mutiSlice或multiRangeSlice效果一致:
UPDATE语句实现逻辑:
case UPDATE: UpdateStatement update = (UpdateStatement)statement.statement; validateColumnFamily(keyspace, update.getColumnFamily()); avroResult.type = CqlResultType.VOID; List rowMutations = new ArrayList(); for (Row row : update.getRows()) { validateKey(row.getKey().getByteBuffer()); RowMutation rm = new RowMutation(keyspace, row.getKey().getByteBuffer()); for (org.apache.cassandra.cql.Column col : row.getColumns()) { rm.add(new QueryPath(update.getColumnFamily(), null, col.getName().getByteBuffer()), col.getValue().getByteBuffer(), System.currentTimeMillis()); } rowMutations.add(rm); } try { StorageProxy.mutate(rowMutations, update.getConsistencyLevel()); } catch (org.apache.cassandra.thrift.UnavailableException e) { throw new UnavailableException(); } catch (TimeoutException e) { throw new TimedOutException(); } |
这与调用Thrift API的batch_mutate效果一致:
虽然现在CQL功能还很弱,但是又向前迈向了一大步。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
MongoDB与Cassandra数据库对比
MongoDB和Cassandra都属于NoSQL数据库系列,它们也恰好都是开源,但是,它们的相似之处仅此而已 […]
-
Azure数据湖分析从U-SQL中获得提升
大数据的发展已经让许多精通SQL的数据专业人员不知所措。微软的U-SQL编程语言试图让这些人回归数据查询游戏。
-
TT百科:SQL(结构化查询语言)
一般来说,SQL-on-Hadoop仍是一项新兴技术,但随着各个公司寻求获得拥有大数据应用程序编程SQL技能的开发和分析人员,它们正逐渐成为Hadoop部署的固定组件。
-
SQL和NoSQL数据库设计之争
企业收集了很多大规模增长的松散结构化数据,Hadoop,Spark以及其他新技术处理这些数据非常有助于改善商业智能分析效率。