我对 Cassandra 很陌生,一周前才开始学习 Cassandra。我第一次读到它是 NoSQL,但是当我开始使用 CQL 时,我开始怀疑 Cassandra 是 NoSQL 还是 SQL DB?
有人可以解释为什么 CQL 或多或少像 SQL 吗?
CQL 像 SQL 一样是声明性的,语言的查询组件的非常基本的结构(选择条件的东西)是相同的。但是有足够的差异,人们不应该以与传统 SQL 相同的方式使用它。
显而易见的项目: 1. 没有连接或子查询。2. 没有交易
不太明显但同样重要的是要注意:
where dateField > TO_TIMESTAMP('2013-01-01','YYYY-MM-DD')
此外,CQL 不允许将日期的字符串插入精确到毫秒(仅秒)——但它确实允许从纪元开始输入毫秒作为long int - 大多数其他数据库引擎不允许这样做。最后,对于没有时区的长毫秒和字符串格式,时区(作为 GMT 偏移量)是不可见的。对于那些故意不将本地时间 + GMT 偏移量混为一谈的系统,这可能会导致混淆。update table set field = value;
CQL 需要带有主键的 where 子句。select * from www where (str1 = 'foo2') and (dat1 = 12312442);
一般来说,最好将 Cassandra 用作一个大的、有弹性的数据永久存储,可以应用少量非常高级、非常高性能的查询来拖出数据子集以在应用程序层使用。该子集可能是 100 万行,是的。CQL 和 Cassandra 模型不适用于 2 页长的带有嵌入案例、聚合等的 SELECT 语句。
CQL DESCRIBE获取keyspace
, column family
,的模式cluster
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.
只是上面提到的 DOC 是最好的参考 :)
出于所有意图和目的,CQL是SQL,因此从最严格的意义上讲,Cassandra是一个 SQL 数据库。但是,大多数人将 SQL 与其通常应用的关系数据库紧密联系在一起。在这种(错误)解释下,Cassandra 不应被视为“SQL 数据库”,因为它不是关系型的,并且不支持ACID属性。