关系与列式和文档数据库 - 它们不是同一个吗?

时间:2013-03-08 21:09:15

标签: mongodb cassandra document-oriented-db column-oriented nosql

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

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

对我来说,我没有看到这个JSON和json_objects表与fizzbuzz字段之间的区别,以及与第二个{{的外键关系1}}表。

和“柱状”DB一样,像Cassandra听起来就像是直接的关系/表DB。

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

2 个答案:

答案 0 :(得分:17)

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

<强>缩放
虽然你可以对MySql数据库进行分片,但是当有多台机器上的RDMS时,issues有分片和enforcing ACID properties非常具有挑战性,像Cassandra这样的NoSql解决方案因其能够在没有问题的情况下成长而闻名管理400 nodes in a cluster没有问题。不仅可以轻松扩展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数据库针对high write speeds进行了优化,而RDBM则旨在实现高读取速度。但即使考虑到这一点,NoSql解决方案在读取时仍倾向于outperform RDBMs系统。这是因为NoSql数据库没有实现许多减慢关系模型中读/写/更新操作的功能,例如ACID属性和事务。

When should it be used

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

只是为了一个视觉插图,这帮助我了解了不同的sql解决方案适合数据库世界的位置以及每个解决方案如何符合目的。

Database Triad - Availability, Consistency and Partition Tolerance

答案 1 :(得分:2)

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

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

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