1

시간당 약 1,500 명의 고유 사용자가있을 것으로 예상되는 웹 응용 프로그램을 디자인하고 있습니다. 동시 사용자에 대한 통계가 없습니다. Oracle 11g 백엔드에서 ASP.NET MVC3을 사용하고 있으며 모든 검색은 인라인 SQL이 아닌 패키지 된 저장 프로 시저를 통해 수행됩니다. 응용 프로그램은 읽기 전용입니다.ASP.Net MVC - 데이터 디자인 - 단일 레코드 대 다수의 작은 레코드 검색

표 A에는 약 4 백만 개의 레코드가 있습니다. 표 B에는 약 450 만 개의 레코드가 있습니다. 표 C의 레코드 수가 200,000 개 미만입니다. 또한 테이블 A에 연결된 두 개의 작은 룩업 테이블이 있습니다.

테이블 B와 C는 모두 표 A와 1 대 1의 관계가 있습니다. 테이블 A와 B는 필수이며 C는 필요하지 않습니다. 표 B와 C에는 많은 문자열 열이 포함됩니다 (최대 256 자).

검색은 항상 테이블 A의 0, 1 또는 2 레코드를 반환하며 테이블 b의 메이트와 C의 관련 데이터 및 찾아보기 테이블을 반환합니다.

내 데이터 액세스 프로세스는 연결 및 명령을 생성하고 쿼리를 실행하고 판독기를 반환하고 해당 판독기에서 적절한 개체를로드 한 다음 연결을 닫고 처분합니다.

내 질문에 답변 .... 한 번에 (하나의 연결 만 사용하여) 한 번에 넓은 레코드 세트를 반환하는 것이 더 좋습니까? 아니면 한 테이블 만 쿼리하는 것이 좋습니다. (각 쿼리마다 하나의 연결 사용) 좁은 레코드를 반환하고 코드에 합치면됩니까?

EDIT : 설명 - 나는 어느 옵션에서든 가져올 모든 데이터가 항상 필요합니다. 두 옵션 모두 결국 DB에서 가져온 것과 같은 양의 데이터가 화면에 표시됩니다. 하지만 한 번에 한 번에 하나씩 연결이 이루어 지지만 (한 번 더 넓어지기 때문에 느려질 수 있습니다.) 다른 한 번에 여러 연결이 생기게됩니다. 연결 수의 영향이 여기의 결정에 영향을 줄지 나는 모른다.

또한 적절한 경우 테이블 디자인을 비정규화할 수 있습니다.

답변

3

필요한만큼 많은 데이터를 가져오고 싶을뿐입니다. 어떤 방식 으로든 데이터베이스에서 코드로 이동하는 방식이 원하는 방식입니다. 나는 너의 두 번째 제안을 고를 것이다.

- 편집 -

에 관계없이 모든 레코드를 당길 필요가 있기 때문에, 당신은 한 번 연결을 설정하려는 경우에만됩니다. 같은 양의 데이터를 얻으므로 연결 수를 줄임으로써 최대한 많은 메모리를 절약해야합니다.

+0

표시 할 데이터가 항상 필요합니다. 두 옵션 모두 데이터베이스에서 코드로 동일한 양의 데이터를 가져옵니다. 하나는 각각의 데이터가 적은 비틀어 진 연결에서 수행하고 다른 하나는 모든 것을 즉시 수행합니다. – user158017

+2

아, 죄송합니다. 질문을 잘못 읽었을 것입니다. 나는 당신이 모든 것을 보여줄 필요가 있다는 것을 알지 못했습니다. 이 경우 한 번만 연결을 설정하려고합니다. 같은 양의 데이터를 얻으므로 연결 수를 줄임으로써 최대한 많은 메모리를 절약해야합니다. – Charmander

+0

그 말이 맞습니다. 연결이 엇갈리고 많은 사용자가 동시에 사용할 수 있기 때문에 많은 좁은 레코드가 더 좋을 수 있다고 들었습니다. 그러나 나는 또한 그 많은 중형 레코드로 구축되는 개체의 수에 관심이있었습니다. 통화 연결이 끝날 때 연결을 지우더라도 연결 및 명령과 같은 가중치. – user158017

관련 문제