NoSQL

NoSQL, Key: Value

어휘 창고 지기 2020. 8. 10. 10:59
반응형

NoSQL의 저장방식의 한 종류로 Key: Value 형식이 있습니다.
다른 형식의 NoSQL은 Key: Value의 확장형이라 해도 좋을 만큼 Key: Value는 NoSQL 저장 방식의 근간을 이루고 있습니다.
Document 형식이나 Column Family 형식도 그 안을 들여다 보면 Key: Value의 묶음으로 구성됩니다.

Key: Value는 매우 단순한 구조입니다.
학생을 예로 들어 생각해 보겠습니다.
한 학급의 학생은 이름과 번호를 가집니다.
(단, 여기서 번호는 1, 2, 3, ... 자연수로 부여한 번호입니다.)
서로 다른 번호 때문에 같은 이름의 학생이 있더라도 번호로 구분됩니다.
즉, 1번 '홍길동'과 10번 '홍길동'은 다른 학생인 것입니다.
번호가 Key 역할을 하는 것입니다.
그리고 Value는 학생의 이름이 됩니다.
매우 단순한 구조입니다.
그러나 조금만 깊이 생각해 보면 고민해 볼 점이 있습니다.

먼저 Key에 대해 생각해 보겠습니다.
앞서 예로든 학생에게 부여된 번호는 해당 학급에서만 유일합니다.
1학년 1반에도 1번이 있을 것이고 1학년 2반에도 1번이 있을 것입니다.
동일 학년 전체로 보면 중복이 발생합니다.
학급에서 동일 학년으로 범위를 확대하자 번호가 Key 역할을 할 수 없게 됩니다.
번호가 Key 역할을 하려면 어떻게 해야 할까요?
이때에는 학년과 학급이 Key에 추가되어야 합니다.
즉, '학년:학급:번호'로 구성돼야 비로소 Key 역할을 할 수 있게 됩니다.
아래와 같은 형식으로 표현할 수 있습니다.

Key를 '학년:학급:번호'로 구성한 예시

1학년:1반:1번

그런데 '학년:학급:번호' 조차도 학교의 범위를 넘어서면 또다시 조정이 필요합니다.
이처럼 Key라는 것은 경계나 범위에 따라 구성이 달라집니다.

이제 Value에 대해 생각해 보겠습니다.
앞의 예에서 학급의 학생에게 부여된 번호는 Key이고 학생의 이름은 Value라고 하였습니다.
그러나 Key도 범위나 경계에 따라 다양하게 구성될 수 있듯이 Value도 다양한 구성이 가능합니다.
학생을 설명할 수 있는 정보는 매우 다양합니다.
이름이라는 것은 학생이 가진 정보 중 하나에 불과합니다.
학생과 관련 있는 정보 몇 개만 나열해 보면 다음과 같습니다.

이름, 나이, 전화번호, 이메일, ...

번호에 해당하는 학생에게는 이름 외에도 의미 있는 정보가 많습니다.
Value가 이름만 갖는 경우는 '홍길동'만으로 충분합니다.
하지만 이름, 나이, 전화번호, 이메일을 표현해야 한다면 어떨까요?

다음과 같이 표현하는 경우를 생각해 보겠습니다.

Key Value
1학년:1반:1번 홍길동, 14, 010-111-1234, hong@gmail.com

Value의 값에 이름, 나이, 전화번호 등 여러 정보를 표현하였습니다.
그런데 위의 예에서 '14'가 의미하는 것이 무엇인지 제삼자가 알 수 있을까요?
직관적으로 알기 어렵습니다.


다음과 같이 표현한다면 어떨까요?

Key Value
1학년:1반:1번 이름: 홍길동, 나이: 14, 전화번호: 010-111-1234, 이메일: hong@gmail.com

Value의 값을 가리키는 이름, 나이, 전화번호, 이메일을 명시했기 때문에 각 값의 의미를 직관적으로 알 수 있습니다.
여기서 이름, 나이, 전화번호, 이메일은 각 값을 가리키는 Key역할을 합니다.
위 예를 통해서 Value 내에서도 값의 의미를 구분하기 위한 Key가 존재할 수 있는 것입니다.
물론 이때에도 Key는 Value 내에서 유일해야 합니다.

<요약>
· Key는 범위 내에서 유일해야 한다.
e.g., 
Key Value내에서 Key

Key Value
1학년:1반:1번
=> '1학년 1반 1번'은 홍길동 학생을 가리킴
홍길동, 14, 010-111-1234, hong@gmail.com
=> '이름'은 '홍길동'이며 '나이'는 14살임

 

· Value는 단일 값은 물론 여러 값을 가질 수 있다.

e.g., 
Value가 단일 값을 가지는 경우

Key Value
1학년:1반:1번
홍길동

 

Value가 여러 값을 가지는 경우

Key Value
1학년:1반:1번
홍길동, 14, 010-111-1234, hong@gmail.com

반응형

'NoSQL' 카테고리의 다른 글

CAP 원칙  (0) 2020.08.18
No Single Point Of Failure  (0) 2020.08.10
Scalability  (1) 2020.08.10
NoSQL, Column Family  (0) 2020.08.10
NoSQL, Document  (0) 2020.08.10