SO에서 검색했지만 관계를 처리 할 때 핵심 데이터에서 관리 대상 개체를 삭제할 때 성능을 향상시킬 제안을 찾지 못했습니다.코어 데이터에서 계단식 규칙을 사용하여 관리 대상 개체를 삭제할 때의 성능 고려 사항
시나리오는 매우 간단합니다.
세 가지 엔티티가 있습니다. 각 개체는 다음 개체와 연결됩니다. 예를 들어, FirstLevel
은 secondLevels
부터 SecondLevel
까지의 관계를가집니다. FirstLevel
에서 SecondLevel
까지의 삭제 규칙은 SecondLevel
에서 FirstLevel
까지 삭제 규칙이 인 Nullify 인 동안이면 계단식입니다. 동일한 규칙이 SecondLevel
과 ThirdLevel
사이에 적용됩니다. 나는 전체 그래프를 삭제할 때
, 나는 다음과 같은 방법을 수행 :
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FirstLevel" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSArray *items = [context executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
// delete roots object and let Core Data to do the rest...
for (NSManagedObject *managedObject in items) {
[context deleteObject:managedObject];
}
캐스케이드 그래프를 제거 규칙을 활용. 이 기능은 몇 가지 객체에서는 빠르지 만 많은 객체에서 성능이 떨어집니다. 또한이 유형의 삭제가 디스크에 많은 왕복을 수행한다고 생각합니다 (확실하지 않습니다). 제가 틀렸습니까?
그래서 내 질문은 다음과 같습니다. 계단식 규칙을 사용하지 않고 그래프를 제거하고 동시에 성능을 향상시킬 수 있지만 동시에 그래프 일관성을 유지 하시겠습니까?
미리 감사드립니다.
내 모델에서 다른 기업이 있기 때문에 내가 전체 파일을 삭제할 수 없습니다
편집 할 수 있습니다.
EDIT 2
내가 게시 된 코드는 NSOperation
서브 클래스의 main
방법에 싸여있다. 이 솔루션을 사용하면 백그라운드에서 삭제 단계를 수행 할 수 있습니다. 캐스케이드 규칙을 이용했기 때문에 삭제는 반자동 방식으로 수행됩니다. 난 오직 게시 된 코드 내에서 for 루프를 사용하여 루트 객체 인 FirstLevel
항목 만 삭제합니다. 이런 식으로 코어 데이터는 나를 위해 나머지를 할 수 있습니다. 내가 궁금해하는 것은 다음과 같다. 반자동 삭제 작업을 바이 패스하고 그래프의 일관성을 잃지 않고 수동으로 할 수 있는가?
tou는 전체 그래프를 지우고 싶습니다. 즉 모든 영구 저장소를 삭제 하시겠습니까, 아니면 일부 지사를 지우시겠습니까? –
전체 그래프입니다. –
그러면 너에게 도움이 될거야? http : //stackoverflow.com/questions/3266084/how-to-remove-all-objects-from-core-data –