본문 바로가기
Redis

[OSSCA Redis / 빅데이터 저장 및 분석을 위한 NoSQL & Redis] Part1

by 개복취 2023. 10. 24.

 

1. NoSQL?

2. NoSQL 선정방법

3. 키-밸류 DB : Redis / memcached


NoSQL?

기존의 관계형 DBMS 에서 사용하는 SQL 기능뿐만 아니라, SQL이 할 수 없는 영역의 기술도 제공하는 대체기술 또는 보완기술이다.

DBMS에서는 클라이언트/서버 플랫폼을 기반으로 한다면 NoSQL은 클라우드 컴퓨팅과 클라이언트/서버 플랫폼을 기반으로 한다.

 

기존의 관계형 DB와의 차별성은..

  1. 클라우드 컴퓨팅에 적합하다.
    • 비용 및 성능상의 문제를 해결하기 위한 클라우드 컴퓨팅을 많이 이용하는 추세이고, 이에 최적화된 새로운 저장 관리 기술은 NoSQL이 가장 적합하다.
    • 관계형 DBMS는 대부분이 상용 라이센스이기 때문에 구매 비용이 많이 발생함, 그러나 NoSQL은 대부분이 오픈소스이기에 비용 부분에서 이점이 있다.
  2. 유연한 데이터 모델이다.
    • 관계형 DB는 모델링, 정규화, 인덱스 구조를 생성함으로써 많은 시간과 비용이 발생하게 된다. 그러나, NoSQL은 컬렉션, 테이블, 노드의 비정형 구조만을 요구하기 때문에 관계형 DB보다 쉽고 간단하게 설계할 수 있다.
  3. 빅데이터 처리에 효과적이다.
    • 보편적으로 관계형 DB보다 최소 3배 이상 빠른 성능을 기대할 수 있다.

 

주요한 NoSQL 제품으로는 Cassandra, HBase, MongoDB, Neo4j 등이 있다. 이들은 동일한 데이터 저장구조를 가지지 않고 논리적, 물리적인 구조가 서로 다르다. 이는 설계/구축, 운영, 관리 방법도 서로 다르다는 것임을 의미한다.

 

CAP(Consistency, availability, Partition-Tolerance) 을 고려하여 4가지 데이터 구조 종류를 고려해 볼 수 있다.

  • Key-Value DB
  • Column-Family DB
  • Document DB
  • Graph DB

https://www.udemy.com/course/best-hadoop/

참고로 'CAP' 에 대해 잠시 설명하자면 NoSQL 프로덕트는 세가지 특성중 두가지만 취할 수 있다. (위의 그림 참조)

  • 일관성을 희생해 다른것과 교환할 수 있다. (소셜미디어 글이 몇초 늦게 올라간다고해서 문제없음)
  • 가용성은 데이터베이스가 항상 작동하여 신뢰할 수 있고, 많은 예비 데이터를 구축함을 의미함
  • 파티션 저항성 : 하둡에서는 절대 포기할 수 없음

→ 위 그림처럼, 카산드라 NoSQL 은 일관성보다는 가용성을 우선시한다. 기술적으로 조정 가능한 일관성이라고 한다. 쿼리의 일부로 일관성의 정도를 지정할 수 있다. (사용자의 선택)

 

 

데이터베이스 선정 방법

http://www.pitmongo.co.kr/bbs/board.php?bo_table=h_file&wr_id=23

초당 5만건 이상의 데이터가 발생하는가?

  • DBMS는 5~10만건 이상이 발생한다면 원할한 처리가 불가하기 때문에 NoSQL을 선택을 고려해야 한다.

트랜잭션 제어가 필요한가?

  • 관계형 DB에서는 COMMIT, ROLLBACK등의 명령어를 사용하여 사용자가 트랜잭션 제어를 할 수 있다.
  • Hadoop에서는 파일 시스템을 기반으로 하기에, 트랜색션 제어를 하지 않고 데이터를 공유하지 않는다.

무결성이 요구되는 데이터인가?

  • DBMS에서는 제약 조건을 통해 무결성 보장을 위한 데이터를 설계한다. 그러나, 매번 데이터를 저장할 때 무결성을 검증해야 하므로 성능 지연이 일어난다.
  • 굳이 무결성 체크가 필요하지 않는다면 K-V DB 또는 Column-Family DB를 사용하도록 하자.
    ex) Redis(K-V DB), Cassandra, HBase(Column-Family DB)

수평적 데이터 구조인가?

  • 관계형 DB의 테이블구조를 일반적으로 2차원 수평 데이터 구조라고 하는데, 이러한 수평적 데이터 세트로 저장을 해야한다면 Document DB를 사용한다.
    ex) MongoDB

계층형 데이터 구조인가?

  • 기본적으로, 도큐먼트 DB로 충분히 계층형 데이터 구조를 저장/관리 할 수 있다.
  • 그러나, 계층 Depth가 10~20 레벨 이상인 경우에 선택적으로 그래프 DB 사용을 권한다.
    ex) Neo4j

 

 

키-밸류 DB : Redis / Memcached

 

Redis DB는 인-메모리 기반의 데이터 저장 구조이다.

 

Redis는 순수 인-메모리 기반 데이터베이스이다. 1차적으로 모든 데이터는 메모리에 저장된다.

그리고, 사용자 명령어 또는 시스템 환경 설정방법들을 통해 필요에 따라 선택적으로 디스크에 존재하는 파일에 저장된다.

(* 파일 기반의 데이터 저장구조는 1차적으로 CRUD하는 모든 데이터는 메모리에 우선저장 후 2차적으로 디스크에 존재하는 파일에 저장되며 DBMS에 의해 할당되고 자동으로 관리된다.)

 

그리고 Redis는 DBMS에 의해 할당되거나 자동 관리되지 않고 필요에 따라 수동으로 관리된다.

사용자가 추가적인 관리를 해주지 않으면 모든 데이터는 메모리 상에만 존재하며, 예기치 못한 장애가 발생했을 때 모든 데이터는 유실된다.

 

이러한 데이터 유실에 대해 방지하는 다양한 기능이 있지만 완벽하게 보호하는건 어렵다. 따라서, Redis는 메인 DB로 사용되지 않는다.

 

 

키-밸류 데이터 구조는 하나의 Key와 데이터 값으로 구성된다.

 

관계형DB와 저장구조와 논리적 표현은 동일하지만 데이터를 표현하는 방법은 다르다.

구조 및 index 하는 방법이 많이 달라 DB의 데이터 구조를 그대로 매핑해서 사용할 수는 없고 임시로 데이터를 보관하는 용도로 사용한다.

 

 

가공처리가 요구되는 비즈니스 환경에 적합하다.

 

보조DB 형태로 사용되는 주된 이유는, 메인DB로 사용되는 제품들은 파일 기반의 저장 구조이기 때문에 디스크IO 문제로 발생하는 성능 지연 문제를 해소할 수 있다. 즉 데이터의 가공, 통계분석, 캐싱, 메시지 큐 등의 용도로 사용할 수 있다.

 

 

>> 정리하자면.. Redis를 사용하는 가장 큰 이유는디스크 접근보다 메모리 접근이 빨라서이다.(+ 다양한 자료구조 제공)

 

 

https://blog.bytebytego.com/p/a-crash-course-in-redis

L1, L2 cache 는 cpu cache (1~10ns 미만)의 퍼포먼스

Redis 가 접근하는 RAM 은 읽어오는데 100ns 미만의 퍼포먼스를 보여준다.