Cassandra查询语句:CQL(Cassandra Query Language)

日期: 2010-11-01 作者:gpcuster 来源:TechTarget中国 英文

  和SQL(结构化查询语言)类似,Cassandra也即将在未来的发行版本中提供Cassandra查询语句(CQL)。

    下载分布式开源数据库Cassandra 0.5

  比如使用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

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

gpcuster
gpcuster

相关推荐

  • MongoDB与Cassandra数据库对比

    MongoDB和Cassandra都属于NoSQL数据库系列,它们也恰好都是开源,但是,它们的相似之处仅此而已 […]

  • Azure数据湖分析从U-SQL中获得提升

    大数据的发展已经让许多精通SQL的数据专业人员不知所措。微软的U-SQL编程语言试图让这些人回归数据查询游戏。

  • TT百科:SQL(结构化查询语言)

    一般来说,SQL-on-Hadoop仍是一项新兴技术,但随着各个公司寻求获得拥有大数据应用程序编程SQL技能的开发和分析人员,它们正逐渐成为Hadoop部署的固定组件。

  • SQL和NoSQL数据库设计之争

    企业收集了很多大规模增长的松散结构化数据,Hadoop,Spark以及其他新技术处理这些数据非常有助于改善商业智能分析效率。