NoSQL用例场景或何时使用NoSQL


252

经过大肆宣传,似乎很难找到有关何时使用它的可靠信息。因此,我提出了以下问题,对于这些事先真的很愚蠢的问题,我感到抱歉:

  1. 我应该对用户数据使用NoSQL吗?例如个人资料,用户名和密码等。
  2. 我应该对重要内容使用NoSQL吗?例如文章,博客文章,产品目录等。

我假设不是吗?而且我觉得NoSQL仅用于快速访问的事物,可以从中丢失数据。但是我也读到NoSQL应用程序具有内置的冗余,这样我就不会丢失数据?

另外,如果上述两个示例不好,您能给我一些我使用NoSQL的特定业务用例吗?我看到了很多常规说明,但没有看到很多实际示例。我唯一能想到的就是用户间的消息传递和分析。

谢谢!

Answers:


183

这确实是一个“取决于”的问题。一些一般要点:

  • NoSQL通常适用于非结构化/“无模式”数据-通常,您无需预先明确定义架构,而无需任何仪式即可包含新字段
  • NoSQL通常倾向于使用非规范化的架构,因为每个RDBMS领域都不支持JOIN。因此,通常您会得到一个扁平化,非规范化的数据表示形式。
  • 使用NoSQL并不意味着您可能会丢失数据。不同的数据库有不同的策略。例如MongoDB-您基本上可以选择权衡性能与数据丢失潜力之间的权衡-最佳性能=更大的数据丢失范围。
  • 扩展NoSQL解决方案通常非常容易。添加更多节点以将数据复制到其中是一种方法:a)提供更大的可伸缩性,并且b)如果一个节点出现故障,则可以提供更多的数据丢失保护。但同样,这取决于NoSQL DB /配置。NoSQL不一定像您推断的那样意味着“数据丢失”。
  • 恕我直言,复杂/动态查询/报告最好从RDBMS服务。通常,NoSQL DB的查询功能受到限制。
  • 它不必是1或其他选择。我的经验是在某些用例中将RDBMS与NoSQL结合使用。
  • NoSQL数据库通常缺乏跨多个“表”执行原子操作的能力。

您确实需要查看并了解各种NoSQL存储类型,以及它们如何提供可伸缩性/数据安全性等。很难给出一个全面的答案,因为它们的确是完全不同的并且以不同的方式处理事情。

以MongoDb为例,查看他们的用例,看看他们建议MongoDb的“非常适合”和“不太适合”使用。


16
关于NoSQL不支持联接的说法具有误导性。实际上,某些NoSQL数据库在连接方面比关系数据库要好得多。有些人根本不支持他们。总体而言,这个答案似乎与MongoDB有关,而不是与NoSQL有关。
艾伦·梅尔

1
很棒的总结。@AlanPlum,您指的是什么特定的NoSQL数据库?
布赖恩

2
@brian我是ArangoDB(arangodb.com)的贡献者,ArangoDB 是一个文档数据库(例如MongoDB)和一个图数据库(例如Neo4J)的混合体,不仅具有廉价的联接,而且具有真实的交易。就是说,NoSQL数据库不是同类组,不可能将任何一个NoSQL数据库推广到整个“类别”。
艾伦·梅

如果由于NoSQL中“不支持联接”而发现要使用RDB,我强烈建议您观看来自AWS re:Invent的视频。破坏了整个NoSQL方法!对我有很大帮助。youtu.be/HaEPXoXVf2k
dillon.harless

9

我认为Nosql至少在这些情况下“更合适”(欢迎更多补充)

  1. 只需添加更多节点即可轻松地水平扩展。

  2. 查询大数据集

    想象一下每天发布在推特上的大量推文。在RDMS中,可能存在具有数百万(或数十亿?)行的表,并且您不想直接在这些表上进行查询,甚至没有提到,大多数时候,复杂查询也需要表联接。

  3. 磁盘I / O瓶颈

    如果网站需要根据用户的实时信息将结果发送给不同的用户,那么我们可能正在谈论每秒数以万计的SQL读/写请求。然后,磁盘I / O将成为严重的瓶颈。


20
我不明白#2的RDBMS可能有什么问题。而且NoSQL的磁盘I / O数量少于#3?
2014年

5
正如@avi所说,我认为只要您通过索引查询表,#2就没有问题。数百万行?好的,只检索我想使用的索引
Xtreme Biker

11
#2和3均为假。对于2,我已经对导入/导出数据进行了性能测试,并看到SQL Server 2014在大型数据导入和导出方面压倒了Mongo。对于3,SQL中的强类型数据通常会比文档数据库占用更少的空间(我发现压缩前已超过50%)占用的空间更少。
布赖恩

7
是的,即使是第一名,我也听不懂。扩大规模是所有主要rdbms提议的集群合同的一部分
Sebas

2
如果您有无限的资金,所有这三个都是错误的
Chazt3n
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.