2012-04-18 42 views

回答

1

来自Vertica文档的概念指南.pdf(大约在第23页)。

投影以优化查询执行的格式存储数据。 它们与物化视图类似,因为它们将结果集 存储在磁盘上,而不是每次在查询中使用它们时计算它们。

预测是透明给最终用户的SQL。 Vertica查询 优化程序会自动选择用于任何 查询的最佳投影。

为了提高查询性能,所有需要完成的投影都是为了创建投影。 Vertica将自动选择用于该查询的最佳投影。 (注意:可以通过特定查询来强制执行特定投影,而不是查询表格)

我不知道您对预测的理解在哪里,但有关预测的更具体的问题将允许更详细地阐述特定点。如果您希望了解我推荐的概念并阅读概念指南.pdfhttp://my.vertica.com

+0

谢谢尼娅。您的回复非常有用。我对此还有几个问题。 我的理解是,PROJECTIONS类似于VIEWS,不同之处在于投影将结果集存储在磁盘上,而视图每次在查询中使用它们时都会计算表中的数据。 我可以使用VIEW作为PROJECTION的备用项目吗?如果是这样,我会得到任何性能问题吗? – Murali 2012-04-19 06:12:44

+0

@Murali:Vertica中的“Views”本质上是查询。 (来自_SQL Reference Manual.pdf_)“[in]包含视图的查询,视图名称将被视图的定义查询替换” – Nija 2012-04-19 16:58:14

+0

谢谢。顺便说一句,我无法从http://my.vertica.com下载Concepts Guide.pdf。看来,只有授权用户才能下载。我注册了,但还没有收到激活邮件。有没有其他方法可以获得.pdf指南? – Murali 2012-04-19 17:54:20

7

Vertica不使用索引来查找数据。

从概念上讲,您仍然使用SQL访问表。但在引擎盖下方,表格中的数据存储在投影中,您可以针对不同的查询进行优化。

我喜欢把它看作代表一副牌的桌子。如果玩扑克,你可能仍然会说“从CardDeck限制5选择*”。

比方说,你有以下的列定义的表:

秀场INT(让我们只是假设,面值有整型), 套装VARCHAR(10)

我可以创建我的预测(我省略关于分区,超级预测,好友预测等的细节)。

创建投影CardDeck_p1 ( ENCODING秀RLE, 套装 ) 作为 选择秀,从由秀CardDeck顺序套装;

创建投影CardDeck_p2 ( 秀, 套装 ) 作为 选择秀,从由套装CardDeck顺序套装;

现在,每列可以得到不同类型的投影中定义的编码。而数据库设计人员,自从我使用旧版本以来,我并没有多少使用它,可以帮助您设计预测。因此,回到卡片类比的套牌,想象你想要访问一副牌,但你想有不同的洗牌卡。 Vertica中的投影为您提供了不同的洗牌方式。表格实际上是一个构造,它允许您访问存储在投影中的数据。但是如果你正在编写SQL,你可以访问表。

+0

非常感谢geoffrobinson! – Murali 2012-04-19 05:49:56

1

我想强调一下在geoff的答案中提出的观点 - 投影是磁盘上的物理结构。为表定义多个投影可以提高查询性能,但代价是磁盘空间增加和加载时间较慢(因为您的行必须放入每个投影中)。

有超级投影将所有列存储在表中以及部分投影。当您试图支持/优化的查询只需要表格中的一部分列时,就可以使用部分投影。每张桌子至少需要一个超级投影。如果您没有定义一个,Vertica将提供默认的一个,这可能会导致性能很差。

建议的做法是让Database Designer工具帮助您使用测试数据和测试查询分析您的表格,之后它可以为您提供投影。我个人没有以这种方式获得好的结果,但知道如何使用DBD工具应该成为Vertica培训任何人的课程的一部分。

+0

谢谢kimbo305 – Murali 2012-04-19 10:56:50

0

看起来你似乎很熟悉意见。预测与概念上的观点非常相似,它们都缓存了某些内容,但是处于不同的级别。简而言之,视图缓存查询语句,而投影缓存查询结果。

视图缓存查询语句。您给预定义查询命名,然后调用它们。查看查询在创建时不会执行。当您使用视图执行查询时,由于它们只是普通查询,所以不会得到任何性能改进。

投影缓存查询结果。投影查询在创建时执行,并且结果在存储上保留。当您执行任何可以利用查询结果的查询时,Vertica将使用这些投影来响应查询,从而提高查询性能。创建投影之后,您无需执行任何特殊操作,Vertica将自动选择投影,前提是可以有利于查询。该投影可用于查询,因为该查询使用投影的子集列,具有相同的排序顺序等。

像视图这样的投影,您可以选择表列的子集,与其他表执行联接,按特定列排序。但是,不同的预测会占用自己的空间来保存查询结果,创建的投影越多,它们将被消耗的空间就越多。在更新相关源表时,投影会自动更新。更新过程在后台执行,可能需要很长时间,具体取决于查询复杂性和数据大小。因此,预测更适合许多读取,而不是许多写入。从用例角度来看,与实时Web仪表盘相比,预测更适合报告。

在实施细节中,Vertica中的表格都是逻辑的。表中的所有数据都存储在每个关联的超级投影中。超级投影包含表格中的所有列,并且默认情况下会自动创建。所有其他投影均来自超级投影。

Vertica的将决定什么样的预测将被用于查询,但你也可以指定预测的名义直接迫使Vertica的使用它们:

-- List all projections 
SELECT projection_name FROM projections; 

-- Force to use super projection, _super is the suffix of the super projection 
SELECT * FROM FACT_TABLE_super; 

您可以使用EXPLAIN语句看什么在查询计划中使用投影。这将帮助您提高查询的性能。