CQL和SQL的CRUD操作比较



数据进行CRUD操作时,CQL语句和SQL语句的异同之处。

1.建表

在此之前先分别创建两张表,插入数据,用来测试然后进行比较

  • 在SQL数据库里面创建表
    CQL和SQL的CRUD操作比较
  • 在CQL数据库里面创建表
    CQL和SQL的CRUD操作比较

; 2.CRUD语句比较

  • 两者的语法类似,CQL 类似 SQL 查询语法的子集和变种,但cql受数据类型、分布式架构的限制
  • 具体 CRUD操作

  • C(create)

  • Sql

    CQL和SQL的CRUD操作比较
  • Cql
    CQL和SQL的CRUD操作比较
    1.可以看到在Sql里面插入数据,不加字段名可行但在Cql里面不可行(显示有语法错误,不符合Cql语法)
    *2.其标准语法格式为
insert into tableName (col1,col2,col3,...) values (v1,v2,v3,...)
  1. R(retrieve)

  2. Sql

    CQL和SQL的CRUD操作比较
    CQL和SQL的CRUD操作比较
    CQL和SQL的CRUD操作比较
  3. Cql
    CQL和SQL的CRUD操作比较
    CQL和SQL的CRUD操作比较

Cassandra 支持的查询语句很严格,首先 partition key 必须精确查询,不然会出现错误(需要加 Allow Filtering)
需要加 Allow Filtering 的情况

  • 缺少 partition key 的等值过滤条件
    CQL和SQL的CRUD操作比较
  • 对普通列值过滤
    CQL和SQL的CRUD操作比较
  • 范围查询后跟精确查询
    CQL和SQL的CRUD操作比较

要求用allow filtering, 为啥呢 ?官方的解释是:
ALLOW FILTERING will probably become less strict as we collect more statistics on our data. For example, if we knew that 90% of entries have no king we would know that finding 10 such entries should be relatively inexpensive.

加了ALLOW FILTERING 后,cassandra会根据已经创建好的统计表,查询那些NODE 上最有可能有king这个cluster, 然后到最有可能的node上去找满足条件的entries。 如果没有加ALLOW FILTERING , 那就是盲找,这个查询代价非常高。

  1. U(update)

  2. Sql

    CQL和SQL的CRUD操作比较
    CQL和SQL的CRUD操作比较
  3. Cql

更新数据的语法为

update [keyspace_name.] table_name
[using ttl time_value | using timestamp timestamp_value]
set assignment [,assignment,...]
[if exists | id condition [and condition]];

CQL和SQL的CRUD操作比较
CQL和SQL的CRUD操作比较
update语句不能更新主键
其原因在于,因为主键列在底层数据结构中作为行键存储,如果改变行键,则需要遍历所有相关的键值对,并进行更新,这相当于进行了数据查询、数据删除和新行插入,开销可能很大。
  1. D(delete)

  2. Sql

    CQL和SQL的CRUD操作比较
    删除一列数据
    CQL和SQL的CRUD操作比较
  3. Cql

CQL和SQL的CRUD操作比较
CQL和SQL的CRUD操作比较

由于Cassandra的每一个逻辑行由多个键值对构成,因此在删除时,既可以选择删除一个逻辑行,也可以只删除该行中的某几个键值对(Sql不能),Sql支持删除整个列。

官网关于删除语句的语法

CQL和SQL的CRUD操作比较

3.总结

CQL与 SQL 的主要差异:不支持在 select 中使用 as 关键字为列增加别名。只能根据 objectId(where objectId=xxx)和其他条件来更新或者删除某个文档。不支持 join,关联查询提供 include、relatedTo 等
语法来替代(关系查询)。仅支持部分 SQL 函数(内置函数)。不支持 group by、having、max、min、sum、distinct 等分组聚合查询语法。不支持事务。不支持锁。模糊查询的方式不同,sql有like、_、%来进行模糊查询,而cql有一个集合过滤contrains。
Cassandra是基于partition key 的hash分布数据,所以不支持范围查询,允许在partition key 的字段上面利用token 函数来进行查询范围。

Original: https://www.cnblogs.com/lang12/p/15361026.html
Author: Aurora*
Title: CQL和SQL的CRUD操作比较

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/565847/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球