NoSQL用例场景或何时使用NoSQL

use*_*722 242 use-case nosql

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

  1. 我应该使用NoSQL来获取用户数据吗?例如配置文件,用户名+密码等.
  2. 我应该将NoSQL用于重要内容吗?例如文章,博客文章,产品库存等.

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

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

谢谢!

Ada*_*Dev 172

这真的是一个"它取决于"有点问题.一些一般观点:

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

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

以MongoDb为例,查看他们的用例,看看他们认为MongoDb的"适合"和"不太适合"的用途.

  • 关于NoSQL不支持连接的说法具有误导性.有些NoSQL数据库在连接方面实际上要比关系数据库好得多.有些人根本不支持他们.这个答案似乎更多地是关于MongoDB,尤其是关于NoSQL的. (11认同)
  • @brian我是ArangoDB(https://www.arangodb.com/)的贡献者,它是一个文档数据库(想想MongoDB)和一个图形数据库(想想Neo4J)的混合物,它不仅具有廉价的连接,而且还具有真实性交易.也就是说,NoSQL数据库不是一个同类组,并且不可能从任何一个NoSQL数据库推广到整个"类别". (2认同)

otm*_*otm 8

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

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

  2. 查询大数据集

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

  3. 磁盘I/O瓶颈

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

  • 我不明白RDBMS对#2有什么问题.NoSQL的磁盘I/O少于#3? (19认同)
  • #2和3都是假的.对于2,我已经完成了导入/导出数据的性能测试,并看到了SQL Server 2014压缩Mongo的大数据导入和导出.对于3,SQL中的强类型数据通常需要(我在压缩之前看到超过50%)比文档数据库少得多的空间. (10认同)
  • 是的,即使对于#1,我也没有得到它.扩展是所有主要rdbms提出的集群合同的一部分 (6认同)
  • 正如@avi所说,只要你在索引上查询表,我认为#2没有问题.数百万行?好的,只检索我想要使用的索引 (5认同)
  • 如果你有无限的钱,这三个都是错误的 (3认同)