2011-01-27 2 views
0

데이터 그리드의 기존 데이터를 필터링하여보다 효율적인 것입니다 동안 : 데이터베이스가 반환 적은 데이터를 가지고뿐만 아니라, 때문에 일반적으로데이터 그리드를 필터링 - 효율적인 방법

- filtering the existing data collection OR 
- querying database with filter clauses 
+1

그것은 의존이, 얼마나 많은 데이터, 데이터 얼마나 가까운 (같은 다음은 내가 찾은 최고의 솔루션입니다 기계, 동일한 LAN 세그먼트, 동일한 WAN, 12 개의 홉 이상 다른 세계), 필터는 *보다 * 더 많은 데이터를 가져옵니다. – Lazarus

+0

@Lazarus : 필터를 사용하면 데이터가 줄어들며 항상 – WhoIsNinja

답변

1

좋아, 그럼 당신은 데이터베이스에서 데이터의 하위 집합을 뽑아서 당신이 그것을 사용자에게 제시했습니다. 모든 것이 세상에서 위대하다. 이제 귀찮은 사용자는 데이터에 추가 필터링을 적용하려고합니다. 우리가 커서를 통해 대용량 데이터 세트에 액세스하지 않는다고 가정하면 데이터는 이미 메모리에 있습니다. 나는 그들을 거기에 걸러내려고 아주 유혹을받을 것입니다.

데이터가 급속하게 변하지 않고 일정한 정도의 확률이 받아 들여질 수 있다면 데이터베이스로 돌아가서 이미 가지고있는 것의 일부만 추출해야 할 이유가 없습니다. 당신은 이미 한 번 이상 와이어를 통해 데이터를 가져 왔습니다. 왜 다시해야합니까?

데이터를 최신으로 업데이트해야한다면 방금 말씀 드린 모든 것을 잊어 버리고 DB에 요청하십시오.

아이디어는 아마도 데이터 액세스 계층에 의해 마샬링되는 어딘가에있을 것입니다. 여기에서는 데이터 수명을 모니터링하고 사용자가 몇 시간 동안 동일한 데이터 세트 필터링을 계속 변경하더라도 데이터베이스에서 주기적으로 새로 고쳐집니다. 필터링 된 데이터에 대한 요청도이 레이어에 표시되어야합니다. 즉, 앱이 실제 가져와 지거나 메모리에서 제공되었는지 여부를 알 수 없습니다. 이러한 걱정의 분리는 기본 코드를 변경하고 앱을 변경하지 않고 그대로 둘 수 있으므로 하나 또는 다른 접근법 (메모리 또는 데이터베이스)이 항상 더 나은 것으로 결정한 경우 앞으로 나아갈 수 있습니다.

1

가 데이터베이스에 필터링하는 것이 더 효율적입니다 , 일반적으로 처리 할 데이터가 적습니다 (예 : 처리 할 레코드의 양을 줄이기 위해 인덱스를 사용할 수 있음). 또한 대부분의 인프라에서 데이터베이스는 클라이언트와 동일한 서버에 있지 않으므로 필터링되지 않은 데이터를 반환하는 데 관련된 다른 리소스가 있습니다. 일반적으로 더 많은 데이터를 처리해야 할수록 데이터베이스 필터링이 더 효율적입니다.

그러나 코드/클라이언트에서 필터링이 더욱 효율적으로되는 상황이 분명 할 수 있습니다. 대부분 응용 프로그램에 데이터베이스가 먼저 쿼리해야하는 정보가있는 경우가 대부분입니다.

하지만이 모든 것은 매우 모호하며 결국에는 응용 프로그램에 따라 달라집니다. 데이터 그리드가 있고 사용자가 동일한 정적 데이터에 관한 필터를 많이 변경했다면 데이터베이스에서 필터링하면 불필요한 트래픽과 db 서버의 작업 부하로 이어 지므로 클라이언트의 캐시되지 않은 데이터가 효율성을 높일 수 있습니다.

0

기존 데이터 수집을 확실히 필터링합니다.

기존 DataGridCollection을 필터링하는 여러 가지 방법이 있지만 내 생각에 최상의 솔루션은 DataGird 유형을 새로 고치지 않고 다른 타사 컨트롤에 의존하지 않고 표준 WPF DataGrid 컨트롤 만 사용하는 스타일입니다.

관련 문제