| 문서 |
|---|
| 중첩된 서브문서가 별도 테이블이 아니라 하나의 부모 문서 안에 담긴다. | 함께 읽는 일대소수 관계. 품목을 품은 주문. 주소 세 개를 가진 사용자. |
| 데이터가 아니라 외래 id를 저장한다. 두 번째 읽기나 $lookup으로 해소한다. | 크거나 공유되거나 독립적으로 갱신되는 서브 엔티티. 컬렉션 간 다대다 링크. |
| 부모가 짧은 자식 배열을 내장한다. 전체 집합이 하나의 문서로 들어맞고 한 번에 로드된다. | 프로필의 몇 개 전화번호나 설정. 한 번의 읽기가 부모와 자식을 함께 반환. |
| 자식은 자체 컬렉션에 살고 각자 부모 id를 지니거나, 부모가 상한 있는 id 배열을 유지한다. | 내장하기엔 너무 크거나 독립적인 집합. 부모 id로 자식을 조회. |
| 자식이 부모 id를 저장하고 부모는 자식을 나열하지 않는다. 집합이 무한히 자라기 때문. | 호스트나 사용자에 묶인 이벤트, 로그, 투표. 부모 id로 걸러 페이지네이션. |
| 서로 다른 엔티티 타입의 문서가 하나의 컬렉션을 공유하며 type 필드로 구별된다. | 여러 종류의 부모에 붙는 댓글이나 알림을 한 가지 방식으로 조회. |
| 소수의 극단적 엔티티를 공유 형태에서 분리해 크기나 트래픽이 나머지를 왜곡하지 않게 한다. | 팔로워 목록이나 카운터가 일반 문서를 초과 성장시킬 유명 계정. |
| 각 리비전은 같은 id와 커지는 버전 번호를 가진 새 문서다. 쿼리가 최신을 고른다. | 이전 리비전이 계속 조회 가능해야 하는 감사 추적과 편집 이력. |
| 파생값을 쓰기 시점에 계산해 요약 대상 데이터 옆에 저장한다. | 매 읽기마다 집계가 돌았을 합계, 평점, top-N. |
| 키-값 & 와이드 컬럼 |
|---|
| DynamoDB 설계 용어: 오버로드된 파티션·정렬 키로 여러 엔티티 타입을 한 테이블에 압축한다. | 조인 없이 한 쿼리로 이기종 항목을 가져온다. |
| 하나의 키 속성이 여러 엔티티 타입을 담당하며 USER#, ORDER# 같은 접두사로 표시된다. | 단일 테이블 설계. 관련 항목을 한 파티션 아래 모아 한 쿼리로 가져온다. |
| 파티션 키가 행을 노드에 분산하고 정렬 키가 각 파티션을 정렬한다. | Cassandra와 DynamoDB. 범위 스캔, 정렬된 로그, 계층형 복합 키. |
| 여러 속성을 구분자로 잇붙인 하나의 정렬 키 — country#region#city — 로 접두사 일치가 계층을 타고 내려간다. | 계층과 다면 필터. 정렬된 범위 쿼리 하나가 수많은 인덱스 조회를 대체한다. |
| 이벤트를 고정 창 — 시간, 일, 월 — 단위로 전용 파티션이나 테이블 아래 묶는다. | 메트릭, 로그, IoT 텔레메트리. 파티션 크기를 묶고 콜드 데이터를 만료시킨다. |
| 읽기가 잦은 필드를 레코드들에 복제해 쿼리가 두 번째 조회를 쫓지 않게 한다. | 결과적 일관성이 감내되고 저장이 값싼 읽기 중심 워크로드. |
| 일부 항목만 가진 속성 위에 세운 보조 인덱스. 값 없는 항목은 인덱스에 들어오지 않는다. | 대체 접근 경로. 전체 스캔 없이 스파스 부분집합 — 미완료 주문, 미출고 항목 — 을 찾는다. |
| 정확한 쿼리를 먼저 적는다. 테이블 배치는 엔티티나 정규형이 아니라 쿼리에서 도출한다. | Cassandra와 DynamoDB 스키마 작업. 쿼리 계열마다 테이블 하나. 데이터 모델이 질문을 베낀다. |
| 맞는 키가 없어 쿼리가 수많은 파티션·노드를 병렬로 때려야 하는 상황. | 목표가 아니라 설계로 걷어낼 악취. 흔한 쿼리가 한 파티션에 떨어지도록 키를 다시 짓는다. |
| 쓰기 시점에 각 독자 뷰로 복제본을 밀어내거나, 읽기 시점에 모아 병합한다. | 피드와 타임라인. 작은 오디언스엔 쓰기 시점, 거대한 오디언스엔 읽기 시점. |
| 미리 만들어 둔 쿼리 결과를 자체 테이블로 저장하고 베이스 변화에 맞춰 최신을 유지한다. | 하나의 쓰기 경로 위의 대체 읽기 형태. 베이스 테이블이 답 못 하는 쿼리를 응답한다. |
| 그래프 |
|---|
| 각 간선이 출발 노드에서 도착 노드를 가리키는 행이나 튜플이다. | 그래프·속성 스토어. 친구의 친구 탐색, 라우팅, 추천. |
| 각 관계가 자체 컬렉션의 문서 하나로, from/to id와 링크 속성을 담는다. | 문서 스토어의 그래프. 링크 자체의 속성 — 평점, 역할, 타임스탬프. |
| 모든 노드가 깊이 우선 순회의 좌·우 카운터를 저장하고 서브트리는 부모 범위 안에 산다. | 읽기 중심 트리. BETWEEN 쿼리 하나가 서브트리를 반환. 삽입은 순회 번호를 다시 매긴다. |
| 전용 테이블이 깊이 0의 자기 자신을 포함해 모든 조상-자손 쌍을 기록한다. | 임의 깊이의 전체 브랜치 쿼리. 단순한 조인, 비용은 저장소와 유지보수. |
| 속성 그래프는 노드와 간선에 키-값 속성을 붙이고, RDF는 모든 것을 주어-서술어-목적어 트리플로 서술한다. | 풍부한 순회에는 속성 그래프(Neo4j), 링크드 오픈 데이터와 온톨로지 교환에는 RDF. |
| 벡터 |
|---|
| 고차원 float 배열이 메타데이터 옆에 앉는다. ANN 인덱스가 최근접 이웃을 찾는다. | 시맨틱 검색, RAG 검색, 추천, 비정형 콘텐츠 유사도. |
| 원본 문서를 — 크기, 겹침, 구조 기준으로 — 나눈 뒤 각 조각을 따로 임베딩한다. | RAG 검색 품질. 청크 크기는 정밀도와 재현율을 맞바꾼다. 겹침은 잘린 문장을 보호한다. |
| 밀집 벡터 유사도가 키워드 매칭과 나란히 돌고, 두 순위 목록이 하나의 결과로 융합된다. | 정확한 용어와 의미를 동시에 필요로 하고 메타데이터 필터를 얹는 쿼리. |