我在网上读到了一些关于非结构化数据的文章,比如这一个。
上面写着
非结构化数据是不按照预先设定的数据模型或模式排列的信息,因此不能存储在传统的关系数据库或关系数据库管理系统中。
但是RDBMS允许BLOB存储。因此,我们可以将非结构化数据存储在传统的关系数据库管理系统中。
他们给出的非结构化数据的例子是电子邮件、文本文件、媒体文件等。首先,这些类型是如何非结构化的?即使是这样,像MongoDB这样的非关系DBMS如何能够比RDBMS的BLOB存储更好地存储/检索它呢?
我在任何地方发现的非结构化数据的一个常见例子就是在像亚马逊这样的电子商务公司中存储产品的信息。每个产品都有不同的属性,因此在NoSQL数据库管理系统(如MongoDB )中,我们可以拥有一个名为Products的集合,在其中我们将获得所有产品的信息。但是,通过为每个产品创建一个单独的表,我们可以使用RDBMS存储这些数据。这可能是一种更干净的存储数据的方法。那么,为什么要为此使用非关系DBMS呢?
所以我的问题是:
谢谢!
发布于 2021-02-26 12:44:35
不幸的是,当一个NoSQL数据库系统比关系数据库系统更好的时候,这个问题的答案有点主观,这就是为什么这个问题引起了激烈的争论。大量的错误信息导致了错误的含义,即NoSQL数据库比关系数据库更快,特别是对于大数据,这不一定是正确的。这一内涵是基于NoSQL数据库的起源故事,那些拥有大数据的公司确实试图解决规模问题,但这并不是因为扩展性能,而是因为灵活性,使他们能够作为开发人员/基础设施管理员更快地扩展规模。(在我看来,随着现代云服务以及Azure和AWS等解耦服务的提供,这个问题现在大多是以另一种方式解决的。)但是直到今天,这些公司,比如Facebook,除了一个NoSQL数据库系统之外,仍然利用一个关系数据库管理系统来获取类似数量的数据,因为这不是一个数据库性能的问题,而是一个依赖用例的正确的工作使用正确工具的灵活性问题。
正如前面提到的,在较高的级别上,NoSQL数据库在一致性的权衡上具有灵活性的优势,这是酸数据库原理之间为最终一致性而进行的权衡。这种灵活性允许NoSQL数据库存储非结构化、半结构化和高度可变的结构化数据;它允许在跨多节点数据库集群水平扩展时很容易地分布该数据库。由于它可以存储数据的模式具有灵活性,所以它不必担心多节点集群中的一个节点与另一个节点之间的模式更改。此外,由于它最终是一致的,所以它通常不必担心集群中的每个节点都有100%相同的数据。
由于它具有水平扩展的灵活性,人们可以松散地(在高级别上)争辩说,在传统的关系数据库管理系统上使用NoSQL时,这就是性能的好处所在。但是,其他的权衡是,在处理NoSQL数据库时,由于缺乏一致的模式,转换和查询数据的能力变得有限。我希望做到客观,所以我将赞扬MongoDB提供了多种查询数据的方法,我认为这些方法在设计上也更具有程序性,因此对于一个对传统关系逻辑不太熟悉的开发人员来说,可能会有一点用户友好。但是,与RDBMS的实际保证一致性相比,在保证最终一致性的情况下,只有这么多的事情可以做。
至于NoSQL数据库的实际用例,这在很大程度上取决于数据的模式(或缺乏数据),以及开发人员需要支持的特定用例和查询类型。您所读过的一些示例是潜在的用例,例如Email。就我所定义的模式而言,Emails是半结构化的。它们有一些一致的字段,如From、SentDateTime、ReceivedDateTime和Subject,但它们都有高度可变的字段,如To、CC、BCC和Body。因此,在这样的场景中,NoSQL数据库可能是有意义的,在这种情况下,您要做的查询类型只有谓词依赖于From和/或SentDateTime字段。这些将是Emails表中的键,消息和To字段的Body将是存储在表中的实体(可能是JSON格式)的其余部分。(请注意,术语表在这里用于概念化。)
当然,您是在对自己说,“但您可以在RDBMS中完成同样的任务”--这是事实,但是NoSQL的灵活性及其最终的一致性允许您在水平缩放时更容易地使用上面的示例表并在多个节点上分割它。因此,即使是NoSQL数据库的一些主要特性也可以在传统的关系数据库中使用(在某种意义上,从特性的角度来看,NoSQL是关系数据库的子集),但它的灵活性和它必须遵循的规则与传统的关系数据库有很大的不同,允许它在我们生活的世界中占有一席之地。
话虽如此,但随着时间的推移,即使是最初意义上的NoSQL系统也发生了很大的变化,并适应了数据库世界的发展(或者那些还没有死掉的系统)。NoSQL和关系数据库管理系统之间的界限继续变得模糊(变得更好),因为两者都在增长,以适应它们从一个或另一个中缺失的东西。例如,兼容ACID的NoSQL数据库现在已经存在,而具有更容易水平扩展功能的关系数据库也存在。
https://dba.stackexchange.com/questions/286078
复制相似问题