8

我知道面向文档的 NoSQL DB 是 KV 模型的“扩展”,因为它们允许您查询的不仅仅是单个查找键。但是一旦某个东西是“文档”,我觉得它已经包含了一个关系模型:

"myJson": {
    "fizz": 4,
    "buzz": "true",
    "widget" : {
        ...etc.
    }
}

对我来说,我看不出这个 JSON 与一个json_objects带有fizzandbuzz字段的表以及与第二个表的外键关系之间的区别widgets

像 Cassandra 这样的“柱状”数据库听起来就像是直接的关系/表数据库。

所以我问:面向文档和面向列的 DB 有什么不同,以及它们的区别(与 RDBMS 不同)是什么?它们最适合解决哪些问题,使它们在某些情况下优于关系数据库?提前致谢!

4

2 回答 2

17

首先,我想说的是,您说NoSql 与关系数据库不同,因此很难进行比较,这是非常正确的。话虽如此,两者之间有许多可以比较的大区别。

扩展
虽然您可以对 MySql 数据库进行分片,但是当 RDMS 在多台机器上时,分片和强制执行 ACID 属性会非常具有挑战性,但像 Cassandra 这样的 NoSql 解决方案以其在某些情况下管理 400 个节点的能力而著称。集群没有问题。Cassandra 数据库不仅易于扩展,而且性能也不会受到影响。

模式(更少)模型。
NoSQL 数据库系统旨在管理大量不遵循固定模式的数据。这意味着,例如,您希望向 Cassandra 中的现有列族添加新列,您无需返回并修改列族,因此无需这样做:

ALTER TABLE table_name ALTER COLUMN column_name datatype;

相反,我们可以随时添加新列,最终可能会得到以下“表格”:

 key         | follower1  | follower2   | follower2          
-------------+------------+-------------+-----------
 lyubent     | joeb       | chuckn      | gordonf     
 chuckn      | joeb       | gordonf                   
 gordonf     | chuckn                                 
 joeb        | chuckn     | lyubent     | joeb        

这允许数据模型灵活且易于扩展,但这样做数据变得不那么结构化。

速度
NoSql 数据库针对高写入速度进行了优化,而 RDBM 旨在实现高读取速度。但即使考虑到这一点,NoSql 解决方案在读取方面仍然倾向于优于 RDBM系统。这是因为 NoSql 数据库没有实现许多减慢关系模型中读/写/更新操作的功能,例如 ACID 属性和事务。

什么时候应该使用它

  • 您的应用程序/网站需要快速增长,但您希望从小处着手。
  • 你更关心写入数据而不是读回数据。(发布了很多推文,但并非所有推文都被阅读)
  • 系统的可用性比 100% 更新的数据更重要。(因此,如果您是银行,则不需要 NoSql,但如果您是需要 100% 正常运行时间的网站,它可能是一个不错的选择)
  • 如果正在写入的数据需要 100% 的时间成功,但最终的一致性不是问题。

只是为了直观的说明,这有助于我理解不同的 sql 解决方案在哪里适合数据库世界,以及每个解决方案如何适合一个目的。

数据库三元组 - 可用性、一致性和分区容错性

于 2013-03-08T22:45:27.713 回答
2

在没有模式数据库中,您没有固定的列和类型。

例如,产品“牛仔裤”可以有属性“价格”、“长度”和“型号”(M/W),但对于产品书,您有属性“价格”、“作者”和“标题”。对于手机,您将拥有“屏幕类型”、“操作系统”等。

在 RDBMS 中建模非常困难,因为您不灵活并且用户无法插入任意属性,因此更容易使用针对此类数据优化的文档数据库,以便您可以轻松地按任意属性的值进行搜索和过滤(例如,所有长度>30 且型号=w 的产品)。

于 2013-03-11T02:42:36.133 回答