【问题标题】:How to: SQL or NOSQL?如何:SQL 或 NOSQL?
【发布时间】:2011-03-17 18:49:27
【问题描述】:

我还没有遇到过这个问题,但这就是我的想法(非常肤浅和简单的恕我直言)

如果您有一个键值类型的存储并且您访问的所有内容都是键查找,请使用 NOSQL 解决方案。 如果你想要基于值(和子值)的查找或者有更复杂的东西,比如连接,你会选择关系解决方案。事务 = 关系(我不太确定 nosql 解决方案是否支持该概念) 它也看起来像 NOSQL = 非规范化(SQL)(我可能在这里大错特错)

一般来说,决定为您的应用程序选择数据模型的任何原则/指南/经验法则。

【问题讨论】:

标签: sql database-design nosql


【解决方案1】:

可以使用多种因素来选择数据库实现,其中一些是:

  1. 成本:NoSQL DB 更倾向于开源、更便宜的一面
  2. 可扩展性:NoSQL 可以通过更便宜的硬件更好地扩展
  3. 如果您的联接太多,您应该选择传统的 RDBMS
  4. 一致性保证会因使用的 NoSQL 解决方案而异

您还可以在 SE Radio 上收听以下播客:"Episode 165: NoSQL and MongoDB with Dwight Merriman"。

【讨论】:

    【解决方案2】:

    像 MongoDB 这样的文档存储可以做的不仅仅是存储键值对。 MongoDB 具有丰富的索引和搜索可能性。您可以很容易地使用 MongoDB 查找值(和子值)。

    在文档存储中,您可以将 1:n 关系存储在同一个文档中。这意味着有 less 需要进行连接。我不是说“没有需要加入”,而是说“较少需要加入” .

    【讨论】:

      【解决方案3】:

      NOSQL 不是用于数据访问的特定数据模型或范例。它用于指代任意数量的非 SQL 数据库技术,通常是为分布式数据库应用程序设计的技术。

      非规范化通常是一个关系数据库术语。它与 NOSQL 数据库无关,大部分或全部不是关系型的。

      【讨论】:

      • 我不认为非规范化是一个关系数据库术语。规范化意味着您不存储可以通过数据库中的其他信息以某种方式确定的信息。
      • @TTT:也许它可以被理解为在其他上下文中但在关系数据库中它具有非常具体的含义,这是相当不同的。无论如何,如果您的定义是预期的,那么我不明白为什么根据 Neal 的说法是“NOSQL = 非规范化”。
      • 同意 nosql = denormalized (sql) 是一种误导。在关系中,您可以存储规范化和非规范化数据。在 nosql 有点存储(读取键值类型)中,您无法真正规范化数据。
      • 您可以在 NoSQL DB 中规范化您的数据。您始终可以选择将 id 存储为对其他集合的引用,例如 MongoDB。在 MongoDB 中存储标准化的所有内容有一个很大的缺点,即您必须进行大量客户端连接,并且可能会遇到很多不一致的情况,但这并非不可能。
      • 添加我对非规范化 (SQL) 的看法。是的,重整化可能是一个不适用于 NOSQL 数据库的通用概念,但实际上,这就是您正在做的事情,获取数据并进行复制。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 2014-09-18
      • 1970-01-01
      相关资源
      最近更新 更多