NoSQL用例场景或何时使用NoSQL

时间:2012-05-11 14:59:05

标签: nosql use-case

随着所有的炒作,似乎很难找到何时使用它的可靠信息。所以我提出了以下问题,如果这些问题提前是愚蠢的话,我很抱歉:

  1. 我应该将NoSQL用于用户数据吗?例如。个人资料,用户名+密码等
  2. 我应该使用NoSQL来获取重要内容吗?例如。文章,博客文章,产品库存等。
  3. 我假设没有?而且我觉得NoSQL只是为了快速访问的东西,可以从中丢失数据。但我还读到NoSQL应用程序具有内置冗余,以便我不会丢失数据?

    如果以上两个例子都不好,你能给我一些我会使用NoSQL的特定商业用例吗?我看到了很多一般性的描述,但没有很多真实的例子。我能想到的唯一事情是用户到用户的消息传递和分析。

    谢谢!

2 个答案:

答案 0 :(得分:160)

这真的是一个“它取决于”有点问题。一些 一般 点:

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

你真的需要了解和理解各种类型的NoSQL商店是什么,以及它们如何提供可扩展性/数据安全性等。很难给出全面的答案,因为它们真的是不同的,以不同的方式解决问题。

以MongoDb为例,查看他们的Use Cases,看看他们认为MongoDb的“非常适合”和“不太适合”的用途。

答案 1 :(得分:9)

我认为Nosql至少在这些场景中“更适合”(欢迎更多补充)

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

  2. 查询大数据集

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

  3. 磁盘I / O瓶颈

    如果网站需要根据用户的实时信息将结果发送给不同的用户,我们可能每秒都在谈论数十或数十万个SQL读/写请求。那么磁盘i / o将是一个严重的瓶颈。