2009-12-07 3 views
-1

우리는 C로 완전히 작성된 응용 프로그램을 가지고 있습니다. 테이블에서 일부 값을 가져 오는 것과 같은 코드 내부의 테이블 액세스는 Pro * C를 사용합니다. 또한 응용 프로그램의 성능을 높이기 위해 데이터를 가져 오기 위해 일부 테이블을 사전로드합니다. 우리는 일부 입력 필드를 가져 와서 일반적으로 테이블의 출력 필드를 가져옵니다.테이블 액세스 성능

일반적으로 테이블에 약 30000 개의 항목이 있으며 최대 값은 0.1 만 회입니다.

그러나 테이블 항목이 약 1,000 만 항목으로 증가하면 응용 프로그램의 성능에 위험한 영향을 미친다 고 생각합니다.

내가 어딘가 잘못인가? 성능에 실제로 영향을 미치는 경우 응용 프로그램의 성능을 안정적으로 유지할 수있는 방법이 있습니까?

응용 프로그램이 테이블에서 작동하는 방식을 고려할 때 테이블의 행 수가 1,000 만 개로 늘어나는 경우 가능한 해결 방법은 무엇입니까?

+1

실제 질문은 무엇입니까? 귀하의 질문은 정말 이해하기 어렵습니다. 그렇지 않으면 질문에 대한 대답은 "프로파일 러를 사용하지 않으면 알 수있는 방법이 없습니다"입니다. – Sebastian

+0

"1 lakh"은 100입니다.000 in Indian English – MSalters

+0

데이터베이스에서 응용 프로그램 메모리로 1,000 만 행을 복사 중입니까? 단일 행 검색을 위해 데이터가 필요하다고 가정 할 때 코드가 오라클 코드보다 빠르다는 것을 확신하십니까? 그냥 항상 SQL 문을 사용하십시오. 오 ... 성능이 중요합니까 ??? 귀하의 프로그램이 귀하의 코드를 사용하여 0.03 밀리 초가 걸리며 통지 할 오라클 코드를 사용하여 3 밀리 초 (100 배)가 소요된다면? – pmg

답변

0

테이블을 정렬하지 않으면 검색 시간이 비례하여 증가합니다. 잘못된 코드를 작성하지 않으면 예제 (30K 대 1M)에서 검색 시간이 33 배 증가합니다. 나는 점진적으로 (i ++ 스타일) 테이블을 반복한다고 가정합니다.

그러나 테이블을 정렬하는 것이 가능하면 검색 시간을 크게 줄일 수 있습니다. 이는 정렬 된 정보를 검색하는 인덱서 알고리즘이 탐색 할 때까지 모든 요소를 ​​구문 분석하지 않기 때문에 가능합니다. 일반적으로 보조 테이블 (트리, 해시 등)을 사용하여 검색하는 것이 훨씬 빠르며 올바른 대상 요소를 정확히 찾습니다. , 또는 적어도 그것이 마스터 테이블에있는 위치에 대한 더 가까운 추정치를 얻습니다.

물론 요소를 삽입하거나 제거 할 때 또는 검색을 수행 할 때 테이블을 정렬해야하는 번거 로움이 있습니다.

+0

모든 1000 만 항목이 메모리에 미리로드되는 경우 완전히 7GB의 데이터를 메모리에 저장하면 작동하지 않을 것이라고 생각합니다. – Vijay

+0

두 가지 문제가 있습니다. 메모리와 검색 시간입니다. 이 디스크의 거대한 데이터 (솔기 그런 식으로,하지만 나를 수정), 당신은 메모리에로드하여 아무것도 얻지 못한다면 (그것은 OS에 의해 제출 된 페이지를 얻을 것이다). 아마도 디스크의 데이터를 가리키는 포인터를 사용하여 더 빠른 검색 (기준에 따라 다름)에 적합한 해시 테이블을 만들 필요가 있을까요? – jpinto3912

0

'google 해시'로 이동하여 구현을 살펴볼 수 있습니까? 그것이 C++에 있지만

0

1MB 이상 또는 캐시 크기가 증가하면 캐시 미스가 너무 많을 수 있습니다.

테이블을 여러 번 반복하거나 요소를 임의로 액세스하는 경우 많은 캐시 누락이 발생할 수 있습니다.

http://en.wikipedia.org/wiki/CPU_cache#Cache_Misses

0

음, 정말 당신이 데이터로 무엇을하는지에 따라 달라집니다. 전체 키트 및 캐 버틀을 메모리에로드해야하는 경우 합리적인 접근 방법은 큰 대량 크기를 사용하는 것이므로 오라클 왕복 횟수를 줄여야합니다.

전체 결과 세트를 메모리에로드 할 수있는 메모리 자원이 실제로 없다면, 큰 대량 크기는 여전히 Oracle 오버 헤드에 도움이됩니다. 합리적인 크기의 레코드 덩어리를 메모리로 가져 와서 처리하고 다음 덩어리를 가져옵니다.

실제 런타임 환경 및 비즈니스 목표에 대한 자세한 정보가 없으면 누구나 얻을 수있는 구체적인 정보가 없습니다.

문제에 대해 자세히 알려 주실 수 있습니까?