Side Project RMM - DB 선정

imtaejong·2020년 5월 26일
0

RMM

목록 보기
1/2

어떤 Database를 쓸까

어떤 기능을 구현 하는가

매 수십 초 (혹은 1분) 마다 지속적으로 업데이트가 일어나는 하나의 메세지 (유저가 업데이트 하는 컨텐츠 객체)이다. 이 기능이 핵심이다.
유저가 메세지를 업데이트 할 때 특정 기능을 활성화 할 경우 정보는 계속해서 시간마다 업데이트 된다. (이 기능이 활성화 된 메세지는 매 설정 된 시간마다 계속해서 정보가 UPDATE 되어야 한다.)
일정 시점이 되었을 때 정보에 대한 업데이트가 중단 되고 다른 사용자에게 보이지 않게 한다.(soft-delete)

어떤 어려움이 있는가

많은 양의 데이터가 (메세지 객체가) 지정 된 시간마다 일시에 업데이트 되어야 한다.
메세지의 갯수는 n개로 지역성을 가지고 있다.

하나의 인스턴스에서 UPDATE DML 행위로 인해 부하가 심하게 걸릴 것으로 예측된다. (기준은 하드하게, 50만개)
이에 아래와 같은 조건이 필요하다.

  • UPDATE Query 수행
  • 많은 처리량 - 처리량과 처리속도가 리니어하게 증가해선 안된다.
  • 하나의 DB가 모든 데이터를 전부 들고 있을 필요가 없다.

위와 같은 특징으로 봤을 때 RDBMS는 적용하기 어려운 점이 많다.
이유는 아래와 같다.

  • RDBMS는 ACTIVE-ACTIVE 구조와 같은 지역성을 가지기 어렵다. (Oracle, DB2와 같은 Enterprise 모델에만 존재하지만 나는 1인 개발인걸..) 보통 MASTER-SLAVE 구조를 가진다.
  • UPDATE Query 수행 시 (모두 그렇지는 않지만) 보통 INSERT & DELETE가 일어난다.
  • RDBMS는 ACID, CAP과 같은 원칙으로 인해 Bottle neck 에서 자유로울 수 없다.
  • MVCC와 같은 기능으로 최소화 시킬 수는 있으나 결국 Sharding, Clustering 까지 고려하게 될 것이다.
  • 아무리 훌륭하게 저장한다고 해도 결국 ACID를 만족하려는 노력때문에 RDB는 모든 데이터를 들고있을 수 밖에 없는 구조다.

결론 - RDBMS가 아닌 내가 구현하고자 하는 기능을 분석하고 색이 맞는 nosql 사용 할 것이다.

어떻게 구현 할 것인가

어떤 Platform에도 유연하게 대응 할 수 있게 MSA(Micro Service Architecture)로 구성한다.
메세지 객체를 핸들링하는 작업은 많은 기능이 필요 없고 업데이트만 일어나면 되기에 flask를 이용한 api 서버로 구성한다.
메세지 객체 이외의 처리를 하는 Backend 역시 인공지능도 적용해 볼 예정이다.
관련 연관성이 높은 python base의 WAS인 flask를 이용해서 구현한다.

마무리

_Don't Talker, Be a Maker

0개의 댓글