2012-04-18 2 views

답변

1

Vertica 문서의 Concepts Guide.pdf (23 페이지)에서.

투영법은 쿼리 실행을 최적화하는 형식으로 데이터를 저장합니다. 쿼리에서 사용될 때마다 결과 집합을 계산하지 않고 디스크에 결과 집합 을 저장한다는 점에서 이들은 구체화 된 뷰와 유사합니다.

계획은 SQL의 최종 사용자에게 투명합니다. Vertica 쿼리 옵티마이 저는 모든 쿼리에 사용할 최적의 예측을 자동으로 선택합니다.

투영을 통해 투영 성능을 향상시키기 위해서는 투영법을 작성해야합니다. Vertica는 자동으로 해당 쿼리에 사용할 최상의 투영법을 선택합니다. (참고 : 특정 투영을 테이블 대신 구체적으로 쿼리하여 강제로 수행 할 수 있음)

투영에 대한 이해가 어디 있는지 알 수는 없지만 투영에 대한 구체적인 질문을 통해 특정 투영에 대해 자세히 설명 할 수 있습니다. 전철기. 개념에 대한 일반적인 견해를 얻으려는 경우 개념 안내서를 읽거나 읽는 것이 좋습니다.. http://my.vertica.com

+0

감사합니다. Nija. 답장은 매우 유용합니다. 이것에 대해 더 이상의 질문이 없습니다. 내 생각에 프로젝션은 결과 세트를 디스크에 저장한다는 점을 제외하고는 VIEWS와 유사합니다. 반면 뷰는 쿼리에서 사용할 때마다 테이블의 데이터를 계산합니다. VIEW를 PROJECTION의 대체품으로 사용할 수 있습니까? 그렇다면 성능 문제가 있습니까? – Murali

+0

@Murali : Vertica의'Views'는 기본적으로 쿼리입니다. (_SQL Reference Manual.pdf_에서) "[in] 뷰가 포함 된 쿼리에서 뷰 이름은 뷰의 정의 쿼리로 바뀝니다." – Nija

+0

감사합니다. btw, http://my.vertica.com에서 Concepts Guide.pdf를 다운로드 할 수 없었습니다. 허가 된 사용자 만 다운로드 할 수 있습니다. 가입했지만 아직 활성화 메일을받지 못했습니다. 다른 방법으로 .pdf 안내서를 구할 수 있습니까? – Murali

7

Vertica는 색인을 사용하여 데이터를 찾습니다.

개념적으로 SQL을 사용하여 여전히 테이블에 액세스합니다. 후드 아래에는 표의 데이터가 예측에 저장되어 있으며 다른 쿼리에 맞게 최적화 할 수 있습니다.

저는 이것을 카드 덱을 나타내는 테이블로 생각하고 싶습니다. 포커를하는 경우 "Select * from CardDeck limit 5;"와 같은 말을 아직도 할 것입니다.

의는 다음과 같은 열이 정의 된 테이블이 있다고 가정 해 봅시다 :

FaceValue의 INT (그냥 얼굴 값의 int 있다고 가정하자), 정장 VARCHAR를 그때 내 예측을 만들 수 있습니다 (10)

(I 파티셔닝, 수퍼 프로젝션, 버디 - 투영 등을 생략 한 것).

FaceValue, FaceValue 의해 CardDeck 순서에서 마음대로 선택 으로 투영 CardDeck_p1 ( FaceValue ENCODING RLE, 슈트 ) 를 생성;

투영 CardDeck_p2 ( FaceValue, 슈트 ) FaceValue으로는, 슈트 CardDeck 순서에서 마음대로 선택을 작성;

이제 각 열에는 영사법에서 정의 된 다른 유형의 인코딩을 얻을 수 있습니다.그리고 이전 버전을 사용 해본 이후로 많이 사용하지 않은 데이터베이스 디자이너가 여러분을 위해 계획을 디자인하는 데 도움이 될 수 있습니다.

카드 유례의 갑판으로 돌아가서 카드 갑판에 액세스하고 싶다고 상상해보십시오.하지만 카드를 뒤섞어서 사용하고 싶다고 상상해보십시오. Vertica의 투영법은 다른 셔플을 제공합니다. 테이블은 실제로 투영에 저장된 데이터에 액세스 할 수있는 구조입니다. 그러나 SQL을 작성하는 경우 테이블에 액세스합니다.

+0

고맙습니다, geoffrobinson! – Murali

1

geoff의 답변에서 강조한 점을 강조하고 싶습니다. 프로젝션은 디스크의 물리적 구조입니다. 테이블에 대한 여러 프로젝션 정의는 쿼리 성능을 향상시킬 수 있지만 디스크 공간이 증가하고로드 시간이 느려집니다 (각 프로젝션에 행을 배치해야하기 때문에).

테이블에 모든 열과 부분 투영을 저장하는 수퍼 프로젝션이 있습니다. 지원/최적화하려는 쿼리가 테이블의 열 집합 만 필요로하는 경우 부분 프로젝션을 사용합니다. 각 테이블에는 하나 이상의 수퍼 프로젝션이 필요합니다. 정의하지 않으면 Vertica는 성능이 매우 떨어지는 기본값을 제공합니다.

권장 사항은 데이터베이스 디자이너 도구를 사용하여 테스트 데이터와 테스트 쿼리를 사용하여 테이블을 분석하는 데 도움이되는 것입니다. 그 후에는 예측을 제안 할 수 있습니다. 개인적으로 이런 식으로 좋은 결과를 얻지는 못했지만 DBD 도구를 사용하는 방법을 아는 것은 Vertica에서 교육을받는 모든 사람들을위한 커리큘럼의 일부 여야합니다.

+0

감사합니다 kimbo305 – Murali

0

당신이보기에 익숙한 것 같습니다. 투영은 개념적 관점과 비슷하지만 둘 다 다른 차원에서 캐시합니다. 간단히 말해서, 뷰는 쿼리 문을 캐시하고 프로젝션은 쿼리 결과를 캐시합니다.

쿼리 문을 캐시합니다. 사전 정의 된 쿼리에 이름을 지정한 다음 나중에 호출합니다. 보기 조회가 작성되면 실행되지 않습니다. 뷰를 사용하여 쿼리를 수행하면 쿼리가 일반 쿼리이기 때문에 성능이 향상되지 않습니다.

투영은 쿼리 결과을 캐시합니다. 프로젝션 쿼리는 생성 할 때 실행되며 결과는 스토리지에 저장됩니다. 쿼리 결과를 활용할 수있는 쿼리를 수행하면 Vertica는 이러한 예측을 사용하여 쿼리에 응답하므로 쿼리 성능이 향상됩니다. 투영법이 생성 된 후에는 꼭해야 할 일이 없으며, 쿼리가 도움이 될 수 있다면 Vertica는 자동으로 투영법을 선택합니다. 쿼리는 프로젝션의 하위 열을 사용하고 정렬 순서가 동일하므로 프로젝션을 쿼리에 사용할 수 있습니다.

뷰는 프로젝션과 같고 테이블 열의 하위 집합을 선택하고 다른 테이블과 조인을 수행 할 수 있으며, 특정 열에 의한 순서. 그러나 조회 결과를 저장하기 위해 다른 프로젝션이 자체 공간을 차지하므로 더 많은 프로젝션이 작성 될수록 더 많은 공간이 소비됩니다. 관련 원본 테이블이 업데이트되는 동안 프로젝션이 자동으로 업데이트됩니다. 업데이트 프로세스는 백그라운드에서 실행되며 쿼리 복잡성 및 데이터 크기에 따라 오래 걸릴 수 있습니다. 따라서 프로젝션은 많은 쓰기보다는 많은 읽기에 더 적합합니다.유스 케이스의 관점에서 볼 때 실시간 웹 대시 보드와 비교할 때 프로젝션이보고에 더 적합합니다.

구현 세부 사항에서 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; 

당신이 사용할 수있는 무엇을보고 문을 설명 예측은 쿼리 계획에 사용됩니다. 이렇게하면 쿼리 성능을 향상시키는 데 도움이됩니다.