据我所知,面向文档的NoSQL DB是KV模型的“扩展”,因为它们允许您查询的不仅仅是单个查找键。但是,一旦某个东西成为“文档”,我觉得它已经有了一个关系模型:
"myJson": {
"fizz": 4,
"buzz": "true",
"widget" : {
...etc.
}
}
对我来说,我没有看到这个JSON和json_objects
表与fizz
和buzz
字段之间的区别,以及与第二个{{的外键关系1}}表。
和“柱状”DB一样,像Cassandra听起来就像是直接的关系/表DB。
所以我要问:面向文档和列的DB有什么不同,以及区别(与RDBMS)有关它们的区别?在某些情况下,它们最适合解决哪些问题使它们优于关系数据库?提前谢谢!
答案 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属性和事务。
只是为了一个视觉插图,这帮助我了解了不同的sql解决方案适合数据库世界的位置以及每个解决方案如何符合目的。
答案 1 :(得分:2)
在没有架构数据库中,您没有固定的列和类型。
例如,产品'牛仔裤'可以具有属性'价格','长度'和'模型'(M / W),但对于产品手册,您有属性'价格','作者'和'标题'。对于手机,您将拥有“屏幕类型”,“操作系统”等。
在RDBMS中很难对其进行建模,因为您不灵活,用户无法插入任意属性,因此更容易使用针对此类数据进行优化的文档数据库,以便您可以轻松地按值搜索和过滤关于任意属性(例如,长度> 30且模型= w的所有产品)。