Skip to main content Link Menu Expand (external link) Document Search Copy Copied

created at 2023-04-30

저는 90% 이상의 쿼리를 차지하는 Read 전용 DB를 따로 떼서 검색성능을 높이고자합니다. Insert/Update 하는 메인 DB는 트랜젝션 로그 저장 레벨을 logical 로 설정해야만하고(모든 변경정보를 저장해야만함), 이를 Kafka 와 connector 를 통해 Read DB 로 변경사항을 전달하려고 합니다.

대충 플로우를 도식화 한다면 아래의 그림과 같을거에요.

img

이로 얻을 수 있는 이점이 정확이 무엇일까요?

쓰기와 읽기를 서로 다른 DB를 사용할 수 있으며 이로써 각 DB의 장점을 살릴 수 있습니다.

예를 들어 읽기 모델을 Redis를 Repository로 사용하면 key-value 형식의 모델로 저장해둔다면 빠른 읽기를 기대할 수 있습니다. 반대로 쓰기 Repository를 Cassandra나 Redis 를 사용한다면 대량의 쓰기에 대해서 빠른 쓰기를 기대할 수 있습니다.

저는 트랜젝션이 중요한 DB를 설계하기 위해서 Insert/Update DB는 RDB 를 사용했습니다. 그리고 Read DB을 Cassandra로 가져갈 거에요. 이유는 아래와 같습니다.

  1. Redis 가 읽기는 조금 더 빠르지만, Cassandra는 대용량 트랜젝션 처리에 적합합니다.

    Cassandra 는 메인 모토가 Write faster than Read 입니다. 또한 node 를 쉽게 늘리고 지역별 구성을 설정할 수 있기에, 대용량에 적합합니다.

  2. 그리고 어차피 JWT Refresh 때문에라도 Redis 를 사용하려고 했으나, 이참에 Cassandra에 익숙해 지는것도 좋을 것 같아서 선택하였습니다.

정정

Cassandra