2010-04-05 8 views
1

웹 응용 프로그램에서 거대한 데이터를 datatable에 반환하는 동적 쿼리가 있으며이 쿼리는 종종 다른 매개 변수로 호출됩니다. 그래서 데이터베이스가 고갈되었습니다.Datatable의 대안

개체에 매개 변수없이 모든 레코드를 가져오고이 개체에 대한 쿼리 (linq 포함)를 수행하려고합니다. 그래서 데이터베이스는 exthausted되지 않습니다.

데이터 테이블 대신 사용할 수있는 개체는 무엇입니까?

+0

모든 데이터를 계속 반환하면 다른 기술로 마술처럼 데이터베이스를 "고갈되지 않도록"만들지 않습니다. 필요한 것은 아키텍처를 다시 생각하고 * 적은 데이터를 반환하는 방법을 찾는 것입니다. 일단 당신이 그것을 가지고 있다면 Linq-SQL, Subsonic 등과 같은 많은 ORM (object-relational mappers)을 사용하여 데이터 행을 객체로 변환하십시오. –

+0

프로젝트의 아키텍처를 ORM으로 변환 할 수 없습니다 지금 당장. 유일하게 생각하는 것은 내가 위의 질문에 대해 여러 번 데이터베이스에 간다고하지 않는다는 것입니다. 나는 단지 DB에서 한 번만 호출 한 다음, 코드를 필터링하여 사용자에게 표시합니다. – mavera

답변

11

이것은 내 애완 동물 오줌 누기 중 하나입니다. 데이터베이스에서 모든 데이터를 반환하는 사람들입니다.

신고하지 않는 한 절대적으로 필요하지 않습니다.

보고를 수행하는 경우 데이터베이스가 처리 할 수 ​​있도록 하드웨어 기능을 향상시켜야합니다. 여기에는 데이터베이스 조정, 테이블 재정렬, 색인 다시 생성, 색인의 정기적 재 구축, 통계 업데이트, 오래된 데이터 보관 등이 포함될 수 있습니다.

보고를 수행하지 않는 경우 어느 데이터에서든지 조회 할 수있는 데이터의 양 한 번. 사용자는 엄청난 양의 데이터를 한꺼번에 볼 필요가 없습니다. 그들은 관리 할 수 ​​있고 일관된 방식으로 제시된 개별 데이터 양을 볼 필요가 있습니다.

내가 관찰하기 좋아하는 엄지 손가락의 또 다른 규칙은 : 그것은 좋은 무엇이다 데이터베이스 서버가 작업을 할 수 있도록, 그것은 많은 데이터를 조작한다, 그리고 그것을을 할 수있는 능력을 가져야한다 . 많은 양의 데이터를 클라이언트로 가져온 다음 클라이언트에서 데이터를 조작하려고 시도하는 것은 어리석은 일입니다. 클라이언트 시스템이 데이터베이스 서버보다 강력하다면 문제가 있습니다.

+0

+1 아멘, 형제! :-) –

+0

캐싱이 다른 경우라고 생각합니다. – sh1ng

0

절대 수행하지 마십시오 (캐시 제외) !!! 당신은

  • 영구 저장소와 같은
  • 인덱스 검색 및 쿼리 전략
  • 복제

에 DB에 시간을 할애을 DB 메커니즘을 구현하기 위해 노력하고있다

최적화 (최적의 계획, 색인, 질의, 분할).