NoSQL (Cassandra/Mongo) vs RDBMS



嗨,我正在从系统设计的角度学习NoSQL数据库的功能,还了解到许多大公司使用分片RDBMS而不是NoSQL数据库来保存数据。

这是否意味着NoSQL数据(Cassandra/MongoDB(的唯一优势是因为它是现成的分布式解决方案,维护成本低廉?

读到许多大公司使用shard-rmdb

在我的上一份工作中,我的组织支持手动分片Postgres解决方案。它给我们带来了巨大的痛苦,因为它的大小很难管理和维护。请记住,RDBMS并不是真的设计成那样工作的。

nosql的唯一优势。。。是因为它是现成的分布式解决方案

这个决定实际上是关于权衡的。当您的数据工作负载无法由单个DB实例处理,或者您需要在没有单点故障的情况下正常运行时,NoSQL可以帮助您。为了分区容忍度和可用性而牺牲一致性的数据库("AP"数据库(通常被发现能够以很小的延迟处理大的工作负载,因为它们能够将数据(以及查询(传播到多个服务器实例。

此外,如果您的数据需要具有地理位置或数据中心意识,您需要一个支持这一点的数据库。试图让数据库产品以其原始设计没有考虑到的方式工作,是一种痛苦的处方。

维护成本低廉

询问任何经营企业数据库组织的人,他们会告诉你NoSQL维护起来并不便宜(或容易(。当然,你可能会得到一个开源产品,你不必";购买;但你需要(通常是高薪的(数据库工程师来维护它

nosql在设计上具有可扩展性,但sql似乎也可以实现同样的功能,主要问题只是在扩展时的维护/配置。

这取决于情况。您计划扩展到多大,需要支持多少数据复制副本?像苹果这样的大型企业拥有运行Apache Cassandra的数千台服务器。他们这样做是因为iCloud需要扩展以支持9亿iPhone用户的需求。他们可以根据对计算资源的需求轻松地添加(放大(或删除(缩小(。

使用关系数据库实现这种级别的可扩展性需要比使用Cassandra(NoSQL(做更多的工作。当你发现你需要扩大规模时,你基本上是在考虑一个数据重载场景(因为碎片大小基本上会改变(,以将数据传输到新的实例。数据库团队将(非常快(达到扩展RDBMS所需工作量不切实际的地步。

另一个方面是,客户端应用程序如何知道要发送查询的关系数据库服务器?对于大多数关系数据库,您最终将不得不以某种方式构建或增强该逻辑层。当数据库实例的数量发生变化时,您也需要应用程序了解这一点。NoSQL数据库负责节点发现,并且(大多数(是抽象的,因此客户端应用程序不需要担心它

还要记住,并不是所有的NoSQL数据库都是平等创建的。在某些产品上,只有某些节点会接受写入。在某些产品上,任何节点都可以处理读或写操作。关系数据库对此没有任何概念,所以您也必须考虑到这一点。

tl;dr

由于缩放,它比仅进行维护要复杂得多。如果不是这样的话,每个主要的关系数据库都会有一种简单的方法来处理它,而NoSQL数据库就无关紧要了。但这并没有发生。

关系数据库和nosql数据库是不同的野兽。关系数据库在大多数用例中都能很好地服务,但在满足数百万条记录在很短的时间内到达的网络规模数据方面,它们做得不够。为了解决这些问题(网络规模的数据(,设计了nosql解决方案。因此,不要认为组织只为了廉价的维护而喜欢nosql,它是定义使用哪种数据库技术的用例。

最新更新