문제

SQL Server의 대규모 계층 데이터 세트로 작업하고 있습니다. 전체 트리에는 약 25,000 개의 노드가 있습니다.

종종 트리의 하위 트리에 액세스 한 다음 하위 트리의 노드에 매달려있는 관련 데이터에 액세스해야합니다. 몇 년 전 테이블 값 함수를 기반으로 데이터 액세스 계층을 구축하여 재귀 쿼리를 사용하여 하위 트리의 루트 노드를 고려하여 임의의 하위 트리를 가져 왔습니다.

엔티티 프레임 워크를 사용하려는 생각을하고 있지만 이와 같은 계층 적 데이터를 쿼리하는 방법을 알 수 없습니다. AFAIK LINQ에는 재귀 쿼리가 없으며 엔티티 데이터 모델에서 TVF를 노출시킬 수 없습니다.

저장된 Procs를 계속 사용하는 유일한 솔루션입니까? 다른 사람이 이것을 해결 했습니까?

설명 : 트리의 25,000 노드에 의해 나는 객체 나 엔터티 프레임 워크와 관련이있는 것이 아니라 계층 적 데이터 세트의 크기를 언급하고 있습니다.

도움이 되었습니까?

해결책

"중첩 세트"라는 패턴을 사용하는 것이 가장 좋을 수 있으며,이를 통해 한 쿼리 내에서 임의의 하위 트리를 얻을 수 있습니다. 이것은 노드가 자주 조작되지 않은 경우 특히 유용합니다. MySQL에서 계층 적 데이터 관리.

완벽한 세계에서 엔티티 프레임 워크는이 데이터 패턴을 사용하여 데이터를 저장하고 쿼리 할 수있는 가능성을 제공합니다.

다른 팁

엔티티 프레임 워크에서는 모든 것이 가능하지만 해킹하고 길을 삭감해야합니다. 내가 현재 일하고있는 데이터베이스에는 너무 많은 "홀더 테이블"이 있습니다. 사용자와 팀 모두 블로그를 가질 수 있습니다.

25,000 개의 노드라고 말할 때 항해 속성을 의미합니까? 그렇다면 데이터 액세스를 수행하는 것이 까다로울 수 있다고 생각합니다. 엔티티 프레임 워크를 사용하여 탐색, 검색 등을 검색하기는 어렵지 않지만 종이를 모델링 한 다음 엔티티 프레임 워크를 사용하는 동안 탐색하는 방법에 따라 데이터베이스를 작성하는 경향이 있습니다. 옵션이없는 것 같습니다.

이 제안에 감사드립니다.

답은 Georg가 제안한 것처럼 중첩 된 세트의 줄을 따라 데이터베이스의 데이터를 리모델링하는 것임을 깨닫기 시작했습니다.

그렇게하면 두 가지 주요 이점을 얻고 싶습니다.

a) 더 빠른 쿼리 Aginst 임의의 하위 트리

b) 더 이상 재귀 쿼리가 필요하지 않은 데이터 모델 - 아마도 엔티티 프레임 워크의 쉬운 도달 범위 내에 가져 오는 것일 수 있습니다!

어려운 문제에 대한 정답이 대답하는 것이 아니라 다른 일을하는 것이 얼마나 자주 놀랍습니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top