为什么使用Cassandra
刚开始使用cassandra的时候,不太清楚为什么要使用cassandra。在想用mysql或redis等不是可以替代cassandra吗? 为什么要花时间去了解使用它呢?
下面简单讲一下,我们为什么要使用cassandra。
cassandra的特点好处
- 方便扩展存储
- 有弹性的模式定义
- 高写入性能。
具体解释
- 方便扩展存储
Cassandra是分布式系统,只需要增加节点就可以扩充存储空间;众所周知,mysql的单表数据量是有瓶颈的,当数据量到达一定级别,就需要考虑分库分表或者分区等等。并且mysql不是一个分布式的数据库(虽然有主从,这不是真正意义上的分布式)。
使用cassandra,则不需要考虑该问题,当数据量增加,只需要增加cassandra的机器即可(运维层面扩展),对于开发来讲,几乎没有影响。
- 有弹性的模式定义
cassandra的设计机制决定了,它的数据模式(列的增减)的改动的成本是非常低的。在mysql中,对一张大数据的表进行schema改动(列的增删改)的成本是非常非常高的,一不小心就会导致锁表,导致业务异常。而==有的业务数据量很大又由于需求的不稳定性会经常要求改动数据的模式定义==,这时就可以考虑cassandra,Cassandra很适合做这样的事;
- 高写入性能
Cassandra写入性能是非常高的,Netflix曾经在一次测试中达到每秒超过100万次的写入;非常适合高写入的应用,如广告点击记录,用户浏览记录等等
- 较高(不低)的读取性能
有的业务在选择使用cassandra的时候会因为从某些资料里面得知,cassandra的读取性能很低,而不敢使用。这点其实是误解,在cassandra的早期版本确实是这样。但是随着cassandra的发展,该问题已经得到了显著解决。具体可以参考DataStax公司的CTO兼联合创始人的这篇文章关于cassandra的错误观点。
但是当你的业务对读取有较高的要求时,建议选择正确的cassandra版本并进行合理的测试
适用场景
-
快速开发应用程序:Schema Free的特点,让Cassandra可以快速适应你的初期变更;如果你使用关系型数据库,那么就不得不从数据表、DAO层、Logic/Service层到UI层进行层层变更,哪怕只是一个小小的列名或字段类型变化;
-
大量写入、统计和分析:Cassandra的列族设计是囊括数据关联和排序的,并且可以不存储不需要的数据,这极大减省了表联接和冗余字段带来的性能开销,后者恰恰是高并发写入操作、统计分析时关系型数据库的瓶颈;
-
需要扩展的部署结构:Cassandra是面向分布式的设计,这让它可以灵活地水平扩展,以在运维阶段满足你的需求,而不必考虑“将数据迁往更高性能的服务器”这样的问题。
使用实例
- Yelp的广告分析系统
- Spotify的所有用户信息存储