据我了解,面向文档的 NoSQL DB 是 KV 模型的“扩展”,因为它们允许您查询多个查找键。但是一旦某个东西成为“文档”,我感觉它已经内置了一个关系模型:
"myJson": {
"fizz": 4,
"buzz": "true",
"widget" : {
...etc.
}
}
对我来说,我看不出此 JSON 与带有 fizz
和 buzz
字段的 json_objects
表之间的区别,并且与第二个小部件
表的外键关系。
像 Cassandra 这样的“列式”数据库听起来就像直接的关系/表数据库。
所以我问:面向文档和面向列的数据库有什么不同,以及它们(与 RDBMS)有何区别?它们最适合解决哪些问题,从而在某些情况下优于关系数据库?提前致谢!
最佳答案
首先我想说,您说的NoSql 与关系数据库不同是非常正确的,因此很难进行比较。话虽如此,两者之间有许多可以比较的重大区别。
缩放
尽管您可以对 MySql 数据库进行分片,但有 issues具有分片和 enforcing ACID properties当 RDMS 位于多台机器上时将非常具有挑战性,像 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 属性和事务。
- 您的应用程序/网站需要快速发展,但您希望从小规模开始。
- 您更关心的是写入数据而不是读回数据。 (发布了很多推文,但并未全部被阅读)
- 系统的可用性比 100% 更新数据更重要。 (因此,如果您是一家银行,您不需要 NoSql,但如果您是一个需要 100% 正常运行时间的网站,那么它可能是一个不错的选择)
- 如果写入的数据需要 100% 成功,但最终一致性不成问题。
仅作为一个直观的说明,这对我理解不同的 sql 解决方案适合数据库世界以及每个解决方案如何满足目的有很大帮助。
关于mongodb - 关系数据库与列式数据库和文档数据库——它们不是一回事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15303343/