作为架构师的你,NoSQL如何选型

什么是 NoSQL?

NoSQL数据库是一种非关系型数据库管理系统它和我们传统的关系型数据库(如MySQL、Oracle)不一样。传统数据库要求你在存储数据之前,先定义好数据的结构(称为“schema”),而且数据通常是用表格的形式存储的。NoSQL数据库则不需要固定的结构,这使得它非常灵活易于扩展。

NoSQL数据库通常用于处理大量数据和需要快速响应的应用程序。例如:

  • 社交媒体:像微信、Facebook等平台每天会产生大量用户数据,NoSQL数据库能够高效地处理和存储这些数据。
  • 电商平台:阿里巴巴等电商网站每天处理数百万次交易数据,NoSQL能够帮助这些平台快速存取数据,确保用户体验流畅。

虽然NoSQL的字面意思是“不是SQL(Not Only SQL)”,但它的真正意义是“不仅仅是SQL”。实际上,NoSQL这个名字源于1998年Carl Strozz提出的概念,它已经成为这一类数据库的代名词。

NoSQL 数据库系统涵盖了广泛的数据库技术,可以存储结构化、半结构化、非结构化和多态数据。让我们通过一个图来了解NoSQL数据库:

为什么是 NoSQL?

NoSQL 数据库的概念是在谷歌、Facebook、亚马逊等这些互联网巨头流行起来的,它们的体量决定了它们有大量需要处理海量数据的场景。当使用 RDBMS 处理海量数据时,系统响应时间会变慢。

为了解决这个问题,一种方式可以通过升级现有硬件进行“纵向扩展(垂直扩展)”。但这种方法成本会非常高,并且单台机器的性能是有上限的。

解决此问题的另一种方法是,当负载或数据量增加时,将数据库负载分散到多个主机上。这种方法称为“横向扩展”。

NoSQL 数据库是非关系型的,它比关系型数据库具有更好的扩展性,因为它们是为Web应用程序设计的。

NoSQL 数据库简史

  • 1998 年 - Carlo Strozzi 使用 NoSQL 一词来描述他的轻量级开源关系数据库
  • 2000 年-图形数据库 Neo4j 推出
  • 2004 年- Google BigTable 推出
  • 2005 年-CouchDB 发布
  • 2007 年- 亚马逊发布Dynamo研究论文
  • 2008 年——Facebook 开源 Cassandra 项目
  • 2009 年——NoSQL 一词被重新提出

NoSQL 的特点

非关系型
  • NoSQL 数据库不遵循关系模型
  • 在 NoSQL 数据库中,你不会看到像传统数据库那样的固定列的表格。
  • NoSQL 数据库可以存储大型二进制对象(BLOB)或自包含的数据聚合,而不需要拆分成多个表。
  • 不需要对象关系映射和数据规范化
  • 没有复杂的功能,如查询语言、查询规划器、ACID

无模式

在传统的关系型数据库中,你需要提前定义好数据的结构(比如用户表需要包含“姓名”、“年龄”等列)。而在NoSQL数据库中,你不需要事先定义这些结构,可以根据需要随时添加新的数据类型或字段,灵活地存储各种不同的数据。

例如,一个电商网站,有些用户只提供了基本信息(比如姓名和电子邮件),而有些用户还提供了他们的购物历史。如果使用NoSQL数据库,这两种不同类型的数据可以存储在同一个数据库中,即使它们的结构完全不同。如果用关系型数据库(如MySQL)也不是不能存储,定义表结构时需要将所有可能的字段都定义好,即使某个字段可能只有极少数用户会有对应的值。

简单的 API

大多数NoSQL数据库通常会提供非常简单的接口来存储和查询数据。你可以使用像HTTP REST和JSON这样的文本协议,这使得它们易于与现代Web应用集成。

分布式架构

大多数NoSQL数据库可以轻松扩展到多个服务器(节点),形成一个分布式系统。这意味着它们可以处理大量的数据和高并发的请求。当某个节点出现故障时,系统提供自动扩展和故障转移能力,仍然可以继续工作,因为数据通常被复制到多个节点。这种分布式架构非常适合大规模的Web应用。

想象一下你在开发一个社交媒体平台,用户每天会上传大量的图片和视频。使用NoSQL数据库,你可以将数据分布存储在不同的服务器上,确保即使有一台服务器出问题,其他服务器还能继续提供服务。

NoSQL 数据库的类型

NoSQL 数据库主要分为四种类型:键值对数据库、列存储数据库、文档数据库和图数据库。每种类型都有其独特的属性和局限性。上述任何一种数据库都不能解决所有问题。我们应根据自己的业务场景选择最合适的数据库。

键值对数据库

这种数据库就像一个大字典,它以“键-值”的形式存储数据。键是唯一的,每个键都对应一个值,值可以是字符串、JSON、甚至是二进制文件(如图片)。例如,一个键值对可能包含一个键“Age”,对应的值是“42”。

键值对数据库的一个使用场景的电商网站的购物车,每个用户都有一个唯一的购物车ID(键)。这个ID对应的就是用户购物车中的所有商品(值)。比如,键“购物车123”对应的值可能是“{苹果,香蕉,橙子}”。

Redis、Dynamo、Riak 是一些常见的 NoSQL 键值存储数据库。它们都是基于亚马逊的 Dynamo 论文开发出的。

列存储数据库

这种数据库以列的方式存储数据,而不是传统数据库那样按行存储,基于 Google 的 BigTable 论文。每列都单独处理。单列数据库的值是连续存储的。

列存储数据库在SUM、COUNT、AVG、MIN等聚合查询上的性能很高,因为数据在列中是现成的,假设你有一个学生成绩单,其中包含“学生姓名”、“数学成绩”、“英语成绩”、“科学成绩”等列。如果你想快速计算全班的数学平均成绩,列存储数据库会非常高效,因为它能直接从“数学成绩”这一列中提取数据。

列存储存储NoSQL数据库广泛用于管理数据仓库、商业智能、CRM、图书馆卡片目录等。

HBase、Cassandra、HBase、Hypertable是一些常见的基于列的NoSQL数据库。

文档数据库

文档数据库也以“键-值”的形式存储数据,但与键值对数据库不同的是,这里的值是结构化文档(如JSON或XML),文档内部可以包含复杂的层次结构。存储的文档彼此相似,但不必完全相同,例如如果用文档数据库存储商品信息,有的商品是没有折扣这个属性,而有的商品没有积分属性,这完全是有可能的。

在左侧的关系数据库中,您可以看到有行和列,而右侧的文档数据库其结构与 JSON 类似。对于关系数据库,你需要知道有哪些列等。然而,对于文档数据库,你可以像JSON对象一样存储数据。你不需要定义列,这使其灵活。

文档类型主要用于 内容管理系统(CMS) 系统、博客平台、实时分析和电子商务应用程序。它不适用于需要针对不同聚合结构执行多项操作或查询的复杂事务。

Amazon SimpleDB、CouchDB、MongoDB、Riak、Lotus Notes 和 MongoDB 都是流行的基于文档的DBMS 系统。

图数据库

图数据库存储实体以及这些实体之间的关系。实体存储为节点,关系存储为边。边提供节点之间的关系。每个节点和边都有唯一标识符。

在图形数据库中,遍历连接或关系非常快。节点之间的关系不是在查询时计算的,而是在存储时被捕获到数据库作为关系持久化的,例如在社交网络中,每个用户都是一个节点,用户之间的“好友关系”就是边。如果你想知道“用户A”和“用户B”是如何连接的(比如通过共同的好友),图数据库能够非常快地找到答案,因为它已经存储了这些关系。

关系是图形数据库中的头等公民;图形数据库的大部分价值都来自关系。关系不仅具有类型、起始节点和终止节点,还可以具有自己的属性。例如,他们从什么时候开始成为朋友的,节点之间的距离是多少,或者节点之间共享哪些方面。

图形基础数据库主要用于社交网络、物流、空间数据。

Neo4J、Infinite Graph、OrientDB、FlockDB 是一些流行的基于图的数据库。

NoSQL 的优缺点

NoSQL 的优点
  • 可用作主要数据源或分析数据源: 如像Facebook这样的网站,可以把用户的帖子和评论存储在NoSQL数据库中,以便快速展示在用户的时间线上。

  • 大数据能力: Google的搜索引擎每天处理数十亿次搜索请求,NoSQL数据库帮助存储和管理这些数据。

  • 无单点故障: NoSQL 数据库通常是分布式的,数据被分散存储在多个服务器上。如果一台服务器出现故障,其他服务器可以继续工作,不会导致系统瘫痪。

  • 轻松复制: NoSQL 数据库通常能很容易地把数据复制到其他服务器,以提高数据的可用性和安全性。例如当一个用户在中国上传一张照片到社交媒体上,这张照片可以迅速复制到欧洲的服务器上,确保欧洲用户也能快速查看。

  • 无需单独的缓存层: NoSQL 数据库通常内置了缓存功能,这意味着你不需要再额外配置一层缓存来提高数据访问速度,例如像Redis这样的NoSQL数据库,本身性能就很高。

  • 它提供快速的性能和水平可扩展性: 一个视频流媒体网站可以通过增加更多的服务器来应对突然增长的观看需求。

  • 可以同等有效地处理结构化、半结构化和非结构化数据: NoSQL 数据库不仅能处理传统的结构化数据,还能处理半结构化和非结构化的数据,如文档、图像等,例如一个新闻网站可以在同一个数据库中存储文章、图片、视频和用户评论。

  • 面向对象编程,易于使用且灵活: NoSQL数据库更符合现代编程语言的风格,使用起来更自然和灵活,开发人员可以用NoSQL数据库轻松存储复杂的数据结构,而不必担心数据如何拆分成表格。

  • NoSQL 数据库不需要专用的高性能服务器: NoSQL 数据库可以运行在普通的服务器上,不需要专门的昂贵硬件,这对于小公司来说非常有用,它们可以使用普通的云服务器部署NoSQL数据库来处理他们的业务数据。

  • 支持主要开发语言和平台: NoSQL 数据库通常支持多种编程语言和开发平台,因此更容易集成到不同的系统中。

  • 比使用 RDBMS 更容易实现: NoSQL数据库的部署和使用比传统的关系型数据库要简单得多。一个新创企业可以在几小时内设置好一个NoSQL数据库来启动他们的应用程序,而不需要复杂的数据库配置。

  • 灵活的数据模型,适用于快速原型设计和开发: NoSQL 数据库可以轻松适应不断变化的需求,适合快速原型设计和开发,一个初创公司可以在早期快速迭代他们的产品,因为NoSQL数据库可以灵活地增加或修改数据结构。

NoSQL 的缺点
  • 提供最终一致性,而不是事务一致性: NoSQL 数据库提供的是“最终一致性”,即数据在一段时间后最终达到一致,而不是立即一致。如果你在全球的多个数据中心都有数据,在NoSQL数据库中,一个用户在中国的数据修改可能需要几秒钟才能在欧洲的数据中心同步。

  • 没有内置数据验证: NoSQL数据库通常不内置复杂的数据验证功能,开发者需要自己处理数据的正确性,例如在存储用户信息时,如果不额外编写验证逻辑,可能会存入错误或不完整的数据。

  • 没有标准化的接口: 同的NoSQL数据库有不同的接口和操作方式,缺乏统一的标准。如果你从一个NoSQL数据库迁移到另一个,可能需要重新编写很多代码来适应新的数据库接口。

  • 不能提供丰富的分析功能: 与关系型数据库相比。NoSQL 数据库不擅长复杂的数据分析,

  • 解决特定问题需要特定的数据库: 不同的NoSQL数据库擅长不同的任务,因此通常需要为不同的需求选择不同的数据库。例如:一个电商平台可能需要使用键值对数据库来管理用户会话,同时使用图数据库来管理推荐系统。

  • 不能处理复杂查询: NoSQL数据库不适合执行复杂的、多表关联查询,例如如果你需要查询“在过去一年中购买了某产品的所有用户的详细信息”,NoSQL数据库可能不如传统的SQL数据库高效。

现在相信你对NoSQL数据库的优缺点有了更清晰的理解。选择NoSQL还是传统的关系型数据库,取决于你的具体需求和使用场景。

最后需要说明的是,NoSQL的出现绝对不是为了取代关系型数据库,而是作为关系型数据库的补充,任何一个较有规模的应用,这两着都是共存的,一起保障系统稳定高效的运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值