2012-07-16 3 views
3

나는이 게시물의 제목이 어떤 사람들을 싫어하게해야한다는 것을 안다. 필자는 2011 년 12 월부터 RavenDB를 사용해 왔으며 문서 DB를 사용하지 않는 방식으로 데이터를 모델링했음을 깨닫게되었습니다. 첫째, 나는 그것을 완전히 얻는다. 둘째, 현재 상황을 고려할 때 시나리오가 올바르게 작동 할 수있는 방법이 있기를 바랍니다.RavenDB와의 참조 무결성

시나리오 : 데이터베이스에서 특정 Foo 문서를 삭제하고 싶습니다. 그러나 다른 문서에서 해당 문서를 참조하는 경우 해당 문서를 삭제하고 싶지 않습니다. 이 작품

public void Delete(Foo foo) 
{ 
    VerifyFooNotUsedByBar(foo); // Make sure no bars reference this foo 

    VerifyFooNotUsedBySnuh(foo); // Make sure no snuhs reference this foo 

    // What happens if some other user causes this foo to be referenced 
    // by a bar, right now? 

    new GenericData().Delete(foo); 
} 

, 그러나 ... foo는이 내가 그들에 대한 검사를 할 후, 다른 것을 참조 할 수있는 기회가있다 : 그래서, 나는이 일을했습니다. 이 전체 메서드가 완료 될 때까지 다른 변경 사항을 잠글 수있는 방법이 있습니까?

"나는이 방법으로 문서 DB를 사용하여 자신을 망쳤습니다." 나는 현재의 문제를 해결할 방법이 있기를 바라고있다.

답변

2

Bob, 아니요. 이것에 관한 거래를 했더라도 잠글 수는 없습니다. 할 수있는 일은 참조가 메타 데이터에 유지되도록하는 것입니다. 그래서 Foo를 참조 할 때 Foo의 메타 데이터를 업데이트하여 내가 그렇게하고 있음을 알릴 필요가 있습니다. 그것은 트랜잭션 진리의 단일 지점을 야기 할 것입니다.

관련 문제