Mongodb Mongo DB或任何nosql DB(Hbase、Cassandra)是如何可扩展的,并且比传统的RDBMS更具优势的?

Mongodb Mongo DB或任何nosql DB(Hbase、Cassandra)是如何可扩展的,并且比传统的RDBMS更具优势的?,mongodb,cassandra,nosql,hbase,Mongodb,Cassandra,Nosql,Hbase,我仍然无法实时说明nosql是如何受益的,而我们在传统的RDBMS中也有索引。如果有人能推荐柱状数据库在实际应用中的优势,特别是在使用结构化、半结构化或非结构化数据方面。关系型关系数据库中的R是Mongo缺少的最大的东西。几乎没有办法让数据库了解不同表集合中的条目是如何相互关联的。RDBMS的一大优势是能够定义数据库将强制执行的约束,最典型的是外键约束,它确保一个表中的id引用另一个表中的现有id 数据库能够实施此类约束的一个要求显然是,所有内容都需要经过一个真实来源,并且需要一个中心实体交叉检

我仍然无法实时说明nosql是如何受益的,而我们在传统的RDBMS中也有索引。如果有人能推荐柱状数据库在实际应用中的优势,特别是在使用结构化、半结构化或非结构化数据方面。

关系型关系数据库中的R是Mongo缺少的最大的东西。几乎没有办法让数据库了解不同表集合中的条目是如何相互关联的。RDBMS的一大优势是能够定义数据库将强制执行的约束,最典型的是外键约束,它确保一个表中的id引用另一个表中的现有id

数据库能够实施此类约束的一个要求显然是,所有内容都需要经过一个真实来源,并且需要一个中心实体交叉检查数据;它不能分散,因为两个不同的主要来源之间的差异可能导致数据不一致

在Mongo中,每个数据块都非常独立。它不引用数据库以任何方式强制执行的其他条目。Mongo也有从弱到否的特性,这意味着对插入或更新几乎没有保护。一句话:Mongo在数据一致性方面几乎没有保证,主要是将这些问题转移到应用层。这使得它的工作更加分散

例如,扩展Mongo的一个好方法是使用多个辅助服务器,这些服务器复制一个主服务器进行只读访问。无法保证主设备和辅助设备在任何给定时间都是同步的,写入主设备的数据可能需要几秒钟的时间才能流到辅助设备。但这允许您拥有几乎无限数量的二级只读服务器,这对于在高读负载下扩展数据库非常有用

Mongo处理集群的特殊方式也使其具有很高的正常运行时间,因为如果服务器宕机,集群将自动重新组织为主要和次要集群。这甚至允许在没有任何客户端停机的情况下进行滚动维护

在编写过程中不必强制执行复杂的约束或事务一致性,也允许对数据库进行更快速的编写。同样,代价是允许数据不一致。这就是为什么大多数编写都意味着在集合中原子地更新单个文档,而不保证其他文档,这与跨多个表的RDBMS事务性更新不同

我不建议Mongo存储财务分类账之类的东西,因为财务分类账在很大程度上依赖于事务保证的一致性。然而,像Twitter这样的东西是一个完美的例子:许多独立的数据片段必须被大量的客户端读取。

关系数据库中的R是Mongo缺少的最大的东西。几乎没有办法让数据库了解不同表集合中的条目是如何相互关联的。RDBMS的一大优势是能够定义数据库将强制执行的约束,最典型的是外键约束,它确保一个表中的id引用另一个表中的现有id

数据库能够实施此类约束的一个要求显然是,所有内容都需要经过一个真实来源,并且需要一个中心实体交叉检查数据;它不能分散,因为两个不同的主要来源之间的差异可能导致数据不一致

在Mongo中,每个数据块都非常独立。它不引用数据库以任何方式强制执行的其他条目。Mongo也有从弱到否的特性,这意味着对插入或更新几乎没有保护。一句话:Mongo在数据一致性方面几乎没有保证,主要是将这些问题转移到应用层。这使得它的工作更加分散

例如,扩展Mongo的一个好方法是使用多个辅助服务器,这些服务器复制一个主服务器进行只读访问。无法保证主设备和辅助设备在任何给定时间都是同步的,写入主设备的数据可能需要几秒钟的时间才能流到辅助设备。但这允许您拥有几乎无限数量的二级只读服务器,这对于在高读负载下扩展数据库非常有用

Mongo处理集群的特殊方式也使其具有很高的正常运行时间,因为如果服务器宕机,集群将自动重新组织为主要和次要集群。这甚至允许在没有任何客户端停机的情况下进行滚动维护

在编写过程中不必强制执行复杂的约束或事务一致性,也允许对数据库进行更快速的编写。同样,代价是允许数据不一致。这就是为什么大多数编写都意味着在集合中原子地更新单个文档,而不保证其他文档,这与跨多个表的RDBMS事务性更新不同


我不建议Mongo存储财务分类账之类的东西,因为财务分类账在很大程度上依赖于事务保证的一致性。然而,像Twitter这样的东西是一个完美的例子:许多独立的数据片段必须被大量的客户端读取。

很大程度上,这取决于您希望数据存储做什么。如果您希望能够扩展以满足存储或操作需求,RDBMS只能做到这一点

它涉及到如何扩展以满足需求。RDBMS实际上只能垂直扩展。也就是说,添加