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

引言

翻了一下以前写的Cassandra相关的教程, 发现最开始是2016年写的博客了.
也没想到坚持了这么久. 经过这么长一段时间使用Cassandra作为基础数据承载的基础架构, 有一些实战获得的经验.
总而言之, Cassandra并不适合类似金融方向这种需要高可靠性\事务性的业务. 但是对数据分析, 确实有一些功能比较好用.

省心的重复数据处理

在批量导入数据到数据库之中的时候, 难免有重复导入的时候. 如果使用MySQL等等, 就需要事先按照时间或者其他条件, 先把历史数据删除.
而Cassandra并不需要特殊处理. 在导入之前, 只要设计好相应的主键, 在导入的时候, Cassandra会自动覆盖相应的记录. 不会存在多一份数据的问题

Insert == Update

我们在插入数据的时候, 经常会这种需求: 如果存在, 就更新, 如果不存在就插入
如果使用MySQL, 就只能自己先select一把再相应的insert或者update.
当然, 也能通过一些Workaound来解决. 比如 on update XXX key的方式.
但是在Cassandra之中, 虽然 insertupdate的CQL长得完全不一样(都是标准SQL), 可是作用是一样的. 无论原来是否存在相应的数据, 使用insert或者update最后结果都是一样的.

直接塞入Json字符串

【个人认为, 这个feature非常非常的重要!】
这个feature跟MySQL 5.7 或者MongoDB 直接塞入json不太一样.
在MySQL或者MongoDB之中, Json数据是某一个单元格的数据是json类型. 而Cassandra可以把一行的数据以JSON的方式直接插入, 让Cassandra自己相应的塞入对应的列之中.
举个例子:

结合上面提到的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等解决方案.

本文原创, 转摘需要注明出处:

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

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注