몇 가지 그래프가 있습니다. 각 그래프의 폭과 깊이는 달라질 수 있으며 런타임 중에 변경 및 변경됩니다. 예제 그래프를 참조하십시오.오브젝트 데이터베이스로 복잡한 그래프의 지속성을 실현하는 방법은 무엇입니까?
전체 그래프 (즉, 트리)에 보류를 얻을 수있는 루트 노드가있다. 노드는 여러 개의 자식을 가질 수 있으며 각 자식은 특별한 용도로 사용됩니다. 또한 노드는 특정 정보를 검색하기 위해 모든 직접 하위 노드에 액세스 할 수 있습니다. 반면에 자식 노드는 자신의 부모 노드 또는 다른 형제를 인식하지 못할 수 있습니다. 지금까지 특별한 것은 없습니다.
각 그래프를 저장하고 오브젝트 데이터베이스 (이 경우 DB4O)로 업데이트하는 것은 매우 간단합니다. 데이터 지속성 (데이터베이스 트리거 등 포함)을 달성하기 위해 관계형 데이터베이스를 사용할 수 있었지만 대신 객체 데이터베이스를 사용하여이를 실현하려고했습니다.
내 그래프에는 하나의 독특한 점이 있습니다. 다른 예제 그래프를보십시오.
한 노드가 (예 : 내부 타이머에 의해 트리거되거나 다른 노드에 의해 트리거되는) 상태 변경이있는 경우 다른 노드 (관심이있는 사람, observer pattern 참조)에게 변경 사항을 알립니다. 정보를받은 각 노드는 자신의 상태를 업데이트하기 위해 적절한 조치를 취합니다 (필요에 따라 다른 옵서버에게 차례대로 알려줍니다). 루트 노드는 발생하는 모든 변경 사항을 알지 못합니다. 관련 노드 만이 무언가가 변경되었음을 알게되기 때문입니다. 이러한 일련의 이벤트가 루트 노드에 의해 트리거되면 물론 큰 문제는 아닙니다.
목표는 오브젝트 데이터베이스를 사용하여 데이터 지속성을 보장하는 것입니다. 메모리의 데이터는 데이터베이스에 저장된 데이터와 동기화되어야합니다. 복잡성에 추가되는 것은 그래프가 단순하고 어리석은 데이터 노드로 구성되지는 않지만 많은 기능이 각 노드에 통합되어 있다는 것입니다 (즉, 그래프 전체에서 상태 변경을 트리거하는 이벤트).
필자는 제시된 문제 (예 : (1) 데이터 및 기능의 강력한 분리 또는 (2) 데이터베이스 통합 강화 또는 (3) 데이터를 업데이트하기위한 임의의 시간 간격 설정 및 데이터가 일정 시간 동안 동기화되지 않을 수 있음을 인정합니다.) 필자는 이러한 핵심 문제와 관련하여 몇 가지 더 많은 입력과 옵션을 찾고 있습니다 (구체적인 구현에서 중요한 발자취를 남길 것입니다).
(편집 됨) 내가 언급 한 것을 잊어 버리는 또 다른 측면이 있습니다. 그래프는 항상 메모리에 존재해서는 안됩니다. 필요하지 않은 그래프는 데이터베이스에만 표시되어 정지 상태가됩니다. 이것은 고려해야 할 또 다른 문제입니다. 정지 상태에있는 동안 업데이트 메커니즘은 아마 잠자기 상태가되어 의도하지 않습니다.