물리적 데이터 모델링
물리적 데이터 모델링 (Physical data modeling)
논리적 데이터 모델을 정의하면 물리적 모델을 만드는 것은 비교적 간단한 과정이에요.
본문
논리적 모델의 각 테이블을 살펴보며 각 항목에 타입을 지정해요. 기본 타입, 컬렉션, 사용자 정의 타입을 포함한 유효한 CQL 데이터 타입을 사용할 수 있어요. 설계를 단순화하기 위해 만들 수 있는 추가 사용자 정의 타입도 식별할 수 있어요.
데이터 타입을 지정한 후에는 크기 계산을 수행하고 모델이 어떻게 동작하는지 테스트해 모델을 분석해요. 발견한 내용에 따라 일부 조정을 할 수도 있어요. 다시 한 번 예제를 통해 데이터 모델링 과정을 더 자세히 다뤄 볼게요.
시작하기 전에 물리적 데이터 모델에 대한 Chebotko 표기법의 몇 가지 추가 사항을 살펴볼게요. 물리적 모델을 그리려면 각 컬럼의 타입 정보를 추가할 수 있어야 해요. 아래 그림은 샘플 테이블의 각 컬럼에 타입을 추가한 모습을 보여줘요.

이 그림에는 각 테이블이 포함된 키스페이스 지정과, 컬렉션과 사용자 정의 타입으로 표현된 컬럼에 대한 시각적 신호가 포함돼 있어요. 정적 컬럼과 보조 인덱스 컬럼의 지정에도 주목하세요. 논리적 모델의 일부로 이를 지정하는 데 제한은 없지만, 일반적으로 물리적 데이터 모델링 관심사에 더 가까워요.
호텔 물리적 데이터 모델
이제 물리적 모델 작업을 시작해 볼게요. 먼저 테이블을 담을 키스페이스가 필요해요. 설계를 비교적 단순하게 유지하기 위해, 호텔과 가용성 데이터용 테이블을 담을 hotel 키스페이스와, 예약과 손님 데이터용 테이블을 담을 reservation 키스페이스를 만들 거예요. 실제 시스템에서는 관심사를 분리하기 위해 테이블을 더 많은 키스페이스로 나눌 수도 있어요.
hotels 테이블의 경우 Cassandra의 text 타입을 사용해 호텔의 id를 나타내요. 주소는 address 사용자 정의 타입을 만들어요. 전화번호는 국가마다 숫자 형식의 차이가 크므로 text 타입을 사용해요.
hotel_id 같은 속성에 uuid 타입을 사용하는 것이 합리적이지만, 이 문서는 샘플을 단순하고 읽기 쉽게 유지하기 위해 대부분 식별자로 text 속성을 사용해요. 예를 들어 호스피탈리티 산업의 일반적인 관례는 "AZ123"이나 "NY229" 같은 짧은 코드로 속성을 참조하는 거예요. 이 예제는 hotel_ids에 이 값을 사용하지만, 이 값이 반드시 전역적으로 고유하지는 않다는 점을 인정해요.
요소를 고유하게 참조하기 위해 고유 ID를 사용하고, 다른 개체를 나타내는 테이블에서 참조로 이 uuids를 사용하는 것이 종종 도움이 된다는 것을 알게 될 거예요. 이는 서로 다른 개체 타입 간의 결합을 최소화하는 데 도움이 돼요. 애플리케이션에 각 개체 타입을 담당하는 별도 서비스가 있는 마이크로서비스 아키텍처 스타일을 사용한다면 특히 효과적일 수 있어요.
논리적 호텔 데이터 모델의 다양한 테이블의 물리적 표현을 만들면서 같은 접근 방식을 사용해요. 결과 설계는 아래 그림에 나와 있어요.

address 타입도 설계에 포함되어 있음에 주목하세요. 사용자 정의 타입임을 나타내기 위해 별표로 지정되고, 기본 키 컬럼은 식별되지 않아요. 이 타입은 hotels와 hotels_by_poi 테이블에서 사용돼요.
address 사용자 정의 타입에서처럼, 비 기본 키 컬럼의 중복을 줄이기 위해 사용자 정의 타입을 자주 사용해요. 이는 설계의 복잡성을 줄일 수 있어요.
UDT의 범위는 정의된 키스페이스로 제한된다는 점을 기억하세요. 아래 설계에 정의된 reservation 키스페이스에서 address를 사용하려면 다시 선언해야 해요. 이것은 데이터 모델 설계에서 해야 하는 많은 트레이드오프 중 하나일 뿐이에요.
예약 물리적 데이터 모델
이제 설계의 예약 테이블을 살펴볼게요. 논리적 모델에는 예약 번호, 손님, 호텔+날짜로 예약을 조회하기 위한 세 개의 비정규화된 테이블이 포함되어 있었음을 기억하세요. 물리적 데이터 모델 설계의 첫 번째 반복에서는 이 비정규화를 수동으로 관리한다고 가정할게요. 이 설계는 Cassandra의 (실험적) 구체화된 뷰 기능을 사용하도록 수정될 수 있다는 점에 주목하세요.

address 타입이 이 키스페이스에서 재생산되고 guest_id가 모든 테이블에서 uuid 타입으로 모델링된 것에 주목하세요.
이 자료는 Cassandra, The Definitive Guide에서 각색한 내용이에요. O'Reilly Media, Inc. 발행. Copyright © 2020 Jeff Carpenter, Eben Hewitt. All rights reserved. 허가를 받아 사용했어요.