ABOUT ME

Today
Yesterday
Total
  • 데이터 중심 애플리케이션 설계 - 관계형 데이터베이스와 문서 데이터베이스
    TECH 2022. 7. 18. 20:34

    데이터 모델의 관점에서 관계형 데이터베이스와 문서 데이터베이스의 비교

    • 애플리케이션의 데이터가 문서와 비슷한 구조일 경우 문서 데이터베이스를 사용하는 것이 좋다.
      • 문서를 여러 테이블에 찢어(shredding) 저장하는 것은 스키마와 애플리케이션 코드를 복잡하게 만든다.
    • 문서 데이터베이스의 미흡한 조인은 때로는 문제일수도 아닐 수도 있다.
      • 다대다 관계를 사용하는 애플리케이션에서 문서 모델의 매력은 떨어진다.
        • 애플리케이션 코드에서 비정규화된 데이터의 일관성을 유지하기 위해 추가 작업을 해야 한다.
        • 애플리케이션 코드를 통해 조인을 흉내낼 수 있지만, 복잡도가 애플리케이션 레벨로 넘어가고 대게 데이터베이스에서 특화되어 수행되는 조인보다 느리다.

    스키마 유연성

    스키마가 없다는 것이 아니다. 암묵적인 스키마가 존재하지만, 데이터베이스는 이를 강요하지 않는다. 정확한 용어로는 쓰기 스키마와 반대되는 읽기 스키마이다.

    • 쓰키 스키마 (schema-on-write)
      • RDBMS의 전통적인 방식. 스키마는 명시적이고 데이터베이스는 쓰여진 모든 데이터가 스키마를 따르고 있음을 보장
    • 읽기 스키마 (schema-on-read)
      • 데이터 구조는 암묵적이고 데이터를 읽을 때만 해석된다.

    두 방식의 차이는 데이터 타입을 변경하고자 할 때 명확하게 나타난다.

    schema-on-read

    if (user && !user.department) {
      user.department = "engineering";
    }

    새로운 필드 (department)를 가진 새로운 문서를 작성하기 시작하고, 애플리케이션에서는 예전 문서를 읽은 경우를 처리하는 코드만 있으면 된다.

    schema-on-write

    ALTER TABLE users ADD COLUMN department TEXT;
    UPDATE users SET department = "engineering";

    마이그레이션을 수행한다.

    • 스키마 변경은 대게 느리고 중단시간이 필요하기 때문에 좋지 않다.

    읽기 스키마 접근 방식은 컬렉션의 항목들이 동일한 구조가 아닐 때 유리하다. 이유는 아래와 같다.

    • 다른 여러 유형의 오브젝트를 유형별로 테이블에 넣는 방법은 실용적이지 않다.
    • 사용자가 제어할 수 없고 언제나 변경 가능한 외부 시스템에 의해 데이터 구조가 결정된다.

    이러한 상황에서 스키마는 득보다 실이 많다. 스키마리스가 더 자연스러운 데이터모델이다. 하지만, 모든 데이터가 동일한 구조라면 스키마가 구조화를 강제할 수 있는 유용한 수단이다.

    질의를 위한 데이터 지역성

    • 웹페이지에 문서를 보여주는 것처럼 애플리케이션이 자주 문서 전체에 접근할 경우 storage locality를 사용하면 성능에 이점이 있다. 만약 문서가 여러 테이블에 나눠져있다면 문서 전체를 조회하기 위해 더 많은 시간이 소요된다.
    • 지역성의 이점은 한 번에 해당 문서의 많은 부분을 필요로 하는 경우에만 적용된다.
      • 데이터베이스에서는 대게 문서의 작은 부분에만 접근해도 전체 문서를 적재해야 하기 때문에 큰 문서에서는 낭비일 수 있다.
      • 문서를 갱신할 때에도 전체를 재작성해야 한다.
      • 따라서 문서를 작게 유지하면서, 문서의 크기가 증가하는 쓰기를 피하는 것을 권장한다.
      • 이러한 성능 제한으로 데이터 베이스가 유용하게 사용될 수 있는 상황이 많이 줄어든다.

     

    출처 - 데이터 중심 애플리케이션 설계 

    'TECH' 카테고리의 다른 글

    컨테이너 대 가상머신  (1) 2023.11.23
    VM이란?  (0) 2023.11.23
    HTTP Keep-Alive란 무엇인가  (0) 2023.11.13
    Circuit Breaker 패턴이란?  (0) 2022.03.06
Designed by Tistory.