为啥在物化视图上使用 NoSQL?

Posted

技术标签:

【中文标题】为啥在物化视图上使用 NoSQL?【英文标题】:Why use NoSQL over Materialized Views?为什么在物化视图上使用 NoSQL? 【发布时间】:2011-02-06 04:00:15 【问题描述】:

最近有很多关于 NoSQL 的讨论。

我听说人们使用 NoSQL 的第一个原因是因为他们开始对 DBMS 数据进行如此多的非规范化,以提高性能,最终他们只得到一个表,所有数据都在该表中。

但是,使用物化视图,您可以保持数据规范化,同时将其存储为单个表视图,原因与使用 NoSQL 的原因相同。

因此,为什么有人会使用 NoSQL 而不是物化视图?

【问题讨论】:

我认为 NoSql 背后的真正原因是 SQL 无法扩展到 > PB 的数据。缺乏规范化,以及一般的高级 sql 特性(例如 (coff) 保证一致性),是分布式架构的结果,更多的是副作用,而不是实际的设计目标。 【参考方案1】:

一个原因是物化视图在有大量 INSERT 与 SELECT 的 OLTP 情况下表现不佳。

每次插入数据时,物化视图索引都必须更新,这不仅会减慢插入速度,还会降低选择速度。使用 NoSQL 的主要原因是性能。通过基本上是一个哈希键存储,您可以获得非常快的读/写,但代价是对约束的控制更少,这通常必须在应用层完成。

因此,虽然物化视图可能有助于读取,但它们并不能加快写入速度。

【讨论】:

这是不正确的。 Oracle 表示物化视图极大地提高了性能。 oracle.com/technology/products/oracle9i/daily/jul05.html @JustinT:他们的营销当然会这么说。现实情况是,在某些情况下(阅读量大的情况)它们很棒。在写入繁重的情况下,它们并不是很好,这就是我在上面通过指定 OLTP 提出的观点。 与什么相比大大提高了性能? “Oracle9i 显着改进了物化视图的功能”..与之前的速度相比。无法与 NoSQL 风格架构相比。 您的原始帖子只是说“一个原因是物化视图在 OLTP 类型的情况下表现不佳。”并没有写具体的表现。如果应用程序是重读的,那么您的陈述将是不正确的。 @Justin - OLTP 对我来说意味着大量写入。我会将帖子更新为明确的。【参考方案2】:

NoSQL 并不是要从 SQL 数据库中获得更好的性能。当数据完全没有特殊原因在 SQL 中时,它是关于考虑默认 SQL 存储以外的选项。

如果您已经建立了具有设计良好的架构的 SQL 数据库,并且您唯一的新要求是提高性能,那么添加索引和视图绝对是正确的方法。

如果您需要保存一个您知道只需要通过其键访问的用户配置文件对象,SQL 可能不是最佳选择 - 您不会从具有各种查询功能的系统中获得任何收益使用,但是能够在提高您将使用的查询的性能的同时省略 ORM 层是非常有价值的。

【讨论】:

数据不能在 SQL 中。你的意思是“在关系中”吗?离开 SQL 语言和离开关系模型是有区别的,尽管“NoSQL”将两者结合起来。另请注意,索引和视图在繁重的插入/更新环境中帮助不大。【参考方案3】:

另一个原因是 NoSQL 的动态特性。您创建的每个视图都需要事先创建,并“猜测”应用程序如何使用它。

使用 NoSQL,您可以随着数据的变化而变化;动态改变您的数据以适应应用程序。

【讨论】:

以上是关于为啥在物化视图上使用 NoSQL?的主要内容,如果未能解决你的问题,请参考以下文章

视图 VS 物化视图

PG 物化视图

物化视图

在Postgres中的物化视图上创建主键

Oracle物化视图

oracle物化视图不会自动更新是怎么回事