虽然关系型数据库系统很优秀,但是在大数据时代,面对快速增长的数据规模和日渐复杂的数据模型,关系型数据库系统已无法应对很多数据库处理任务。
NoSQL 凭借易扩展、大数据量和高性能及灵活的数据模型在数据库领域获得了广泛的应用。
NoSQL(Not only SQL)泛指非关系型数据库。随着 Web 2.0 网站的兴起,传统的关系数据库已经无法适应 Web 2.0 网站,特别是超大规模和高并发的社交类型的 Web 2.0 纯动态网站,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
Web 2.0 网站要根据用户个性化信息来实时生成动态页面和提供动态信息,基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要处理每秒上万次的读写请求。
关系型数据库处理上万次 SQL 查询已经很困难了,要处理上万次 SQL 写数据请求,硬盘 I/O 实在无法承受。
另外,在大型的社交网站中,用户每天产生海量的动态数据,关系型数据库难以存储这么大量的半结构化数据。在一张上亿条记录的表里面进行 SQL 查询,效率会非常低甚至是不可忍受的。
在基于 Web 的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日倶增时,数据库无法像 Web 服务器那样简单地通过添加更多的硬件和服务器结点来扩展性能和负载能力。
现在开发者可以通过 Facebook、腾讯和阿里等第三方网站获取与访问数据,如个人用户信息、地理位置数据、社交图谱、用户产生的内容、机器日志数据及传感器生成的数据等。
对这些数据的使用正在快速改变着通信、购物、广告、娱乐及关系管理的特质。开发者希望使用非常灵活的数据库,轻松容纳新的数据类型,并且不会被第三方数据提供商内容结构的变化所限制。很多新数据都是非结构化或是半结构化的,因此开发者还需要能够高效存储这种数据的数据库。
但是,关系型数据库所使用的定义严格、基于模式的方式是无法快速容纳新的数据类型的,对于非结构化或是半结构化的数据更是无能为力。
NoSQL 提供的数据模型则能很好地满足这种需求。很多应用都会从这种非结构化数据模型中获益,如 CRM、ERP、BPM 等,它们可以通过这种灵活性存储数据而无须修改表或是创建更多的列。
关系数据库对数据库事务一致性需求很强。插入一条数据之后立刻查询,肯定可以读出这条数据。很多 Web 实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。
所以,对于 Web 系统来讲,就没有必要像关系数据库那样实现复杂的事务机制,从而可以降低系统开销,提高系统效率。
复杂的 SQL 查询通常包含多表连接操作,该类操作代价高昂。但是,社交类型的网站,往往更多的是单表的主键查询,以及单表的简单条件分页查询,SQL 的功能被极大地弱化了。
因此,Web 2.0 时代的各类网站的数据管理需求已经与传统企业应用大不相同,关系数据库很难满足新时期的需求,于是 NoSQL 数据库应运而生。
关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作。但从另一个角度来说,它也是关系型数据库性能瓶颈的一个因素。
NoSQL 是一种不同于关系型数据库的数据库管理系统设计方式,是对非关系型数据库的统称。它所采用的数据模型并非关系型数据库的关系模型,而是类似键值、列族、文档等的非今系模型。它打破了长久以来关系型数据库与 ACID(原子性(Atomicity)、一致性(Consistency)隔离性(Isolation)和持久性(Durability))理论大一统的局面。
NoSQL 数据存储不需要固定的表结构,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。
NoSQL 在大数据存取上具备关系型数据库无法比拟的性能优势。
多年来,数据库负载需要增加时,只能依赖于纵向扩展,也就是买更强的服务器,而不是依赖横向扩展将数据库分布在多台主机上。NoSQL 在数据设计上就是要能够透明地利用新结点进行扩展。
NoSQL 数据库种类繁多,但是一个共同的特点是都去掉了关系型数据库的关系型裝性。数据之间无关系,非常容易扩展,从而也在架构层面上带来了可横向扩展的能力。
大数据时代被存储的数据的规模极大地增加了。尽管关系型数据库系统的能力也在为适应这种增长而提高,但是其实际能管理的数据规模已经无法满足一些企业的需求。而 NoSQL 数据库具有非常高的读写性能,尤其在大数据量下,能够同样保持高性能,这主要得益于 NoSQL 数据库的无关系性。
对于大型的生产性的关系型数据库来讲,变更数据模型是一件很困难的事情。即使只对一个数据模型做很小的改动,也许就需要停机或降低服务水平。
NoSQL 数据库在数据模型约束方面更加宽松,无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。NoSQL 数据库可以让应用程序在一个数据元素里存储任何结构的数据,包括半结构化/非结构化数据。
NoSQL 数据库的前景很被看好,但是要应用到主流的企业还有许多困难需要克服。这里是几个首先需要解决的问题。
关系数据库系统由来已久,技术相当成熟。对于大多数情况来说,RDBMS 系统是稳定且功能丰富的。相比较而言,大多数 NoSQL 数据库则还有很多特性有待实现。
企业需要的是系统安全可靠,如果关键系统出现了故障,他们需要获得即时的支持。大多数 NoSQL 系统都是开源项目,虽然每种数据库都有一些公司提供支持,但大多都是小的初创公司,没有全球支持资源,也没有 Oracle 或是 IBM 那种令人放心的公信力。
NoSQL 数据库的大多数特性都是面向 Web 2.0 应用的需要而开发的,然而,应用中的数据对于业务来说是有价值的,企业数据库中的业务信息可以帮助改进效率并提升竞争力,商业智能对于大中型企业来说是个非常关键的 IT 问题。
NoSQL 数据库缺少即席查询和数据分析工具,即便是一个简单的查询都需要专业的编程技能,并且传统的商业智能(Business Intelligence,BI 工具不提供对 NoSQL 的连接。
NoSQL 的设计目标是提供零管理的解决方案,不过当今还远远没有达到这个目标。现在的 NoSQL 需要很多技巧才能用好,并且需要不少人力、物力来维护。
大多数 NoSQL 开发者还处于学习模式。这种状况会随着时间而改进,但现在找到一个有经验的关系型数据库程序员或是管理员要比找到一个 NoSQL 专家更容易。