Cassandra CQL - NoSQL或SQL

时间:2012-06-22 10:34:10

标签: sql nosql cassandra

我对Cassandra很新,一周前就开始学习Cassandra了。 我第一次看到它是NoSQL,但是当我开始使用CQL时, 我开始怀疑Cassandra是NoSQL还是SQL DB?

有人可以解释为什么CQL或多或少像SQL?

3 个答案:

答案 0 :(得分:35)

CQL是像SQL一样的声明式,并且语言的查询组件的基本结构(选择条件中的条件)是相同的。但是有足够的差异,不应该以与传统SQL相同的方式使用它。

明显的项目:1。没有连接或子查询。 2.没有交易

不太明显但同样重要的是要注意:

  1. 除主键外,如果已在该列上创建索引,则只能对列应用WHERE条件。在SQL中,您不必索引列以对其进行过滤,但在CQL中,select语句将彻底失败。
  2. 没有OR或NOT逻辑运算符,只有AND。对数据建模非常重要,因此您不需要这两个;很容易忘记。
  3. 日期处理有很大不同。 CQL仅允许等时运算符用于时间戳,因此这样非常常见且有用的表达式不起作用:where dateField > TO_TIMESTAMP('2013-01-01','YYYY-MM-DD')此外,CQL不允许将日期的字符串插入精确到毫秒(仅限秒) - 但它允许输入millis作为一个long int,因为大多数其他数据库引擎都不允许。最后,对于没有时区的长毫秒和字符串格式,无形地捕获时区(作为GMT偏移)。这可能会导致那些故意不会混淆当地时间+ GMT偏移的系统产生混淆。
  4. 您只能基于主键(或主键的IN列表)更新表。您无法根据其他列数据进行更新,也无法进行大量更新,如下所示:update table set field = value; CQL需要带有主键的where子句。
  5. AND的语法不允许使用parens。公平地说,由于缺少OR运算符,没有必要,但这意味着在表达式周围添加“保护性”parens的传统SQL重写器不适用于CQL,例如:select * from www where (str1 = 'foo2') and (dat1 = 12312442);
  6. 一般情况下,最好使用Cassandra作为一个大的,有弹性的数据永久存储库,可以应用少量非常高级别,非常高性能的查询来拖出要在应用程序中使用的数据子集层。该子集可能是100万行,是的。 CQL和Cassandra模型不是为具有嵌入式案例,聚合等的2页长SELECT语句而设计的。

答案 1 :(得分:5)

Docs for CQLV3.0

CQL DESCRIBE获取keyspacecolumn familycluster

的架构

CQL不支持我在SQL中知道的一些内容,例如joins group by triggers cursors procedure transactions {{1} }

CQL3.0支持ORDER BY

CQL支持所有DML和DDL功能

CQL支持stored procedures

BATCH

上面提到的DOC是最好的参考:)

答案 2 :(得分:4)

对于所有意图和目的,CQL SQL,因此从严格意义上说,Cassandra SQL数据库。但是,大多数人都将SQL与通常应用的relational databases密切相关联。根据这种(错误的)解释,Cassandra不应被视为“SQL数据库”,因为它不是关系型的,并且不支持ACID属性。