테이블 평면화
테이블 평면화는 관련 테이블의 계층 구조를 관계형 데이터베이스에 하나의 테이블로 저장합니다.
연장 모델
작업 및 기본 구성 항목[cmdb]과 같은 테이블에는 하나 이상의 하위 테이블이 상위 테이블에서 확장되는 관련 테이블의 계층 구조가 있습니다. 시스템은 관계형 데이터베이스에 테이블 계층 구조를 저장하기 위해 이러한 확장 모델을 제공합니다.
| 연장 모델 | 테이블을 평면화합니까? |
|---|---|
| 클래스당 테이블 | 아니요 |
| 계층 구조당 테이블 | 예 |
| 파티션당 테이블 | 예 |
확장 모델은 인스턴스에서 테이블이 나타나거나 작동하는 방식에 영향을 주지 않습니다. 데이터베이스 뷰를 포함한 모든 테이블 기능은 확장 모델에 의해 변경되지 않은 상태로 유지됩니다.
클래스당 테이블
클래스당 테이블 확장 모델은 계층의 각 테이블을 관계형 데이터베이스의 자체 물리적 테이블에 저장합니다. 각 물리적 테이블은 소스 테이블의 테이블 프리픽스를 사용하며, 각 테이블은 서로 다른 레코드 클래스를 저장합니다. 클래스당 테이블 확장 모델의 예로는 자산 [alm_asset] 테이블과 해당 하위 테이블인 하드웨어 [alm_hardware], 소모품 [alm_consumable], 시설 [alm_facility] 및 소프트웨어 라이센스 [alm_license]가 있습니다. 계층 구조의 상위 테이블인 자산은 모든 기록의 복사본을 하위 테이블에 저장합니다.
클래스별 테이블 확장 모델에서 기록을 찾기 위해 시스템은 여러 테이블의 기록을 쿼리하고 결과를 조인합니다. 예를 들어 관련 시설에서 하드웨어를 검색할 때 시스템은 하드웨어, 시설 및 자산 테이블의 결과를 조인해야 합니다.
테이블 조인은 관계형 데이터베이스에서 성능 병목 현상을 일으킵니다. 쿼리에 포함된 클래스가 많을수록 쿼리 성능이 저하됩니다. 따라서 테이블 계층의 맨 위에 있는 레코드에 대한 쿼리는 모든 하위 테이블을 조인해야 하기 때문에 성능이 가장 저하됩니다.
시스템에서는 테이블을 만들 때 기본적으로 클래스별 테이블 확장 모델을 사용합니다. 또한 대부분의 시스템 테이블은 평면화해도 성능이 향상되지 않으므로 클래스당 테이블 확장 모델을 사용합니다.
계층 구조당 테이블
계층 구조당 테이블 확장 모델은 전체 테이블 계층 구조를 관계형 데이터베이스의 단일 플랫 물리적 테이블에 저장합니다. 물리적 테이블은 작업과 같은 계층 구조의 상위 테이블의 이름을 따서 명명됩니다. 물리적 테이블은 테이블 계층 구조의 모든 레코드를 포함하며 계층 구조의 각 하위 테이블에 클래스 이름 열 값을 할당합니다. 시스템은 소스 테이블의 이름을 클래스 이름 값으로 사용합니다. 예를 들어, 작업 기록은 변경, 인시던트 또는 문제와 같은 클래스 이름을 가질 수 있습니다.
테이블 계층 구조에서 기록을 찾기 위해 시스템은 실제 테이블을 쿼리하고 클래스 이름 열을 사용하여 결과를 제한합니다. 이러한 쿼리는 여러 테이블의 결과를 조인할 필요가 없으므로 시스템은 더 나은 검색 성능을 제공합니다.
시스템은 MySQL 데이터베이스의 작업 테이블 계층 구조에 대해 계층 구조당 테이블 확장 모델을 사용합니다. 다른 테이블은 평면화해도 성능상의 이점이 없으므로 클래스당 테이블 확장 모델을 사용합니다. Oracle 데이터베이스에서 계층 구조별 테이블을 사용하려면 기술 지원 부서에 문의하십시오.
파티션당 테이블
파티션당 테이블 확장 모델은 전체 테이블 계층 구조를 관계형 데이터베이스의 단일 플랫 논리 테이블에 저장합니다. 각 논리 테이블에는 이를 지원하는 파티션 이라는 여러 물리적 스토리지 테이블이 있을 수 있습니다. 각 파티션은 물리적 테이블에 사용할 수 있는 데이터베이스 리소스(예: 열 수, 인덱스 수 및 행 크기)를 최적화합니다. 시스템은 논리 테이블에 추가 관계형 데이터베이스 자원이 필요할 때마다 파티션을 추가합니다.
각 논리 테이블은 계층 구조의 상위 테이블의 이름을 따서 명명되며, 지원하는 각 물리적 파티션은 논리 이름과 파티션 이름으로 구성됩니다. 예를 들어, 기본 구성 항목 [cmdb] 테이블은 파티션이 없는 논리적 테이블로 시작합니다. 하드웨어 구성 항목이 충분한 데이터베이스 자원을 소비하여 시스템이 이를 저장하기 위해 cmdb$par1 이라는 파티션을 생성한다고 가정합니다. 나중에 컴퓨터 구성 항목은 시스템이 이러한 레코드를 저장하기 위해 cmdb$par2 라는 두 번째 파티션을 만드는 것을 보증하기에 충분한 데이터베이스 리소스를 사용할 수 있습니다.
각 논리적 테이블 내에서 시스템은 계층 구조의 각 하위 테이블에 클래스 이름 열 값을 할당합니다. 예를 들어, 기본 구성 항목 논리 테이블에는 애플리케이션, 컴퓨터, IP 라우터의 클래스 이름을 가진 기록이 있습니다. 또한 시스템은 계층 구조의 각 하위 테이블에 두 자리 클래스 경로 값을 할당합니다. 클래스 경로는 계층 구조에서의 테이블 위치를 기반으로 합니다. 예를 들어, 상위 클래스 Hardware에는 /!! /! D 와 자식 클래스 컴퓨터에는 /!! /! D/!!입니다.
파티션당 테이블 확장 모델에서 레코드를 찾기 위해 시스템은 논리 테이블과 해당 파티션을 쿼리하고 클래스 경로 열을 사용하여 결과를 제한합니다. 이러한 쿼리는 여러 테이블의 결과를 조인할 필요가 없으므로 시스템은 더 나은 검색 성능을 제공합니다. 또한 클래스 경로는 검색할 총 기록 수를 줄여 검색 성능을 더욱 향상시킵니다.
시스템은 MySQL 데이터베이스의 기본 구성 항목 [cmdb] 테이블 계층 구조에 파티션당 테이블 확장 모델을 사용합니다. Oracle 데이터베이스에서 파티션당 테이블을 사용하려면 기술 지원 부서에 문의하십시오.