Cassandra CQL - NoSQL或SQL

MAH*_*AHI 8 sql cassandra nosql

我是Cassandra的新手,一周前开始学习Cassandra.我第一次看到它是NoSQL,但是当我开始使用CQL时,我开始怀疑Cassandra是NoSQL还是SQL DB?

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

Buz*_*tti 37

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);

通常,最好使用Cassandra作为一个大的,有弹性的数据永久存储库,可以应用少量非常高级别,非常高性能的查询来拖出要在应用程序层使用的数据子集.该子集可能是100万行,是的.CQL和Cassandra模型不是为具有嵌入式案例,聚合等的2页长SELECT语句而设计的.


Tam*_*mil 5

CQLV3.0的文档

CQL DESCRIBE得到的架构keyspacecolumn familycluster

CQL不支持我在SQL中已知的某些内容,例如 joins group by triggers cursors procedure transactions stored procedures

CQL3.0支持 ORDER BY

CQL支持所有DML和DDL功能

CQL支持 BATCH

BATCH is not an analogue for SQL ACID transactions.
Run Code Online (Sandbox Code Playgroud)

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


jer*_*ans 5

出于所有意图和目的,CQLSQL,因此在最严格的意义上,Cassandra一个 SQL 数据库。然而,大多数人将 SQL 与它通常应用于的关系数据库密切相关。在这种(错误)解释下,Cassandra 不应被视为“SQL 数据库”,因为它不是关系型数据库,并且不支持ACID属性。