sub_title
 MySQL
제   목 MariaDB 10의 NoSQL 기능과 MySQL의 Json 관련 UDF
작성자 달콤한수박 등록일 2017-11-29 23:18:00 조회수 6,884

MariaDB 10에서는 Dynamic Column이라는 이름으로 NoSQL적인 기능을 제공하고 있다. 개념 자체는 간단한데 BLOB 컬럼에 JSON을 저장한 뒤, JSON에서 특정 컬럼의 값을 조회한다던가 특정 컬럼을 추가/삭제하는 기능을 제공한다.

간단한 예는 MariaDB Blog와 Manual에서 볼 수 있다. 과거에 조사할 때는 Index 를 걸 수는 없는 것으로 기억한다. (지금도 그런 듯 하다)

기능 자체는 간단하고 Index scan도 사용할 수 없지만, 특정 용도에서는 유용하게 사용될 수 있을 것 같다.

MariaDB Dynamic Column 사용법

간단한 사용 방법을 보자. 아래 예제는 mysql> 이라고 보이지만, client만 mysql일 뿐 실제는 MariaDB 10에서 실행한 결과이다.

테이블 생성 및 데이터 입력

mysql> CREATE TABLE person(id INT, dynamic_cols BLOB);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO person VALUES (1, COLUMN_CREATE('name', 'heo', 'age', 11));
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO person VALUES (2, COLUMN_CREATE('name', 'kim', 'age', 22));
Query OK, 1 row affected (0.00 sec)

컬럼명은 아무것이나 해도 상관없다.

데이터 조회

mysql> SELECT id, dynamic_cols FROM person;
+------+---------------------------+
| id   | dynamic_cols              |
+------+---------------------------+
|    1 |         agename!heo |
|    2 |         agename,!kim |
+------+---------------------------+
2 rows in set (0.00 sec)

데이터가 깨져보이는데 이는 Dynamic Column의 자료가 binary 형태로 저장되기 때문이다. 그래서 컬럼 타입을 BLOB으로 해야 한다.

다음과 같이 COLUMN_JSON() 함수를 이용하여 JSON 형식으로 볼 수 있다.

mysql> SELECT id, COLUMN_JSON(dynamic_cols) FROM person;
+------+---------------------------+
| id   | COLUMN_JSON(dynamic_cols) |
+------+---------------------------+
|    1 | {"age":11,"name":"heo"}   |
|    2 | {"age":22,"name":"kim"}   |
+------+---------------------------+
2 rows in set (0.00 sec)

JSON의 특정 key 값만 조회하고 싶은 경우 COLUMN_GET() 함수를 이용하면 된다.

mysql> SELECT id, COLUMN_GET(dynamic_cols, 'name' AS CHAR) FROM person;
+------+------------------------------------------+
| id   | COLUMN_GET(dynamic_cols, 'name' AS CHAR) |
+------+------------------------------------------+
|    1 | heo                                      |
|    2 | kim                                      |
+------+------------------------------------------+
2 rows in set (0.00 sec)

컬럼 추가

기존 값에 원하는 key를 축할 수 있다. COLUMN_ADD() 함수를 이용하면 된다.

mysql> UPDATE person SET dynamic_cols = COLUMN_ADD(dynamic_cols, 'gender', 'M') WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT id, COLUMN_JSON(dynamic_cols) FROM person;
+------+--------------------------------------+
| id   | COLUMN_JSON(dynamic_cols)            |
+------+--------------------------------------+
|    1 | {"age":11,"name":"heo","gender":"M"} |
|    2 | {"age":22,"name":"kim"}              |
+------+--------------------------------------+
2 rows in set (0.00 sec)

MySQL에서의 유사 기능

이 정도의 기능은 MySQL의 UDF(User Defined Function)으로 구현할 수 있으며 이미 구현되어 있다.

 
2
    
 
0
        list
 
※ 짧은 댓글일수록 예의를 갖추어 작성해 주시기 바랍니다.
line
reply cancel
 
번호 제목 글쓴이 추천 조회 날짜
49  MariaDB 10의 NoSQL 기능과 MySQL의 Json 관련 UDF   member 달콤한수 2 / 0 6884 2017-11-29
48  MySQL은 공짜가 아니다   member 진짜고구 3 / 1 5628 2017-08-24
47  MySql 문자열 함수   member 진짜고구 0 / 0 3926 2017-08-24
46  MySQL IN subquery 성능. IN sub query는 가급적 사용을 피합시다!   member 진짜고구 0 / 0 5840 2017-08-21
45  [MYSQL] 가져온 값을 조건에 따라 값 바꾸기(case - when - end 문)    member 진짜고구 0 / 0 3582 2017-08-21
44  MySQL 가져온 데이터 삽입하기(SELECT 하면서 INSERT하기)   member 높이뜬새 1 / 1 20465 2017-08-19
43  터미널에서 접속해 MySQL 테이블 내용을 볼려고 할때 한글이 깨진다면!!   member 높이뜬새 0 / 0 2092 2017-04-04
42  MySQL 문자열 길이 구하기   member 높이뜬새 2 / 0 15753 2017-04-04
41  MySQL 사용자 권한설정 (grant 명령어) 이미지   member 높이뜬새 1 / 0 11117 2016-10-23
40  MySQL 컬럼중 가장 큰값 가져오기 이미지   member 높이뜬새 1 / 0 5736 2016-08-20
39  MySQL 오늘기준으로 최근 한달 동안 데이터 가져오기   member 높이뜬새 2 / 2 15677 2016-08-09
38  MySQL 원격서버로 덤프파일 복원하기   member 높이뜬새 1 / 0 5732 2016-04-27
37  MySQL에서 특정 문자열만 변경하기 이미지   member 높이뜬새 0 / 0 10687 2016-01-23
36  MySQL 이번주의 요일별 날짜를 가져오기 이미지   member 높이뜬새 0 / 0 10919 2016-01-20
35  MySQL 요일 구하기 이미지   member 높이뜬새 3 / 0 22160 2016-01-18
34  MySQL 문자형 컬럼에 숫자가 포함된 데이터 가져오기   member 높이뜬새 1 / 0 6395 2015-06-29
33  MySQL 바이너리 검색시 인덱스를 타게하기   member 높이뜬새 10 / 0 6754 2015-06-29
32  MySQL 컬럼의 중복 레코드 수를 구하기   member 높이뜬새 2 / 0 2965 2015-06-29
31  MySQL 자동증가, auto increment 값 초기화 하기   member 높이뜬새 3 / 0 6184 2015-06-29
30  MySQL 테이블 복사하기 이미지   admin 웹마당넷 4 / 0 9236 2015-06-28
29  MySQL 필드의 결합   admin 웹마당넷 1 / 0 3737 2015-06-26
28  MySQL select 출력 값을 text파일로 만들기 이미지   admin 웹마당넷 3 / 0 6121 2015-06-26
27  MySQL 에서 IF문 사용하기   member 높이뜬새 23 / 3 149858 2010-03-08
26  MySQL 날짜 차이 구하기   member 높이뜬새 6 / 1 23014 2010-01-25
25  MySQL 특정 테이블만 백업하기   member 높이뜬새 11 / 0 49929 2010-01-06
write
[2] button