NoSQL 用例场景或何时使用 NoSQL [关闭]

Posted

技术标签:

【中文标题】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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

NoSQL 的用例 [关闭]

NoSQL 数据库:何时使用 NoSQL 与 SQL?

NoSQL 技术、用例、优势和劣势 [关闭]

用于调查应用工具的 SQL 或 NoSQL [关闭]

NoSQL(MongoDB)与Lucene(或Solr)作为您的数据库[关闭]

为大型安全项目选择 noSQL - 大量或写入,一些读取 [关闭]