데이터베이스이해와활용 네번째 과제 답안

   


  1. (2점) 다음 용어에 대한 정의를 기술하세요:
  • 인덱싱 필드(indexing field): 데이터베이스에서 검색 및 정렬을 향상시키기 위해 사용되는 필드 또는 열입니다. 인덱싱 필드는 인덱스 구조를 만들 때 사용되며, 인덱스를 통해 빠르게 데이터에 액세스할 수 있도록 도와줍니다. 일반적으로 검색 연산이 자주 수행되는 필드를 인덱싱 필드로 선택합니다.
  • 기본 키 필드(primary key field): 데이터베이스 테이블에서 기본 키를 기반으로 생성되는 인덱스를 가리킵니다. 기본 키 값을 활용하여 물리적으로 데이터를 정렬하여 저장하고 효율적으로 검색을 수행할 수 있습니다.
  • 클러스터링 필드(clustering field): 데이터베이스 테이블에서 기본 키가 아닌 속성을 기반으로 생성되는 인덱스를 가리킵니다. 선택된 속성 값을 활용하여 물리적으로 데이터를 정렬하여 저장하고 효율적으로 검색을 수행할 수 있습니다.
  • 보조 키 필드(secondary key field): 데이터베이스 테이블에서 기본 키 이외의 다른 열을 기반으로 생성되는 인덱스를 가리킵니다. 이 때 데이터는 물리적으로 정렬되지 않습니다.
  • 블록 앵커(block anchor): 블록의 시작 위치에 존재하는 레코드를 의미
  • 밀집 인덱스(dense index): 인덱스 구조에서 모든 레코드에 대해 인덱스 엔트리가 존재하는 경우
  • 희소 인덱스(sparse index): 인덱스 구조에서 일부 레코드에 대해 인덱스 엔트리가 존재하지 않는 경우

  1. (2점) NOSQL 시스템의 주요 분류에 대해서 나열하고 각 분류의 특징, 장점, 단점을 설명하세요. 마지막으로 각 분류에 해당하는 몇 가지 대표적인 NOSQL 시스템을 나열하고 각 시스템의 특징을 설명하세요.

답:

  • 문서 지향 데이터베이스(Document-Based):

    • 특징: 데이터를 문서 형식으로 저장하며, 주로 JSON 또는 XML 형식으로 표현됩니다. 각 문서에 고유한 키가 있으며, 복잡한 계층 구조를 가질 수 있습니다.
    • 장점: 유연한 스키마, 복잡한 데이터 모델 지원, 쉬운 확장성, 뛰어난 읽기 성능.
    • 단점: 복잡한 쿼리 및 트랜잭션 처리가 제한적, 대체로 일관성 모델이 느슨함.
    • 대표적인 시스템: MongoDB, CouchDB.
  • 열 지향 데이터베이스(Column-Based):

    • 특징: 데이터를 열과 로우의 형태로 저장하며, 열을 패밀리 또는 그룹으로 묶어 관리합니다. 주로 분산 데이터베이스로 사용되며, 대용량 데이터 처리에 적합합니다.
    • 장점: 대규모 데이터 처리, 빠른 쓰기 작업, 확장성, 뛰어난 읽기 성능.
    • 단점: 복잡한 쿼리 처리가 어려울 수 있으며, 일관성 모델이 느슨함.
    • 대표적인 시스템: Google BigTable, Apache HBase.
  • 키-값 저장소(Key-Value Stores):
    • 특징: 간단한 키와 값 쌍으로 데이터를 저장하는 방식. 매우 빠른 읽기 및 쓰기 작업을 제공하며, 확장성이 뛰어납니다.
    • 장점: 높은 성능, 확장성, 간단한 구조, 대용량 데이터 처리.
    • 단점: 복잡한 쿼리 처리가 어려움, 일관성 모델이 느슨함.
    • 대표적인 시스템: Redis, Voldemort, Apache Cassandra, Amazon DynamoDB.
  • 그래프 데이터베이스 (Graph Databases):

    • 특징: 데이터를 노드와 엣지로 표현하는 방식으로 관계와 연결성을 중심으로 데이터를 저장합니다. 복잡한 관계 데이터 모델에 적합합니다.
    • 장점: 복잡한 관계 및 쿼리 처리, 높은 읽기 성능, 데이터 모델의 직관성.
    • 단점: 대규모 데이터 저장 및 처리에는 적합하지 않을 수 있음.
    • 대표적인 시스템: Neo4j, OrientDB, Amazon Neptune.

   


  1. (3점) 다음 정렬-병합(sort-merge) 알고리즘은 일반 JOIN 연산을 효율적으로 수행하는 방법을 기술하고 있습니다. 이 알고리즘을 확장하여 LEFT OUTER JOIN 연산을 수행하는 방법을 설명하세요.

sortmerge

답:

위 코드를 다음 부분을

  ...
  else if R(j)[A] < S(j)[B]
    then set i <- i + 1
  ...

다음과 같이 수정합니다.

  ...
  else if R(j)[A] < S(j)[B]
    output the combined tuplee <R(i), null> to T;
    then set i <- i + 1
  ...

   


  1. (3점) 다음 두 SQL 쿼리를 보고 다음 질문에 답하세요.
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME
FROM EMPLOYEE E, EMPLOYEE S
WHERE E.SUPERSSN = S.SSN
SELECT FNAME, LNAME, 1.1*SALARY
FROM EMPLOYEE, WORKS_ON, PROJECT
WHERE SSN = ESSN AND PNO = PNUMBER AND PNAME = 'ProductX'

(a) 두 SQL 쿼리에 대해 초기 쿼리 트리를 그려보세요.

답: sortmerge

sortmerge

(b) 수업 시간에 배운 쿼리 최적화 휴리스틱을 활용하여 두 초기 쿼리 트리가 어떻게 최적화될 수 있는지 보여주세요.

답: sortmerge sortmerge

(c) 각각의 쿼리에 대해, 초기 쿼리 트리와 최적화된 쿼리 트리를 비교해보고 왜 최적화된 쿼리 트리가 더 효율적인지 설명하세요.

답: 전체 테이블에 대해 비효율적으로 CARTESIAN PRODUCT를 수행하는 것이 아니라 최종적으로 필요한 속성들만을 먼저 선택하여 JOIN을 수행하므로, 최적화된 쿼리 트리가 더 효율적입니다.