본문 바로가기

소프트웨어-이야기/데이터 저장소 + 시각화

[MariaDB]RDB 속에서 NOSQL 사용하기

배경

티셔츠의 속성을 저장하는 테이블이 있다고 생각해보자

티셔츠의 팔 길이, 색상 등은 항상 저장되어야하는 속성이니 이러한 데이터는 고정 스키마를 사용하면 된다.


그런데 이 중 몇개의 티셔츠는 한정판 티셔츠이거나, 누군가 기증한 티셔츠여서 일반 티셔츠에서는 없는 속성을 갖고 있는 경우가 있다. 이러한 정보들을 RDB에 저장해야한다면, 어떻게 하는게 좋을까?


누가 기증한 티셔츠인지 저장해야하는 경우, 기증자를 의미하는 새로운 필드를 저장하는게 맞을까?

전체 데이터 로우 중 5%만 이 필드가 필요한 경우, 새로운 필드를 사용하는게 맞을까?


이러한 경우 필요한 속성만 동적으로 저장할 수 있어야한다. 

그러려면 고정된 스키마에 동적 스키마를 적용할 수 있어야한다. 즉 RDB 개념에 NOSQL 개념을 접목시킬 수 있어야한다.


최근에 이러한 방식이 필요한 때가 왔고, 마리아 DB에서 동적인 속성값을 저장할 수 있는 데이터 타입이 있는지 찾아보았다.


Maria DB에 동적 스키마 적용하기

maria db은 dynamic columns과 json type을 지원한다.

두 기능을 사용하면 RDB 개념에 NOSQL을 적용하는 것이 가능하다.

만약 두 기능을 지원하지 않는 버전이라면, 어쩔 수 없이.. 텍스트타입의 필드에 JSON 구조의 데이터를 저장하는 경우도 있다. 


Dynamic Columns

maria db 5.3 버전부터 지원하는 기능이다. ( KEY의 데이터 타입을 STRING으로 저장할 수 있게 된건 10.0.1 버전부터다 )

바이너리 데이터 타입을 의미하는 Blob 타입의 필드에 동적 데이터를 저장할 수 있게 하는 기능이다.

nameformatpriceattr

movie1

Blu-ray

29.99
ratingdurationaspect_ratio
PG962.21:1

book1

Paperback7.99
authorpage_count
Isaac Asimov296

이런식으로 한 테이블에 있는 행들이 각각 다른 속성을 가질 수 있게 된다.


구체적인건 아래의 문서를 참고하면 된다.



JSON Function 

JSON 타입의 속성을 저장할 수 있게 해주는 기능이다. 
Dynamic Columns의 데이터 타입은 BLOB인 반면, JSON 데이터 타입은 내부적으로 LONG DATA TYPE이다. 

user_id

namecountryAttr
sjohnsonShaneUS
{
   "email": {
      "work": "shane.johnson@mariadb.com"},
   "phone": {
      "mobile": "(555) 555-5555"},
   "social": {
      "twitter": "@shane_dev",
      "linkedin": "/in/shanekjohnson"}
}


Maria DB에서 JSON Function을 사용하는 방법은 아래의 문서를 참고하면 된다. ㅎㅎ 

White Paper: Flexible Data Modeling with MariaDB Server: JSON Functions


Dynamic Columns VS JSON Function 

공통점 : 인덱싱 걸려면, Virtual Field를 사용해야하는건 둘다 똑같다.

다른점 : 

- Dynamic Columns는 쿼리를 날릴 때, 가져오려는 필드의 데이터 타입을 명시해야한다. 그러나 COLUMN_JSON을 사용하면, JSON으로 값을 리턴하기 때문에 이는 크게 문제가 되지는 않는다. 그러나 이 경우, Dynamic Column에 있는 모든 값을 읽어와야한다. 필요한 필드만 JSON 포맷으로 가져올 수 없다. 

- Dynamic Columns의 타입은 BLOB이다. 바이너리 데이터 타입인거다. 그러나 JSON Format은 내부적으로는 Long Text 타입이다. 


참고 자료

[maraidb 공식 자료]SQL or NoSQL? … Both with MariaDB 10 

[mariadb 공식 자료] Dynamic Columns

[mariadb 공식 자료] JSON with MariaDB 10.2

[mariadb 공식 자료] SON functions and dynamic columns

White Paper: Flexible Data Modeling with MariaDB Server: Dynamic Columns

White Paper: Flexible Data Modeling with MariaDB Server: JSON Functions


읽어보면 좋을 자료

[mariadb 공식 자료] Putting Virtual Colummns to good use virtual colummns가 뭐지? ㅎㅎ