작성
·
585
1
안녕하세요.
강의 잘 들었습니다.
마지막에 메시지를 저장 하는 얘기를 하셨는데..
보통 메신저 서비스에서는 어떤 방식의 DB를 사용하는지
궁금합니다.
흔히 Oracle이나 MariaDB 같은 방식의 관계형 DB를 사용하는게 흔한지 아니면 Mongo같은 비관계형 방식의 DB를 많이 사용하는지 혹시 답변이 가능하시다면 답변 부탁 드립니다.
그리고 그걸 선택한 이유가 무엇인지.
감사합니다.
답변 2
1
사실 DB를 선택하는 부분에 대해서는 큰 정답은 없습니다.
일반적으로 유저들이 직접적으로 전송을 하여 데이터를 생성하는 경우와 같이 이런 서비스 측면에서는 보통 RDB를 사용합니다.
대표적으로 MySQL이 있죠
이러한 이유는 굳이 관계를 설정하지 않는다고 해도, 데이터 관리나 서비스 내에서 추가적인 기능에 대해서 데이터를 불러오는 것이 더 쉽기 때문입니다.
MongoDB같은 NoSQL같은 경우에는 쿼리상에서 사용해야 하는 부분이나, 이렇게 지속적으로 무한히 증가하는 데이터에 대해서 관리를 하기가 어려워요
- 관리를 하기가 어렵다는 부분이 다른 컬렉션에서 이런 채팅 데이터를 참조하는 경우를 말을 합니다.
- 일반적으로 MongoDB에서는 Lookup, MySQL에서는 Join을 의미합니다.
MongoDB측에서는 다른 컬렉션에 대해서 참조를 하는 쿼리가 굉장히 리소스를 많이 잡아먹고 느린 쿼리로써 동작이 됩니다.
그래서 만약 제가 구현을 한다면 RDB를 사용 할 꺼 같습니다.
하지만 이는 개발자마다 생각이 다른 부분이라서 정답은 없을 꺼 같아요.
- PostgreSQL 같은 DB도 있으니 알아보시면 좋을꺼 같습니다.
추가로 비용적인 측면도 고려를 해야 하는 부분도 있겠죠,
PostgreSQL > mongoDB > mysql
순서로 비용이 비싸며, 이는 메모리로 동작을 하냐, 추가적으로 고가용성을 보장하냐 등으로 차이가 나게 됩니다.
0
시간이 많이 지난 질문이지만 저도 알아보았는데요.
세계적으로 유명한 플랫폼(디스코드, 페이스북) 등은 Cassandra나 HBase라는 솔루션을 사용하는것 같습니다.
아무래도 관계형 데이터베이스는 수백억건 이상의 데이터가 쌓이는 시점에는 인덱스가 있다고 하더라도 속도에 제약이 걸릴 수 있는 것 같아요.
다만 그정도 플랫폼이 되는 시점엔 이미 다른 아키텍처로 갈아 탔을거라고 생각하고요. 저자분 말씀대로 사업 초기(사이드 프로젝트이거나)에는 단순히 사용하기 편한 관계형 데이터베이스로 시작해도 될것 같습니다.
써보진 않았지만 엘라스틱서치같은 엔진을 써보는것도 괜찮지 않을까..? 생각이 드네요.
맞습니다. 기본적으로 채팅 히스토리에 대한 부분은 단일 테이블에 대한 조회성 트래픽이 많이 있는 경우가 대다수이기 떄문에 칸사드라 같은 NoSQL 기반의 DB가 많이 사용이 됩니다.
ELS는 추천하지는 않을꺼 같아요. 해당 툴은 탐색에 집중이 되어 있기 떄문에, 굳이 역 인덱스형으로 관리 할 필요가 없고, 트래픽 유형에 맞는 데이터 베이스도 아닌거 같다라는 생각이 듭니다.
음 트래픽 유형에 따라서 Server와 아키텍처를 설계하는 폴리글랏 퍼시스턴스라는 전략도 있는데, 관심이 있으시다면 한번 알아보시는 것도 어떨까 싶네요!
답변 감사합니다...