-
[알림 서비스] 알림 서비스 데이터베이스 설계STOVE DEVCAMP 3기/알림 서비스 2023. 3. 10. 02:59
📌 선정 데이터베이스 및 이유
1) 선정 데이베이스 : MongoDB
2) 선정 이유
A. 알림 데이터가 문서 데이터베이스에 적합함
- 하나의 알림 객체에서 데이터를 부분적으로 사용하는 경우가 없다.
- 각 알림 데이터는 독립적으로, 중복되는 데이터가 없어 별도 정규화가 필요하지 않다.
- schema-less 구조로 유연한 스키마 대응이 가능하다.
- 알림 관련 스펙은 구조의 변경이 잦을 수 있음
B. TTL(time-to-live) 인덱스를 지원함
- 특정 일자 이후의 알림은 보이지 않게 한다면, 알림 데이터를 모두 쌓아둘 필요는 없음
C. DB 인프라 팀에서 지원함
참고
https://engineering.linecorp.com/ko/blog/LINE-integrated-notification-center-from-redis-to-mongodb
3) MongoDB 내부 구성
버전
- 5.0 (인프라팀에서 지원하는 MongoDB 데이터베이스 버전)
배포형태
- default인 standalone 사용함
- 하지만, 서비스 운영 시에는 적합하지 않아 레플리카 셋, 샤딩된 클러스터를 사용하는 것 권장함
- 참고
스토리지 엔진
- MongoDB 4.2 버전부터 MMAPv1 스토리지 엔진은 deprecated 됨
- default로 WiredTiger 스토리지 엔진을 사용함
📌 데이터 모델링
- 임베디드 방식을 사용해 sender, receiver, data, token 서브 도큐먼트를 임베디드시킴
notification
_id ObjectId document 고유 id type String 알림 유형 (ex. 리트윗, 팔로잉, 멘션 등) sender document 알림 송신자 - id
String 유저 고유 id - name
String 이름 - profile_pic_url
String 프로필 사진 url receiver document 알림 수신자 - id
String 유저 고유 id data - id
String 트윗 고유 id - content
String 트윗 내용 created_at Date document 생성 시간 device
_id ObjectId document 고유 id user_id String 유저 고유 id push_notification_opt Boolean 알림 설정 여부 (ON/OFF) token document 디바이스별 고유 token (FCM에서 발급) - value
String token 값 - timestamp
Date token 타임스탬프 (갱신 날짜) created_at Date document 생성 시간 updated_at Date document 업데이트 시간 참고
https://meetup.nhncloud.com/posts/276
https://www.blog-dreamus.com/post/flo-tech-mongodb-%EB%8F%84%EC%9E%85%EA%B8%B0
'STOVE DEVCAMP 3기 > 알림 서비스' 카테고리의 다른 글
[알림 서비스] 알림 서비스 구조 개선 - 알림 전송 외부 라이브러리 의존성 분리 리팩토링 (0) 2023.03.10 [알림 서비스] 알림 서비스 구조 개선 - 신뢰성 있는 알림 서비스 제공 (0) 2023.03.10 [개념] MongoDB 알고 사용하기 - 데이터 모델링 (0) 2023.03.10 [개념] MongoDB 알고 사용하기 (0) 2023.03.10 [알림 서비스] 전체 구성 설계 (0) 2023.03.10