在MySQL被Oracle收购后,业内对这个开源数据库的议论就从未停止,对于PostgreSQL将取而代之成为最人气开源数据库的声音也从未停歇。然而从DB-Engines排行榜来看,PostgreSQL与MySQL之间的差距远不只是“几层楼”那么高(PostgreSQL得分不到MySQL的零头)。着眼整个排行榜上的193个数据库,我们会发现NoSQL数据库已占大半江山,榜上有名的传统关系型数据库管理系统仅余75个。
上图为9月份最新的排行,在Oracle稳坐头把交椅的同时,MySQL与Microsoft SQL Server的2、3之争也从未停止。然而撇开关系型数据库,我们会发现NoSQL的人气已获得长足增长——在2013年1月,MongoDB的得分还不到100,Cassandra的得分也只有30多,同时Cassandra更是阔别了几个月后再临前10!
Cassandra最初由Facebook开发,以Amazon专有的完全分布式数据库Dynamo为基础,结合了Google BigTable的列存储类型,很多方面都可以称之为Dynamo 2.0,而后又成为Apache顶级项目。Cassandra开源不久后,就得到了众多公司的亲睐,其中甚至包括了Twitter这样的重量级用户,然而在不久后却消失在Twtter,甚至是原作者Facebook的主流产品中。
即使一度被拉下神坛,Cassandra仍然有众多的支持者,其中更包括了著名数据开源软件公司DataStax,而Cassandra能一直稳压HBase(高贵的血统,与hadoop天然集成)长期霸占列存储第一更是其优越性的强有力证明。
Cassandra能重回Top 10与其2.0版本的发布完全是分不开的,DataStax CTO兼联合创始人Jonathan Ellis对其做出了总结:
三大重量级更新
轻量级事务:轻量事务可以确保类似关系型数据库提供的序列化隔离级别的操作线性一致性,防止并行请求之间发生冲突。
CQL提升:CQL(Cassandra Query Language)增强游标等功能,加强了索引支持。
支持触发器:触发器可以将性能关键代码推动到接近它所处理数据的地方,简化与Storm这样事件驱动型框架的集成。
其它相关更新
性能优化
在集群列上的追踪统计允许清除读路径中不必要的SStable
Single-pass compaction大致可以让大型分片压缩速度翻倍,同时还会减少JVM heap与GC上的影响
在压缩性能下降时,分级压缩会执行L0上的size-tiered压缩。可以抑制性能上升之前的读性能恶化,同时新版本还显著的提升了LCS SStable体积
对于仍然使用Thrift的应用程序,基于LMAX Disrupto的半异步及半同步服务器将大幅减少Thtift的开销
通过提高堆外内存性能实现更快的partition index查询及缓存读取
通过从CRC32切换到Adler checksums实现更快速的压缩数据读取
堆外分派的JEMalloc支持
移除partition级别的布隆过滤器提升性能——消除布隆过滤器在每个操作上的反序列化和减少GC翻滚。
大扫除
取消对pre-1.2.5 SStable及pre-1.2.9模式的兼容,已更新到最新版本的1.2.9
取消SuperColumns,通过复合组成替代。SuperColumn API被保留,经转换后被透明的反向兼容(点击查看详情)
潜在风险countPendingHints JMX调用被Hints Created标准取代,既高性能而且能被定期的监控,同时还消除了OOM节点的可能
堆内分片缓存被移除,只余下堆外选项
默认Vnode,为非vnode集群提供的旧token范围代码消失。当不使用vnode节点时,手动的指定一个token或者是随机选取。
移除备用内存负载逻辑。这一点是让运营人员有适当的动手空间,来应对不适当架构导致的堆负载,但是它永远都不可能如我们所想的那么可靠。而当下这个重要的存储引擎元数据被移到堆外,内存不足可能会提前爆发。
操作关注
需求Java7
分级压缩的分级信息被保存到sstable的元数据中——每个SStable都清楚信息的所在,因此不再需要单独的列表。这将让分级压缩更稳定,并且快照更简单。
通过可选的row preheating来避免核心页面缓存丢失
为了更稳定及透明,流被重写
流支持旧版本的SStable意味着在修复前不需要手动跨集群运行upgradesstables,从而你可以批量的加载快照。