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