실행 환경

Oracle Data Relationship Management 엔진은 다중 스레드 다중 컴퓨터 환경이며 스크립트가 여러 스레드와 컴퓨터에서 동시에 실행될 수 있습니다. 값을 생성하고 글로벌 범위에 저장할 수 있지만 스크립트가 다른 스레드에서 실행되는 경우 해당 글로벌 값이 없기 때문에 이 동작에 의존해서는 안 됩니다. 마찬가지로, 글로벌 값은 Data Relationship Management 엔진 인스턴스나 컴퓨터 전체에서 업데이트되지 않습니다. 또한 Data Relationship Management는 여러 라이브 버전을 지원하므로 한 노드의 값을 계산하여 글로벌 범위에 해당 값을 저장하는 경우 다른 스크립트가 다른 노드의 등록정보에 액세스하면 부정확한 값이 생성될 수 있습니다.

주:

변수를 글로벌 범위에 저장하면 안 되는 것과 동일한 이유로, 수정 내용이 모든 엔진 인스턴스와 스레드에 적용되었는지 확신할 수 없으므로 기본 제공 Data Relationship Management 객체 프로토타입은 수정하면 안 됩니다.

스크립트 시간 초과 설정

과도한 엔진 잠금을 방지하기 위해 값을 반환하지 않고 너무 오래 실행되는 스크립트는 시간 초과 설정에 따라 종료됩니다. 각 등록정보 정의 및 검증에 대해 스크립트 시간 초과를 설정할 수 있습니다.

시간 초과는 실행 컨텍스트별로 적용되므로 익스포트에서 100개 노드의 스크립트 등록정보를 내보내는 중이며 등록정보의 시간 초과가 30초로 설정된 경우 각 노드에서 해당 등록정보를 평가하는 데 30초가 걸릴 수 있으므로 익스포트는 최대 5분이 걸릴 수 있습니다. 그러나 스크립트 등록정보가 다른 스크립트 등록정보를 호출하는 경우에는 시간 초과가 증가하지 않습니다. 예를 들어 PropA에 10초 시간 초과가 있고 PropB에 20초 시간 초과가 있으며 PropA가 장기 실행 계산을 시작하는 PropB를 호출하는 경우 10초가 경과하면 원래 시간 초과를 초과했으므로 PropA의 평가가 종료됩니다.

무한 루프 방지

무한 루프(스택 오버플로우라고도 함)를 발생시키는 스크립트는 심각한 오류이며, 서버 프로세스가 예기치 않게 종료될 수 있습니다. Data Relationship Management는 이러한 스크립트가 실행되지 않도록 하지만 자체 참조 스크립트나 반복적인 스크립트를 작성할 때는 주의해야 합니다. 프로덕션에 배포하기 전에 항상 개발 환경에서 새 스크립트를 테스트합니다.

무한 루프를 생성하는 스크립트의 간단한 예제는 다음과 같습니다. 이 스크립트에는 자체 호출이 포함되어 있지만 실행을 종료하지 않으므로 함수를 실행하는 엔진은 결국 리소스 부족 때문에 종료됩니다. 마지막으로, 이 스크립트는 Data Relationship Management 엔진을 호출하지 않으므로 오버플로우를 파악해서 스크립트를 중지할 수 없습니다.

function badFunc(a) { badFunc(a); }
badFunc("oops");

성능 고려 사항

최상의 성능을 얻으려면 공식으로 파생된 등록정보를 스크립트에서 참조하거나 그 반대로 참조하지 마십시오. 일반적으로 스크립트는 64비트 프로세서를 비롯한 기본 하드웨어에 대한 JIT(Just-In-Time) 컴파일 등의 고려 사항 때문에 공식에 비해 성능 조정 최적화를 위한 최상의 기회를 제공합니다. 또한 스크립트는 JIT 컴파일러에서 실제 실행 특성에 맞게 조정되며 시간 경과에 따라 더 빨리 실행됩니다.