2008-08-28 6 views
4

내 응용 프로그램 중 하나에서 "직접 보고서"를 사용하여 주어진 사용자 아래의 모든 사용자 목록을 얻으려고 활성 디렉터리를 쿼리하고 있습니다. 그래서 기본적으로, 사람의 이름이 주어지면 AD에서 조회되고, 그 다음 직접 보고서가 읽혀집니다. 그러나 모든 직접 보고서에 대해 도구는 직접 보고서의 직접 보고서를 확인해야합니다. 또는 더 추상적 : 도구는 사람을 나무의 뿌리로 사용하고 모든 잎의 이름을 얻기 위해 전체 나무를 걸어갑니다 (수 백 개가 될 수 있음)Active Directory 데이터 캐싱

이제 내 관심은 분명히 성능입니다. 이것은 꽤 많은 시간을 필요로하기 때문입니다. 내 생각은 수동으로 캐시하는 것입니다 (기본적으로 모든 이름을 긴 문자열에 넣고 어딘가에 저장하고 하루에 한 번 업데이트하십시오).

하지만 먼저 정보를 얻은 다음 System.DirectoryServices 네임 스페이스에서 무언가를 사용하여 캐시하는 것이보다 세련된 방법일까요?

답변

3

'RefreshCache()를'당신이 배회 할 속성을 통과 :

System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry();    

// Push the property values from AD back to cache. 

entry.RefreshCache(new string[] {"cn", "www" }); 
2

Active Directory는 정보를 저장하는 데 매우 효율적이며 검색은 성능이 크게 저하되지 않아야합니다. 이름을 실제로 저장하려는 경우, 일종의 나무 구조로 저장하려는 것이므로 모든 사람들의 관계를 볼 수 있습니다. 인원 수에 따라 매일 필요한 모든 정보를 가져 와서 캐시 된 사본에 대한 모든 요청을 쿼리 할 수 ​​있습니다.

2

광고는 성능이 문제가되지 않는 한 캐싱을하지 않으므로 걱정하지 마십시오. 시간당 수천 개의 히트를 필요로하는이 회사의 인트라넷에서 하루 종일 실행되는 이런 종류의 일을하는 소프트웨어는이 영역에서 성능을 조정하지 않아도됩니다. 당신은 당신이 호출 할 수 있습니다 캐시 할 속성을 제어 할을하기 위해

2

에 따라 달라집니다 어떻게 날짜까지 당신 정보를 원한다. 에 보고서의 가장 최신 데이터 인이 있어야만 AD에서 직접 쿼리하는 것이 타당합니다. 그리고 광고가 매우 견고하다는 점에 동의합니다. 일반적인 전용 광고 서버는 실제로 일상적인 업무에서 매우 가볍게 활용됩니다. IT 부서/지원 담당자에게 문의하는 것이 가장 좋습니다.

다른 방법으로 AD 데이터를 CSV 파일로 덤프하고 SQL 데이터베이스로 가져 오는 일일 스크립트를 만드는 것입니다. (오라클은 결과 집합 내에 다중 레벨 계층 구조를 자동으로 생성 할 수있는 SELECT CONNECT BY 기능을 가지고 있습니다 .MSQL은 재귀 IIRC를 사용하여 유사한 작업을 수행 할 수 있습니다).