[Cassandra教程] 几个针对数据分析好用的功能

引言

翻了一下以前写的Cassandra相关的教程, 发现最开始是2016年写的博客了.

也没想到坚持了这么久. 经过这么长一段时间使用Cassandra作为基础数据承载的基础架构, 有一些实战获得的经验.

总而言之, Cassandra并不适合类似金融方向这种需要高可靠性\事务性的业务. 但是对数据分析, 确实有一些功能比较好用.

省心的重复数据处理

在批量导入数据到 数据库 之中的时候, 难免有重复导入的时候. 如果使用 MySQL 等等, 就需要事先按照时间或者其他条件, 先把历史数据删除.

而Cassandra并不需要特殊处理. 在导入之前, 只要设计好相应的主键, 在导入的时候, Cassandra会自动覆盖相应的记录. 不会存在多一份数据的问题

Insert == Update

我们在插入数据的时候, 经常会这种需求: 如果存在, 就更新, 如果不存在就插入

如果使用MySQL, 就只能自己先select一把再相应的insert或者update.

当然, 也能通过一些Workaound来解决. 比如 on update XXX key 的方式.

但是在Cassandra之中, 虽然 insert 与 update 的CQL长得完全不一样(都是标准SQL), 可是作用是一样的. 无论原来是否存在相应的数据, 使用 insert 或者 update 最后结果都是一样的.

直接塞入 Json 字符串

【个人认为, 这个feature非常非常的重要!】

这个feature跟MySQL 5.7 或者 MongoDB 直接塞入json不太一样.

在MySQL或者MongoDB之中, Json数据是某一个单元格的数据是json类型. 而Cassandra可以把一行的数据以JSON的方式直接插入, 让Cassandra自己相应的塞入对应的列之中.

举个例子:

cqlsh> INSERT INTO cycling.cyclist_category JSON '{
  "category" : "GC", 
  "points" : 780, 
  "id" : "829aa84a-4bba-411f-a4fb-38167a987cda",
  "lastname" : "SUTHERLAND" }';
 

结合上面提到的 insert == update , 如果在更新的时候, 也可以转成 insert 的方式进行.

另外, 这种方式还有一个好处: 可以做成通用的插入函数. 这样无论是什么数据, 在塞入的时候变成相应的json字符串即可. 他们使用的SQL都是相同的. 不再需要单独编写SQL

代价就是: 批量插入速度可能会降低25%这样

text == varchar == string

我们在设计MySQL schema的时候, 还得考虑是 char 还是 varchar 还是 longtext 之类的.

在Cassandra, 这个设计就简化很多了: 只有 text 也不需要你考虑长度.

我想, 虽然性能没有那么机制, 但是Cassandra在设计之初, 就考虑的是拥有足够的硬盘. 另外在性能上面, 可能也没有那么机制, 不过好在用起来非常简单.

结语:

如果你要处理的数据量在10G~1000G这个级别, 我相信Cassandra会是比较好用的.

如果只是非常小的数据库, 纯文件 服务器 或者MySQL也够用了.

如果是超过1T的级别, 目前笔者还没有经验, 可以尝试Cassandra集群, 也可以尝试HBase / Hive等解决方案.

发布了17 篇原创文章 · 获赞 2 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u011250186/article/details/103827853