** 优点:** 易扩展 NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样 就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。 大数据量,高性能,快速读写 NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得 益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒 度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的 Cache,所以NoSQL在这个层面上来说就要性能高很多了。 灵活的数据模型 NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库 里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的 web2.0时代尤其明显。 高可用 NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复 制模型也能实现高可用。 低廉的成本 这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的License成本; ** 缺点:** 但瑕不掩瑜,NoSQL数据库还存在着很多的不足,常见主要有下面这几个: 不提供对SQL的支持:如果不支持SQL这样的工业标准,将会对用户产生一定的学习和应用迁移成本; 支持的特性不够丰富:现有产品所提供的功能都比较有限,大多数NoSQL数据库都不支持事务,也不像MS SQL Server和Oracle那样能提供各种附加功能,比如BI和报表等; 现有产品的不够成熟:大多数产品都还处于初创期,和关系型数据库几十年的完善不可同日而语;
1、数据库表schema经常变化 比如在线商城,维护产品的属性经常要增加字段,这就意味着ORMapping层的代码 和配置要改,如果该表的数据量过百万,新增字段会带来额外开销(重建索引等)。NoSQL应用在这种场景,可以 极大提升DB的可伸缩性,开发人员可以将更多的精力放在业务层。 2、数据库表字段是复杂数据类型 对于复杂数据类型,比如SQL Sever提供了可扩展性的支持,像xml类型的字段。很多用过的同学应该知道,该字 段不管是查询还是更改,效率非常一般。主要原因是是DB层对xml字段很难建高效索引,应用层又要做从字符流到 dom的解析转换。NoSQL以json方式存储,提供了原生态的支持,在效率方便远远高于传统关系型数据库。 3、高并发数据库请求 此类应用常见于web2.0的网站,很多应用对于数据一致性要求很低,而关系型数据库的事务以及大表join反而成 了”性能杀手”。 4、海量数据的分布式存储 海量数据的存储如果选用大型商用数据,如Oracle,那么整个解决方案的成本是非常高的,要花很多钱在软硬件 上。NoSQL分布式存储,可以部署在廉价的硬件上,是一个性价比非常高的解决方案。 并不是说NoSQL可以解决一切问题,像ERP系统、BI系统,在大部分情况还是推荐使用传统关系型数据库。主要的 原因是此类系统的业务模型复杂,使用NoSQL将导致系统的维护成本增加。