276

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

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

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

另外,如果上面的两个例子不好,你能给我具体的业务用例,我会使用 NoSQL 吗?我看到了很多一般性的描述,但没有很多现实世界的例子。我能想到的唯一事情是用户对用户的消息传递和分析。

4

2 回答 2

200

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

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

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

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

于 2012-05-11T15:21:34.913 回答
10

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

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

  2. 大数据集查询

    想象一下每天在 Twitter 上发布的大量推文。在 RDMS 中,可能存在具有数百万(或数十亿?)行的表,您不想直接对这些表进行查询,更不用说大多数时候复杂查询也需要表连接。

  3. 磁盘 I/O 瓶颈

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

于 2013-06-17T19:57:06.310 回答