앞서 NoSQL의 특징과 데이터 모델링의 개념을 살펴봤는데, 그 종류가 매우 다양하고 각 종류마다 데이터 관리 방식이 다르다는 것을 알 수 있었습니다. 다양하게 데이터를 모델링 할 수 있는 만큼 여러 기법들이 존재하는데 어떤 기법들이 있는지 살펴보고 그 중 대표적인 기법들에 대해서 자세히 알아보도록 하겠습니다.
주요 NoSQL 데이터 모델링 기법
Atomic Aggregates
Enumerable Keys
Dimensionality Reduction
Index Table
Composite Key Index
Aggregation with Composite Keys
Inverted Search - Direct Aggregation
Materialized Path
.....
NoSQL의 데이터 모델링 기법에는 위와 같이 다양한 방식이 존재합니다. 이중 가장 먼저 소개할 기법은 Composite Key 방식입니다.
1. Composite Key
이름 그대로 여러 Key를 합하는 방식입니다. 하나 이상의 Field를 delimiter(구분 문자)를 이용하여 구분지어 사용하는 방법이며 조합된 Key를 Composite Key라 부르고 이는 Unique한 값입니다. K/V 구조에서 "nosql:mongodb"와 같은 형태로 Key에 입력됩니다.
위와 같이 데이터가 입력되는데 이러한 경우 Ordered K/V Store 방식에서 유용하게 사용할 수 있습니다. Key로 정렬이 되기 때문에 order by와 같은 sorting기능이나 grouping의 기능 구현이 가능합니다.
클러스터링을 통해 n개의 서버로 분산시킬 경우 Key를 기준으로 데이터를 나누어 각 서버에 저장할 수 있습니다. 이때 적절한 Key를 선정하여 서버 부하를 골고루 분산시킬 수 있도록 유의해야합니다.
2. Inverted Search Index
K/V Store방식에서 Value의 값을 Key로, Key의 값을 Value로 하는 패턴으로 Google, Naver와 같은 검색엔진에서 많이 사용됩니다. 검색엔진의 검색로봇은 웹 상의 모든 페이지들을 크롤링하면서 문서 내의 Keyword들을 추립니다. 이렇게 추출된 Keyword를 index화 한 후 URL에 맵핑해서 저장합니다. 이 때 Key에는 URL, Keyword들은 Value로 저장이 되는데 이는 검색하는데 비효율적입니다. 왜냐하면 보통 단어를 Key로 검색하기 때문입니다.
검색봇이 쌓은 데이터는 위와 같은 형태가 됩니다. 검색할 경우 nosql이라는 Keyword로 URL을 찾아내야 하기 때문에 위의 구조는 비효율적입니다.
Inverted Search Index는 위와 같이 Key, Value를 바꿔 검색에 적합한 형태로 바꾸는 방식입니다.
Keyword를 Key로, URL을 Value로 하는 테이블을 다시 생성한 다음, Key로 검색을 하면 신속하게 URL을 찾아낼 수 있으므로 검색에 적합합니다. nosql을 검색할 때 nosql에 해당하는 value(URL)을 불러오면 됩니다.
Inverted Search Index의 과정을 쉽게 이해할 수 있는 그림입니다. MongoDB의 Map-Reduce를 통해 이 방식을 구현할 수 있는데 이는 추후 실습을 통해 알아보도록 하겠습니다.
계층 데이터 구조 모델링
Composite Key와 Inverted Search Index와는 다르게 지금부터 알아볼 기법들은 Tree와 같이 계층적인 구조로 모델링합니다. NoSQL은 기본적으로 row, column을 가지고 있는 테이블 구조가 일반적이기 때문에 계층형 구조로 저장하는 것이 쉽지는 않습니다. RDBMS의 경우 1:n의 관계를 통해 어느정도 계층형 구조를 저장할 수 있는데, NoSQL에서도 이러한 기법들을 참고하여 구현하였습니다.
3. Tree Aggregation
Value에 Tree구조 자체를 저장하는 방식입니다. JSON, XML등을 이용하여 Tree구조를 정의하고 Value에 저장합니다. Document방식인 MongoDB 등에서 사용가능하며 Tree 자체가 크지 않고 변경많지 않은 경우에 적합합니다. 수시로 데이터가 삭제된다거나 update된다면 해당 데이터를 찾아가는 시간이 오래 걸리기 때문에 성능 저하로 이어질 가능성이 높습니다.
게시판을 모델링한 예시입니다. 댓글을 구현하고자 할 때 Comments라는 Key의 Value값으로 Tree구조로 이루어진 JSON String을 저장합니다.
4. Materialized Path
Tree구조를 테이블에 저장할 때 사용하는 방식으로 root에서 현재 노드까지의 경로를 Key에 저장하는 기법입니다. Value에는 해당 노드의 값만이 들어가 있어 직관적이고, 구현하는데 노력에 비해 효율적인 저장 방식입니다. Key의 조합은 Composite Key방식과 비슷하게 / 또는 : 등 구분자로 사용해도 되며 구분자 없이 ABC 등으로 붙여서 사용 가능합니다.
위와 같이 Tree구조의 데이터가 있을 때, A/C/F/H 와 같은 형태로 Key를 구성합니다. Key에 대한 검색을 할 경우, 정규식(Regular Expression)을 활용할 수 있으며 특정 노드의 하위 트리를 불러오는 등 다양하게 쿼리를 사용할 수 있습니다.
참고
https://www.quora.com/Information-Retrieval-What-is-inverted-index
https://www.elastic.co/guide/en/elasticsearch/guide/current/inverted-index.html
T-Academy MongoDB Session
'Data > NoSQL' 카테고리의 다른 글
[MongoDB] $text 검색 시 'No query solutions' 오류 (0) | 2023.10.27 |
---|---|
NoSQL 데이터 모델링 개념 (1) | 2016.06.10 |
NoSQL의 특징 #2 (2) | 2016.06.07 |
NoSQL의 특징 #1 (0) | 2016.06.06 |
댓글