2023. 12. 12. 09:10ㆍNoSQL/Redis
데이터 타입
종류 | 내용 |
strings | 문자(text), Binary 유형 데이터를 저장 |
List | 하나의 key에 여러 개의 배열 값을 저장 |
Hash | 하나의 key에 여러 개의 Fields와 Value로 구성 된 테이블을 저장 |
Set Sorted Set |
정렬되지 않은 String 타입 Set과 Hash를 결합한 타입 |
Bitmaps | 0 & 1 로 표현하는 데이터 타입 |
HyperLogLogs | Element 중에서 Unique 한 개수의 Element 만 계산 |
Geospatial | 좌표 데이터를 저장 및 관리하는 데이터 타입 |
기존 관계형 DB뿐만 아니라 대부분의 NoSQL 제품들은 하나의 토탈 데이터 관리 시스템 기능을 제공하기 때문에 보편적으로 파일 시스템에 비해 효율적으로 데이터를 저장 관리 할 수 있다.
Redis DB 또한 효율적인 데이터 저장 관리를 위해 다양한 타입의 데이터 속성을 제공하고 있다.
1. Hash 타입
Redis 에서 데이터를 표현할 때 기본 타입은 하나의 key와 하나 이상의 Field/Element 값(value) 로 저장하는 방법이다.
key에는 아스키 값(AscII value)를 저장할 수 있고, Value에는 기본적으로 Strings 데이터를 저장할 수 있으며 추가로 컨테이너(Container) 타입의 데이터들을 저장할 수 있다. 컨테이너 타입에는 Hash, List, Set/Sorted Set 4가지 유형이 있다.
- Hash 타입은 기존 관계형 DB에서 Primary-key 와 하나 이상의 컬럼으로 구성된 테이블 구조와 매우 흡사한 데이터 유형이다.
- 하나의 key는 오브젝트명과 하나 이상의 필드 값을 콜론(:) 기호로 결합하여 표현할 수 있다.
- 문자 값을 저장할 때는 인용부호("")를 사용하며 숫자 값을 저장할 때는 인용부호가 필요하지 않다.
- 기본적으로 필드 개수는 제한이 없다.
- Hash 타입의 데이터를 처리할 때는 hmset, hget, hgetall, hkey, hlen 명령어를 사용한다.
명령어 | 시간복잡도 | 설명 |
hmset | O(1) | 해시 내에서 여러 필드를 동시에 설정하는데 사용 |
hget | O(1) | 해시 내에서 특정 필드에 연결된 값을 가져온다. |
hgetall | O(N) | 해시 내의 모든 필드와 값들을 가져온다. |
hkeys | O(N) N은 해시의 필드수 |
해시 내의 모든 필드 이름을 반환한다. |
hlen | O(1) | 해시 내의 필드 개수를 반환한다. |
Redis의 해시 데이터 구조를 조작하는데 사용된다. 해시는 문자열 필드와 문자열 값 간의 매핑이며, 특히 다양한 속성을 가진 객체를 표현해야 할 때 유용하다.
2. List 타입
- 리스트 타입은 기존의 관계형 테이블에는 존재하지 않는 데이터 유형이며 일반적인 프로그래밍 언어에서 데이터를 처리할 때 사용되는 배열(Array) 변수와 유사한 데이터 구조이다.
- 기본적으로 String 타입의 경우 배열에 저장할 수 있는 데이터 크기는 512MB 이다.
- 리스트 타입의 데이터를 처리할 때는 lpush, lrange, rpush, rpop, llen, lindex 명령어를 사용한다.
명령어 | 시간복잡도 | 설명 |
lpush | O(1) | 리스트의 왼쪽에 하나 이상의 요소를 추가한다. |
lrange | O(Slice 의 길이) | 리스트에서 지정된 범위의 요소들을 가져온다. |
rpush | O(1) | 리스트의 오른쪽에 하나 이상의 요소를 추가한다. |
rpop | O(1) | 리스트의 오른쪽에서 요소를 제거하고 반환한다. |
llen | O(1) | 리스트의 길이(요소 개수)를 반환한다. |
lindex | O(N) | 리스트에서 주어진 인덱스의 요소를 반환한다. |
Redis 에서 리스트 데이터를 조작하는데 사용된다.
리스트는 순서가 있는 요소들의 집합이며 큐나 스택과 같은 다양한 용도로 활용될 수 있다.
3. Set 타입
- 리스트 타입은 하나의 필드에 여러개의 배열 값을 저장할 수 있는 데이터 구조 였다면 Set 타입은 배열 구조가 아닌 여러 개의 엘리먼트로 데이터 값을 표현하는 구조이다.
- Set 타입의 데이터를 처리할 때는 sadd, smembers, scard, sdiff, sunion 명령어를 사용한다.
명령어 | 시간복잡도 | 설명 |
sadd | O(1) | Set에 하나 이상의 멤버를 추가한다. |
smembers | O(N) | Set에 속한 모든 멤버들을 반환한다. |
scard | O(1) | Set의 멤버 개수(카디널리티)를 반환한다. |
sdiff | O(N) N은 모든 집합의 크기 |
여러 Set 간의 차집합을 반환한다. |
sunion | O(N) N은 모든 집합의 크기 |
여러 Set 간의 합집합을 반환한다. |
Set은 중복된 멤버를 허용하지 않고, 멤버들 간에 순서가 없는 집합을 나타낸다. 따라서 고유한 멤버를 저장하거나 여러 집합 간의 관계를 파악하는데 유용하다.
4. Sorted Set 타입
- Sorted Set 타입은 Set 타입과 동일한 데이터 구조이며 차이점은 저장된 데이터 값이 분류(Sorting)된 상태이면 Sorted Set 타입이고, 분류되지 않았다면 Set 타입이다.
- 데이터를 처리할 때는 zadd, zrange, zcard, zcount, zrank, zrevrank 명령어를 사용한다.
명령어 | 시간복잡도 | 설명 |
zadd | O(log N) N은 정렬된 집합의 크기 |
정렬된 집합에 하나 이상의 멤버와 그들의 점수를 추가한다. |
zrange | O(log N + M) N은 정렬된 집합의 크기, M은 반환할 멤버의 개수 |
정렬된 집합에서 지정된 범위의 멤버를 가져온다. |
zcard | O(1) | 정렬된 집합의 멤버 개수(카디널리티)를 반환한다. |
zcount | O(log N) N은 정렬된 집합의 크기 |
정렬된 집합에서 지정된 점수 범위에 속하는 멤버의 개수를 반환한다. |
zrank | O(log N) | 정렬된 집합에서 멤버의 순위(인덱스)를 반환한다. |
zrevrank | O(log N) | 정렬된 집합에서 멤버의 역순위(높은 순위부터)를 반환한다. |
Sorted Set은 멤버들이 유일하며 각 멤버에 대해 정렬 기준인 점수가 할당된 데이터 구조이다.
이를 통해 데이터를 정렬하고 쿼리하는데 유용하다.
5. Bit 타입
- 일반적으로 사용자가 표현하는 데이터는 문자, 숫자, 날짜인데 이를 Ascii 값이라고 표현하는데 컴퓨터는 이를 최종적으로 0과 1로 표현되는 Bit 값으로 변환하여 저장한다. Redis 에서 제공되는 Bit 타입은 사용자의데이터를 0과 1로 표현하며 컴퓨터가 가장 빠르게 저장할 수 있고 해석할 수 있도록 표현하는 구조이다.
- 데이터를 처리할 때는 setbit, getbit, bitcount 명령어를 사용한다.
명령어 | 시간복잡도 | 설명 |
setbit | O(1) | 지정된 오프셋의 비트를 특정 값(0 또는 1)로 설정한다. |
getbit | O(1) | 지정된 오프셋의 비트 값을 반환한다. |
bitcount | O(N) N은 비트수 |
지정된 범위 내에서 비트가 설정된(1인) 비트의 수를 반환한다. |
비트 연산은 주로 플래그 또는 상태를 나타내기 위해 사용되며, 예를 들어 여러 상태를 갖는 요소를 효율적으로 표현할 수 있다.
6. Geo 타입
- 스마트폰, 모바일 디바이스, 웹 환경의 발전으로 인해 다양한 유형의 데이터를 활용하는 비즈니스 영역이 만들어 지고 있다. Redis DB의 Geo 타입은 위치정보(경도, 위도) 데이터를 효율적으로 저장 관리할 수 있으며 이를 활용한 위치 정보 데이터의 분석 및 검색에 사용할 수 있다.
- 데이터를 처리할 때는 geoadd, geopos, geodist, georadius, geohash 명령어를 사용한다.
명령어 | 시간복잡도 | 설명 |
geoadd | O(log N) N은 저장된 지리 위치의 개수 |
지리 정보를 저장하는데 사용되며, 지도에 지명과 좌표를 추가한다. |
geopos | O(N) | 지도에 저장된 멤버의 좌표를 가져온다. |
geodist | O(log N) | 두 지점 간의 거리를 반환한다. |
georadius | O(log N + M) N은 저장된 지리 위치의 개수 M은 반환할 결과의 개수 |
중심 좌표에서 반경 내에 있는 멤버를 찾는다. |
geohash | O(1) | 멤버의 지리 해시를 반환한다. |
위치 기반 서비스 및 애플리케이션에서 지리 정보를 효과적으로 저장하고 조회할 수 있다.
7. HyperLogLogs 타입
- HyperLogLogs 타입은 관계형 DB의 테이블 구조에서 Check 제약조건과 유사한 개념의 데이터 구조이다. 관계형 DB에서 Check 제약조건을 사용하는 이유는 해당 컬럼에 반드시 저장되어야 할 데이터 값 만을 저장할 수 있도록 제한을 가하는 것이다. Redis DB 에서도 동일하게 특정 필드 또는 엘리먼트에 저장되어야 할 데이터 값을 미리 생성하여 저장한 후 필요에 따라 연결하여 사용할 수 있는 데이터 타입이다.
- 데이터를 처리할 때는 pfadd, pfcount, pfmerge 명령어를 사용한다.
명령어 | 시간복잡도 | 설명 |
pfadd | O(1) | HyperLogLog에 값을 추가한다. |
pfcount | O(1) | HyperLogLog의 근사적인 기수(cardinality)를 반환한다. |
pfmerge | O(N) N은 병합 대상 HyperLogLog 의 크기 |
여러 HyperLogLog를 하나로 병합한다. |
대량의 중복을 가진 세트의 기수(고유한 요소의 수)를 계산하는데 사용된다. 이는 공간 효율적으로 고유한 요소의 개수를 추정하는데 유용하다.
'NoSQL > Redis' 카테고리의 다른 글
Redis 트랜잭션 Isolation & Lock (0) | 2023.12.12 |
---|---|
Redis 확장 모듈 (0) | 2023.12.12 |
Redis 캐싱과 전략 (1) | 2023.12.11 |
Redis 데이터 입력/수정/삭제/조회 (0) | 2023.12.10 |
Redis 간단한 용어 설명 (1) | 2023.12.10 |