2011-09-22 2 views
0

많은 양의 데이터를 반환 할 때 데이터베이스 저장 프로 시저의 성능이 저하됩니까? VoltDB 말아야에서

http://community.voltdb.com/DosAndDonts

그들은 상태

특히 다중에 대한 (예 : SELECT * FOO에서 아무 제약으로) 많은 양의 데이터를 반환하는 쿼리를 작성하지 마십시오 - 파티션 거래. 저장된 절차에 의해 반환 된 데이터를 보수적으로 관리하십시오.

이것은 내가 가진 유스 케이스 중 하나입니다. 이 유형의 쿼리에 적합하지 않거나 VoltDB에만 해당되는 스토어드 프로 시저의 측면이 있습니까? 이 시나리오에서는 성능이 Postgres와 같은 전통적인 RDBMS보다 더 떨어질 수 있습니까?

편집 : 내 쿼리는 foo는에서 * 꽤 선택이 아니라 내가 특정 날짜 범위 사이의 모든 금융 거래를 선택해야하고이 100m 행

답변

3

모든 데이터베이스는 큰 결과 집합을 사용자에게 다시 전송하기 위해 구체화 및 I/O 비용을 지불해야합니다.

그러나 VoltDB와 구체적으로 이야기 할 수 있습니다.

VoltDB에서 저장 프로 시저는 모두 트랜잭션입니다. 데이터베이스의 많은 부분을 선택하는 결과 세트조차도 다른 동시 프로 시저와 완전히 분리되어 있습니다. 그 결과 집합의 튜플은 내부적으로 일시적으로 버퍼링 (예 : 파티션 간 순서 지정 또는 제한)하기 위해 버퍼링 한 다음 사용자에게 반환해야합니다.

사용자에게 반환하기 위해 수 밀리 초 (또는 초)의 I/O가 걸릴 수있는 결과와 다중 파티션 절차의 조정 노드에서 발생하는 집계를 완벽하게 격리해야하는 필요성이 최대 결과 세트 크기.

향후 릴리스에서이 제한 사항을 해결할 것으로 판단됩니다. 많은 사람들이 사용자가 설명하는 것과 유사한 데이터 액세스 요구 사항을 가지고 있습니다.

1

성능 문제가 큰 데이터 전송의 인을 초과 할 수 있습니다. 이는 일반적으로 모두 데이터베이스에 해당합니다.

데이터베이스가 많은 양의 데이터를 반환해야하는 경우 많은 리소스 (예 : 메모리, CPU, 네트워크 IO)를 사용해야 성능이 저하됩니다.

네트워크 IO만으로도 상당한 양의 데이터 인 것처럼 데이터 전송이 완료 될 때까지 네트워크를 통해 이동할 수 없습니다.

+1

나는 VoltDB에 대해 아무 것도 모른다. 그러나 나는 동의 할 의향이있다.'SELECT * FROM FOO'는 대개 나쁜 생각인데, 전통적 데이터베이스 또는 인 메모리 –

+0

당신이 필요로하는 것보다 더 많은 데이터를 리턴하지 않습니다. 이것은 프로덕션 코드에서 select *를 사용하지 않는 것을 포함합니다. 조인 열이 조인 인 경우 espcially 반복되므로 데이터가 필요하지 않습니다. 또한 누군가가 실제로 반환 한 3 백만 건의 모든 레코드를 읽거나 페이징을 할 수 있으며 현재 페이지에 필요한 것만 반환 할 수 있습니까? – HLGEM

0

결과를 사용자 인터페이스 나 유사한 유스 케이스에 표시하려면 SELECT * FROM FOO를 쿼리하는 경우 반환되는 데이터의 크기와 트랜잭션 실행 시간을 제한하는 좋은 방법입니다 . a에 페이징 예제가 있습니다.

다른 데이터베이스 나 시스템으로 내보내려면 VoltDB에서 데이터를 추출하려면 VoltDB의 Export을 사용하는 것이 좋습니다.

관련 문제