当开发人员首次考虑管理数据或为其应用程序选择数据库时,他们脑海中通常首先想到的是 ——
—— 是的,表格。
然后,他们为不同类型的数据设置不同的表,比如为用户设置一个表,为产品、订单等设置另一个表。由于数据分布在不同的表中,它们之间必然会有关联。因此,这些表将通过外键引用其他表中的项目。最终,他们可能每次都选择关系型数据库来解决问题。特别是在处理关系时,非关系型数据库的概念可能看起来非常不直观。
但问题在于 —— 数据并不总是扁平的。数据需求可能很复杂,当开发人员在不考虑数据库的情况下可视化其数据时,通常不是表格形式。相反,它可能呈现嵌套、分层或甚至图形化的形式。
你无需每次在处理数据时都想象一个表。在现代应用程序中,数据通常需要具有灵活的模式和复杂的数据类型。因此,将其扁平化成表格并不总是最佳选择。除此之外,关系型数据库也有其自身的扩展限制。随着扩展,你可能需要担心分片,这通常要求进行重大的应用程序级更改。
进入非关系数据库,或更常称为NoSQL。如果您一直在设计选择中回避它们,可能会错过发挥NoSQL全部潜力的机会。在本文中,我们快速定义非关系数据库是什么,然后提供不同的NoSQL数据库选择,以解决不同的现实问题。
最后,我们还将介绍NoSQL数据库相对于关系数据库提供的优势,并触及关系数据库仍然是更好选择的情况。
非关系数据库,或NoSQL
简单来说,这些数据库以非表格格式存储数据。它们分为不同类型,每种类型都是为特定目的和其支持的非结构化数据类型而构建的。最常见的类型包括:
- 文档数据库:以类似JSON的文档形式存储数据
- 键-值数据库:以’键-值’结构存储数据,具有唯一键。
- 图形数据库:使用节点、边和属性来表示和存储数据点之间的关系。
其他类型包括列向、内存和时间序列数据库。
不同的NoSQL数据库提供商提供诸如在某些字段上创建索引、开发人员友好的SDK、高可用性、事务操作以及轻松扩展数据库的能力等功能。
用NoSQL解决实际问题
让我们看一些使用 NoSQL 数据库解决现实生活问题的例子。
构建支持评论和标签的博客应用
文档数据库最适合这类内容管理系统。每个内容可以是一个单独的文档。模式是灵活的,每个文档可以包含子集合。您可以利用文档数据库提供商的数组字段索引功能执行复杂查询,例如检索带有标签的所有博客。
社交和专业网络平台
图数据库有助于定义人与人之间的复杂关系。可以通过图搜索轻松找到朋友的朋友。
物联网传感器数据
使用时间序列数据处理来自传感器设备的大量时间戳数据。
购物车
使用键-值对数据库,提供高并发性能和快速读写。您还可以使用键-值数据库存储用户会话信息,购物车可以是会话中的一个字段(针对单个购物会话)。
推荐引擎
使用图数据库来映射用户、产品和偏好之间的关系。
NoSQL 优于关系数据库的情况
以下是一些 NoSQL 数据库相对关系数据库具有优势的方面:
- 开发者生产力:NoSQL 数据库提供商提供针对现代应用开发的 API 和 SDK,能够加快原型设计和开发速度。
- 可扩展性:NoSQL 数据库水平扩展(只需添加更多服务器或节点),与关系数据库所需的垂直扩展相比,更具成本效益且更易于管理。
- 灵活性:NoSQL 提供灵活的架构,非常适合敏捷开发和不断变化的应用需求。
- 处理嵌套数据:数据通常是嵌套或层次化的,例如 JSON 或 XML 格式。NoSQL 数据库可以支持这些格式,而使用关系数据库时可能需要复杂的转换。
关系数据库仍占优势的领域
以下是一些关系数据库仍然相关且是一个好选择的用例。
- 分析和报告:关系数据库针对临时查询、聚合和报告进行了优化。对于任何分析和报告用例,关系数据库仍然是首选。
- 大量使用关系和连接:虽然您仍然可以使用 NoSQL 数据库管理和处理关系,但如果您的应用程序非常依赖于不同数据集之间的连接,关系数据库仍然是一个不错的选择。
- 一致性优于可用性:在数据一致性比可用性更重要的情况下(例如金融交易),关系数据库可以提供更多保障。
至此,我们的文章就到这里了。我们探讨了NoSQL数据库是什么,以及它们如何解决数据管理中的现实挑战。NoSQL数据库为现代应用程序带来了无限可能,从处理复杂数据结构的灵活性到提供的强大功能。对于那些尚未尝试NoSQL的人,希望这能激励你在下一个项目中尝试 — 也许你会发现它正是满足你需求的完美选择。
Source:
https://dzone.com/articles/nosql-for-relational-minds