NoSQL 数据库:何时使用 NoSQL 与 SQL?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NoSQL 数据库:何时使用 NoSQL 与 SQL?相关的知识,希望对你有一定的参考价值。
参考技术ANoSQL 数据库因其功能性、易于开发性和可扩展性而广受认可,它们越来越多地用于大数据和实时 Web 应用程序,在本文中,我们通过示例讨论 NoSQL、何时使用 NoSQL 与 SQL 及其用例。
NoSQL是一种下一代数据库管理系统 (DBMS)。NoSQL 数据库具有灵活的模式,可用于构建具有大量数据和高负载的现代应用程序。
“NoSQL”一词最初是由 Carlo Strozzi 在 1998 年创造的,尽管自 1960 年代后期以来就已经存在类似的数据库。然而,NoSQL 的发展始于 2009 年初,并且发展迅速。
在处理大量数据时,任何关系数据库管理系统 (RDBMS) 的响应时间都会变慢。为了解决这个问题,我们可以通过升级现有硬件来“扩大”信息系统,这非常昂贵。但是,NoSQL 可以更好地横向扩展并且更具成本效益。
NoSQL 对于非结构化或非常大的数据对象(例如聊天日志数据、视频或图像)非常有用,这就是为什么 NoSQL 在微软、谷歌、亚马逊、Meta (Facebook) 等互联网巨头中特别受欢迎的原因。
一些流行的 NoSQL 数据库包括:
随着企业更快地积累更大的数据集,结构化数据和关系模式并不总是适合。有必要使用非结构化数据和大型对象来更好地捕获这些信息。
传统的 RDBMS 使用 SQL(结构化查询语言)语法来存储和检索结构化数据,相反,NoSQL 数据库包含广泛的功能,可以存储和检索结构化、半结构化、非结构化和多态数据。
有时,NoSQL 也被称为“ 不仅仅是 SQL ”,强调它可能支持类似 SQL 的语言或与 SQL 数据库并列。SQL 和 NoSQL DBMS 之间的一个区别是 JOIN 功能。SQL 数据库使用 JOIN 子句来组合来自两个或多个表的行,因为 NoSQL 数据库本质上不是表格的,所以这个功能并不总是可行或相关的。
但是,一些 NoSQL DBMS 可以执行类似于 JOIN的操作——就像 MongoDB 一样。这并不意味着不再需要 SQL DBMS,相反,NoSQL 和 SQL 数据库倾向于以不同的方式解决类似的问题。
一般来说,在以下情况下,NoSQL 比 SQL 更可取:
许多行业都在采用 NoSQL,取代关系数据库,从而为某些业务应用程序提供更高的灵活性和可扩展性,下面给出了 NoSQL 数据库的一些企业用例。
内容管理是一组用于收集、管理、传递、检索和发布任何格式的信息的过程,包括文本、图像、音频和视频。NoSQL 数据库可以通过其灵活和开放的数据模型为存储多媒体内容提供更好的选择。
例如,福布斯在短短几个月内就构建了一个基于 MongoDB 的定制内容管理系统,以更低的成本为他们提供了更大的敏捷性。
大数据是指太大而无法通过传统处理系统处理的数据集,实时存储和检索大数据的系统在分析 历史 数据的同时使用流处理来摄取新数据,这是一系列非常适合 NoSQL 数据库的功能。
Zoom使用 DynamoDB(按需模式)使其数据能够在没有性能问题的情况下进行扩展,即使该服务在 COVID-19 大流行的早期使用量激增。
物联网设备具有连接到互联网或通信网络的嵌入式软件和传感器,能够在无需人工干预的情况下收集和共享数据。随着数十亿台设备生成数不清的数据,IoT NoSQL 数据库为 IoT 服务提供商提供了可扩展性和更灵活的架构。
Freshub就是这样的一项服务,它从 mysql 切换到 MongoDB,以更好地处理其大型、动态、非统一的数据集。
拥有数十亿智能手机用户,可扩展性正成为在移动设备上提供服务的企业面临的最大挑战。具有更灵活数据模型的 NoSQL DBMS 通常是完美的解决方案。
例如,The Weather Channel使用 MongoDB 数据库每分钟处理数百万个请求,同时还处理用户数据并提供天气更新。
NoSQL 用例场景或何时使用 NoSQL [关闭]
【中文标题】NoSQL 用例场景或何时使用 NoSQL [关闭]【英文标题】:NoSQL Use Case Scenarios or WHEN to use NoSQL [closed] 【发布时间】:2012-05-20 04:44:54 【问题描述】:随着所有的炒作,似乎很难找到关于何时使用它的可靠信息。所以我提出以下问题,如果这些问题真的很愚蠢,我很抱歉:
-
我应该对用户数据使用 NoSQL 吗?例如。个人资料、用户名 + 密码等。
我应该对重要内容使用 NoSQL 吗?例如。文章、博客文章、产品库存等。
我假设没有?而且我觉得 NoSQL 只是用于可以快速访问的东西,可以从中丢失数据。但我也读到 NoSQL 应用程序具有内置冗余,因此我不会丢失数据?
另外,如果上面的 2 个例子不好,你能否给我具体的业务用例,我会使用 NoSQL 吗?我看到了很多一般性的描述,但没有很多现实世界的例子。我唯一能想到的就是用户对用户的消息传递和分析。
谢谢!
【问题讨论】:
【参考方案1】:我认为Nosql至少在这些场景中“更适合”(欢迎补充)
只需添加更多节点即可轻松进行水平扩展。
大数据集查询
想象一下每天在 Twitter 上发布的大量推文。在 RDMS 中,可能存在具有数百万(或数十亿?)行的表,您不想直接对这些表进行查询,更不用说大多数时候复杂查询也需要表连接。
磁盘 I/O 瓶颈
如果一个网站需要根据用户的实时信息将结果发送给不同的用户,我们谈论的可能是每秒数万或数十万的 SQL 读/写请求。那么磁盘 i/o 将是一个严重的瓶颈。
【讨论】:
我不明白#2 的 RDBMS 可能有什么问题。并且 NoSQL 根据 #3 的磁盘 I/O 更少? 正如@avi 所说,只要您通过索引查询表,我认为#2 没有问题。数百万行?好的,只检索我想使用的索引 #2 和 3 都是错误的。对于 2,我已经对导入/导出数据进行了性能测试,并且看到 SQL Server 2014 在大数据导入和导出方面粉碎了 Mongo。对于 3,SQL 中的强类型数据通常占用(压缩前超过 50%)比文档数据库占用更少的空间。 是的,即使是#1,我也不明白。扩大规模是所有主要 rdbms 提出的集群合同的一部分 如果你有无限的钱,这三个都是错误的【参考方案2】:这确实是一个“取决于”的问题。一些一般点:
NoSQL 通常适用于非结构化/“无模式”数据 - 通常,您无需预先明确定义模式,只需包含新字段而无需任何仪式 NoSQL 通常倾向于非规范化模式,因为每个 RDBMS 世界都不支持 JOIN。因此,您通常会对数据进行扁平化、非规范化的表示。 使用 NoSQL 并不意味着您可能会丢失数据。不同的数据库有不同的策略。例如MongoDB - 您基本上可以选择在性能与数据丢失可能性之间进行权衡的级别 - 最佳性能 = 更大的数据丢失范围。 扩展 NoSQL 解决方案通常非常容易。添加更多节点来复制数据是一种方法:a)提供更大的可扩展性,b)在一个节点出现故障时提供更多的数据丢失保护。但同样,取决于 NoSQL 数据库/配置。 NoSQL 并不一定意味着您推断的“数据丢失”。 恕我直言,复杂/动态查询/报告最好由 RDBMS 提供。 NoSQL DB 的查询功能通常是有限的。 不必是 1 或其他选项。我的经验是在某些用例中将 RDBMS 与 NoSQL 结合使用。 NoSQL DB 通常缺乏跨多个“表”执行原子操作的能力。您确实需要了解并了解各种类型的 NoSQL 存储,以及它们如何提供可扩展性/数据安全性等。很难给出全面的答案,因为它们确实各不相同,而且以不同的方式处理事情。
以 MongoDb 为例,请查看他们的 Use Cases 以了解他们对 MongoDb 的“非常适合”和“不太适合”用途的建议。
【讨论】:
NoSQL 不支持连接的说法具有误导性。一些 NoSQL 数据库实际上在连接方面比关系数据库好得多。有些人根本不支持他们。这个答案似乎更多地是关于 MongoDB,而不是关于 NoSQL。 很棒的总结。 @AlanPlum,您指的是哪些特定的 NoSQL 数据库? @brian 我是 ArangoDB (arangodb.com) 的贡献者,它是文档数据库(想想 MongoDB)和图形数据库(想想 Neo4J)的混合体,不仅连接成本低,而且真实的交易。也就是说,NoSQL 数据库不是一个同质的群体,不可能从任何一个 NoSQL 数据库推广到整个“类别”。 如果您发现自己正在考虑使用 RDB,因为在 NoSQL 中“不支持联接”,我强烈建议您观看来自 AWS re:Invent 的此视频。分解整个 NoSQL 方法!帮了我很多。 youtu.be/HaEPXoXVf2k 如果你在nosql中正确存储数据,在大多数情况下,你不需要多个db表,因此不需要join。以上是关于NoSQL 数据库:何时使用 NoSQL 与 SQL?的主要内容,如果未能解决你的问题,请参考以下文章