为什么我们使用NoSQL?

时间:2010-06-18 07:29:02

标签: nosql

了解NoSQL提供的一些优势(可伸缩性,可用性等)后,我仍然不清楚网站为什么要使用非关系数据库。 我可以得到一些帮助,最好是一个例子吗?

10 个答案:

答案 0 :(得分:20)

更好的表现

NoSQL数据库有时会有更好的性能,虽然这取决于具体情况并且存在争议。

<强>适应性

您可以在不停机的情况下添加和删除“列”。在大多数SQL服务器中,这需要很长时间并占用负载。

应用程序设计

希望将数据存储与逻辑分开。如果您在SQL查询中加入并选择内容,则将业务逻辑与存储混合在一起。

答案 1 :(得分:13)

NoSQL数据库可以解决几个问题,主要是:

  • (动态更新) BigData =&gt;认为TB,PB等。

  • 使用分布式系统 / datasets =&gt;假设您有42种产品,其中13种将存在芝加哥数据中心,21种位于纽约,另外21种位于日本某地,但是一旦您查询了所有42种产品,您就不需要知道它们的位置:NoSQL DB将。这也允许更多的脑力(服务器)来解决硬计算问题[似乎不适合你的用例,但这是一个有趣的事情要注意]

  • 分区 =&gt;让您的数据库易于分发,除了日本的酷8产品,还允许轻松的数据复制,因此这些42个产品将被复制3倍,例如,这意味着你将有3份副本用于< em>每个产品。因此,如果出现问题,没有问题=&gt;这是一个副本可用。这就是NoSQL数据库与RDBMS实际相比的地方。当然,你可以对Oracle / MySQL / PostgreSQL等进行分片,分区和集群。但是这是一个更复杂的过程,对于你雇用的大多数人来说通常是一个维护问题。

但是 到你的问题:

  • 网站为何要使用非关系型数据库

当我与大多数人合作/与他人聊天时,选择NoSQL作为他们的“网站”,遗憾的是不是出于上述原因,而仅仅是因为 COOLER 这样做。事实上,由于这个原因,许多项目失败/极度困难。

如果大多数NoSQL专家都不再使用他们的面具,他们都会同意开发人员日常解决的问题(或者人们称之为websites),可以和相当使用SQL解决方案解决,例如PostgreSQL,MySQL等。在它上面有一些很酷的Redis缓存层。只有一小部分问题真的会从NoSQL中受益。

我个人喜欢Riak,因为我坚信NoSQL,容错DB应该具有极其强大,灵活且自然分布的基础=&gt;例如Erlang OTP。另外,我是简单的粉丝。但同样,考虑到问题,我会选择最好的方法,而且大部分时间我都需要这种一致性(特别是如果我们talking about money /金融世界/任务关键/等等。)。

答案 2 :(得分:11)

不使用SQL数据库的主要原因是可伸缩性。事务保证和关系模型几乎不可能在多台机器上有用地扩展数据库,特别是考虑到现代Web应用程序生成的大量工作负载。

像Facebook 这样的应用程序不能在简单的SQL数据库上工作,除了大量的分区和分片,这也需要对应用程序逻辑进行重大调整。这就是Facebook开发Cassandra的原因。

NoSQL基本上意味着你没有一些SQL特性的功能,如立即一致性或简单连接,以换取能够使用更好扩展的数据库。

相反,如果您的网站永远不会有十几个并发用户(对于绝大多数网站都是如此),使用NoSQL毫无意义。

答案 3 :(得分:8)

我们需要了解当前应用程序中的问题是什么?

  • 交易
  • 数据量
  • 数据结构

NoSQL解决了可扩展性和可用性问题,而不是原子性或一致性。

基本驱动我们到CAP定理。 Eric Brewer 还指出,在共享数据系统的三个属性中 - 网络分区的一致性,可用性和容忍度 - 在任何给定的时刻,只能实现两个。 (CAP定理)

enter image description here

NOSQL方法

  • 无架构数据表示:
    • 他们中的大多数提供无模式数据表示和允许存储半结构化数据。
    • 可以继续发展 - 包括添加新字段甚至嵌套数据,例如,在JSON表示的情况下。
  • 开发时间:
    • 没有复杂的SQL查询。
    • 没有JOIN声明。
  • 速度:
    • 超高速交付&amp;主要是内置的实体级缓存
  • 提前规划可扩展性:
    • 避免返工

答案 4 :(得分:4)

NoSQL的另一个论点是"Data first, structure later" - 方法。

答案 5 :(得分:2)

答案 6 :(得分:1)

以下是关于使用不同NoSQL数据库的原因以及不同类型的NoSQL数据库之间的比较的技术演讲:NoSQL comparison tech talk

答案 7 :(得分:1)

是否使用RDBMS或NoSQL取决于您的目标和您正在构建的网站的规模。 NoSQL数据库可以大致分为4个不同的类别:键值存储,文档存储,列式数据库和图形数据库。每种类型的数据库管理系统都适用于特定的用例场景。

简单的小型应用或网站

RDBMS是最佳人选。它是一个成熟的系统,在线提供大量支持。数据按逻辑组织,因此与其他一些数据库类型相比,它非常容易学习。无论您选择哪种RDBMS技术,SQL语法的核心和最佳实践都适用于任何。

预计数据结构会经常变化

RDBMS表具有定义明确且严格的模式,因此如果出现这样的要求,它们可能不容易改变。因此,无模式NoSQL数据库是这里最好的技术选择。

生成大量数据的大型系统

文档存储NoSQL数据库最适合这里,因为RDBMS系统主要不是为了轻松扩展而设计的。

会计或付款管理系统

RDBMS是这里最好的技术选择,因为它采用ACID事务(即,当更新发生时,所有相关数据变得一致)。大多数NoSQL系统采用最终一致性,这意味着在更新发生后,相关数据和数据库副本将需要一些时间来更新。数据有时会在他的过程中丢失。如果您需要保持记录的准确性,那就不好了。

业务分析

如果您打算运行复杂的分析,RDBMS是平台的最佳选择,因为它允许非常合理地安排数据存储,并且它是运行复杂查询的最佳数据库类型。如果分析旨在简单(例如,有多少客户花费超过给定数量),那么柱状数据库将是最佳选择,因为您可以在不执行全表扫描的情况下扫描表中的单个列。

社交网络

图形数据库最适合构建社交网络的核心部分,因为这种类型的数据库已经以网络形式存储数据。两个节点(例如用户配置文件)和图形(例如关系)都被视为实体类型,因此关系数据将与用户配置文件数据分离。

对于社交网络上的消息传递功能,文档存储是最佳解决方案,因为每个会话和后续回复都可以存储在具有逻辑顺序结构的文档中。

欺诈检测

图形数据库是这里最好的技术选择。

多人游戏

用于保持玩家状态的键值存储。

电子商务网站

购物篮的钥匙价值商店。用于要在网站上显示的产品的文档存储。用于支付处理的RDBMS。推荐引擎的图形数据库。

有关详细信息,请访问此页面:

When NoSQL is better choice than RDBMS and when it's not

答案 8 :(得分:-1)

NoSQL数据库有很多种类型。 Web应用程序使用基于文档的数据库。文档db允许我们存储JSON,XML,YAML甚至Word文档并对其进行操作。因此,NoSQL是显而易见的选择,尤其是MongoDB,它是一个支持JSON格式的文档数据库,默认情况下是开发人员和设计人员的首选。

答案 9 :(得分:-1)

虽然我可以在这里看到很多答案,但我觉得我可以添加一些清晰明了的东西。使用这些图片描述了一些保证使用NoSQL的简单示例。我暂时不允许发布图片,因为我缺少能为我解锁该功能的积分,所以请看链接:

Extra columns could be added

Use of JSON for easier development