随大数据时代到来,数据规模越来越大,并发量越来越高,传统的SQL数据库有时无法满足需求了,而Nosql应运而生。NoSQL本意是Not Only SQL,并不是要说取代SQL,NoSQL是对SQL特性的一种取舍和升华,使得能更加适应海量数据的应用场景。
SQL数据库在海量数据场景下面临的挑战有:
事务
关系模型要求事务满足ACID特性,所有SQL操作要么全部成功,要么全部失败。而在分布式系统中,若多个操作分属于不同服务器,保证它们原子性的用到的两阶段提交协议性能比较低,且不能容忍服务器故障,难以应用在海量数据环境下。
联表
传统SQL数据库设计时候需要满足范式要求,避免一些数据冗余情况发生。而在海量数据的场景,为了避免数据库多表关联操作,往往需要数据冗余这些违反数据库范式的手段来提高整体性能。实践证明,这些手段带来的收益远高于成本。
性能
SQL数据库采用B树存储引擎,更新操作性能不如LSM树存储引擎。而且只有基于主键的增删改查操作,性能也不如K-V存储系统。
随数据规模的增大,可扩展性及性能提升可以带来越来越明显的收益,而NoSQL系统因扩展性和性能良好,广泛应用到互联网业务中。
NoSQL面临的难题有:
缺乏统一标准
NoSQL系统不像SQL形成了完整生态链,拥有业界标准。而每个NoSQL系统各不相同,切换成本高,无法通用。
使用、运维复杂
NoSQL在选型和使用方式上需要对系统实现具有深刻的理解,缺乏专业的运维工具和运维人员,没有一套完整的生态链。
参考书目:《大规模分布式存储系统》,杨传辉著。