NoSQL恰逢其时

来源:互联网 发布:知乎账号存在异常流量 编辑:程序博客网 时间:2024/05/14 17:43

介绍

在过去的15年里互动应用有了惊人的变化。在90年代,伴随着在各方面的剧烈增长,大型互联网公司如雨后春笋一般崛起:

  1. 随着网络应用可以越来越方便地通过网络(以及后来的移动终端)访问,活跃用户呈井喷之势增长。
  2. 随着数据收集和处理的难度下降与价值提高,亟待收集分析的数据急剧增长。
  3. 非结构化和半结构化的数据不断增加且对于应用不可或缺。
继续使用关系型数据库的技术已经越来越难以处理上述问题,关键原因是关系型数据库必须以严格结构化的方式组织数据,而且在单机运行。

Google,Amazon,Facebook,和LinkedIn属于第一批发现关系型数据库的严格规范难以满足新型应用需求的公司却又找不到商业化的替代方案,因此他们自己创造了替代方案。他们的工作极为有益,因为他们面临的问题被越来越多的公司遇到。开源的NoSQL数据库项目正式建立以帮助志愿者們的工作,之后商业公司也马上跟进了这个项目。

今日NoSQL技术在互联网企业中引发了热潮。它被越来越多的企业作为关系型数据库的替代方案考虑,因为大家逐渐明白大规模通过集群实现更有效,而松散的数据模型对于处理结构和内容难以预测的数据也更适合。

什么原因驱使企业转投NoSQL阵营

四个相互关联的浪潮——大用户、大终端、大数据、云——驱使企业采用NoSQL技术。

大用户


图1.大用户:世界范围内以每个用户日均使用互联网使用时间为基准的互联网使用正在剧烈增长。而随着智能手机的普及,人们更是频繁地通过应用使用互联网。而在线应用的骤增也就意味着数据库压力的骤增,因此需要一种简易的方式完成数据库的扩展以应对不断增大的压力。

其实在稍早之前,对一款应用来说1000个稳定用户就很多了而10000个日均用户就是极端异常的案例了。但在今天,大多数应用直接放在云端并通过互联网使用,因此必须可以能够全年全天候服务全球的用户。世界范围内有超过二十亿人使用互联网——而且他们日均上网时间在不断增加——这使同时在线用户产生爆发性的增长。因此现在对于一款应用而言百万级别的用户数量并不值得奇怪。

支持大量同时在线用户很重要,但是现实中我们难以预测应用究竟会处在什么样的情况下,所以能动态支持数量不确定的在线用户也很重要:

  • 一个新上线的应用可能忽然间风靡全球,一夜之间就从无人问津变得
  • 既有稳定的活跃用户,也有偶然到访的突发用户。
  • 例如圣诞节或情人节这种周期性的节日会造成短时间内的访问高峰。
  • 新产品的面世或者说促销也会造成显著提高访问数量。

庞大的用户数量和不确定的使用场景带来了对易扩展的数据库技术的需求。许多应用开发者发现很难甚至不可能在关系型数据库技术中在保持用户所需性能的前提下实现简易且程度可控的扩展。于是他们向NoSQL技术寻求突破。

大终端

机器生成的数据随着数字遥感的普及而不断增加。现在有一百四十亿终端接入互联网。他们分布在工厂农田、医院和仓库,也分布在家里的各类应用、游戏终端等,还分布在手机和平板电脑上。它们从五百亿分传感器上接受环境、位置、运动、气温、气象信息等等信息。

  • 到2020年,将有320亿终端接入网络。
  • 到2020年,将有10%的数据产生在嵌入式系统上。
  • 到2020年,将有20%的目标富裕数据产生在嵌入式系统上。

具有变革精神的企业已经利用大终端来降低花费在营销上的时间和金钱并提高效率和客户满意度。达成这个目标的关键是获得全球范围的可用实时数据,利用这些数据可以做出灵活且考虑周全的决定,使商业行为更加灵活。

不过遥感数据是碎片化、半结构化和连续的。这对要求严格schema和结构化数据的关系型数据库来说是个挑战,对于要求离散的非结构化数据的分布式数据库也是挑战。为了解决这个难题,用于创新的企业采取NoSQL来实现上百万个终端的数据访问,数十亿数据的存储并满足关键底层结构和操作的性能要求。

大数据

图2.大数据:数据总量急剧上升,而且数据的性质也随着开发者出于需求新加入的数据类型(大多数是非结构化的)而改变。

现在数据可以很容易地通过第三方(比如Facebook,Dun和Bradstreet)获取。可以获得的数据在不断增多,包括但不局限于用户个人信息,地理位置信息,社交关系,用户自己的创作,机器的日志数据,传感器的数据。开发人员可以利用现有的数据来优化现有的应用甚至直接做个更好的新应用。对数据的深度使用在改变社交、购物、营销、娱乐和关系管理的存在方式。无法妥善利用数据信息的应用将很快被淘汰。

对信息的获取和使用需要一种新型的具有弹性的数据库,一种可以让开发者轻松安排自己所需结构的数据且不会被第三方对数据结构的改动而影响的数据库。绝大多数新数据都会是非结构化或半结构化的数据,所以开发者也要求数据库能够有效地储存这些数据。不幸的是传统关系型数据库不能满足这些需求,基于预定义结构和schema的关系型数据库难以快速适应新的数据类型,也无法妥善处理非结构化和半结构化的数据。

在开发者越来越认识到数据处理的重要性后,基于面向对象思想编写的应用和基于schema的关系型数据库之间的“阻抗失配”也让他们越来越蛋疼。NoSQL提供的数据模型更匹配应用对数据的组织方式,同时也简化了应用和数据库的交互操作,因此代码量、debug和维护的工作量都得以降低。


图3.三层互联网架构:如今的应用越来越多地基于云,采用一种三层互联网架构,并以面向成千上万消费者不同需求的SaaS商业模型为基准来开发。这种开发方式需要一种具有良好水平扩展性能,也就是无论是用户数量还是应用使用的数据都可以通过水平扩展解决数量增长带来的压力。

在并不是那么遥远的过去,大多数个人应用和商业应用都只是在本地PC上运行单用户应用。大多数多用户、数据秘密集的商业应用采用双层结构,也即client-server结构,在防火墙内执行应用并支持一定数量的用户。今天,大多数新应用(个人或商业)采用三层互联网架构,应用在一个公有或私有云上运行并支持大量的用户。与软件架构改革一同开始流行的是诸如SaaS和基于广告的新型商业模型。

在三层结构中,用户通过网络浏览器或移动端的APP访问应用。在云端,一个负载均衡装置把到达的访问流量分流到基于集群的处理web/app业务逻辑的服务器层。在web/app层以集群的方式处理工作表现良好。每10000个(或者根据实际场景是个别的什么数量)并发用户,你只需要简单地往web/app层添加另一个服务器也就解决了额外的负荷。

在数据库层,关系型数据库曾经是最流行的选择。但是因为关系型数据库是基于中心化和share-everyting的技术,相比水平扩展它采用的是垂直扩展,而这是个很大的问题。这让关系型数据库难以支持需求能简单进行高效扩展的应用。NoSQL就是在分布式水平扩展的技术基础上诞生的,因此也更适合三层互联网架构天生的高度分布特性。

(未完待续)





0 0
原创粉丝点击