总体对比
Cassandra
Cassandra通过列/表的形式来组织数据,使用类SQL语言进行数据操作。Cassandra可以通过对列设置索引的方式提高数据的读取效率。Cassandra采用弱一致性策略,通过牺牲数据一致性来获得性能上的突破。在CAP(Consistency/Availability/Partition
Tolerance)三角中主要体现了AP的特性。一般来说,Cassandra在写多于读的业务场景中能够更好地发挥作用。一般在银行、金融等领域使用比较多。
Redis
Redis在实时的大数据量读写方面,效率比Cassandra要高。Redis一般采用内存+磁盘的方式进行数据存储,并通过主-从架构实现横向扩展。与Cassandra相对的,在CAP三角中,Redis主要强调的是CP特性。如果业务需求中有涉及到大量的实时数据读写的,可以考虑使用Redis。由于Redis主要通过内存来保存数据,因此在系统设计过程中应考虑以下问题:
* 内存容量问题
* 数据丢失的问题
逐项特性对比
RedisCassandra
适用场景实时读写大数据量并且要求速度很快要求写比读更多的场景
数据结构Key-value结构表结构
操作一般的Key-value操作,不支持范围查询、基于字段的查询等通过CQL操作,可以进行基于列的条件查询
开发语言C/C++Cassandra是用Java开发的
存储基于内存存储,磁盘保存备份基于磁盘存储
其他
redis支持set/list/hash等数据结构
redis支持对集合的逻辑操作
redis支持事务
redis支持很多原子性操作
可以通过设置index,让数据以列或列集合的方式聚集
总结
总体而言,Redis所提供的特性主要是面对在线实时业务的。通过对Redis特性的灵活应用,可以实现诸如分布式锁、分布式信号量、分布式发号机、消息队列等基础服务。在数据服务方面,redis比较适用于读写速度要求高、数据量大、数据具有幂等性的应用场景。
Cassandra的主要应用场景是写入流量大于读取流量的场景。例如:金融交易、支付系统。以及作为数据仓库,收集系统业务数据、定时分析报表生成等场景。