Firebase는 Collection과 Document가 있다.
Collection이 Document를 가질 수 있고,
Document도 Collection을 가질 수 있다.
Collection - Document - Collection - Document...
중첩구조 100depth까지는 Collection, Document 반복이 가능하다고 한다.
개인앱을 만들던 도중, 고민거리가 생겼다.
PushAlarm 보낼 User들을 DB에 저장하려고 하였는데,
세가지 방식중 어떤것을 선택해야 할지 판단 기준이 서지 않아 조사를 해봤다.
1번방식(필드에 저장)을 사용하게 되면
데이터 중복이 발생하지만 nosql의 장점을 최대한 활용 할 수 있다.
즉, 변화가 적고 하나의 큰 데이터를 빠르게 불러올 수 있다.
반면 rdbms는 각 도메인들이 서로 복잡하게 얽혀있고 업데이트가 자주 일어나면서 데이터 중복을 없에고 싶을때 효율적이다.
1번방식은 nosql의 데이터 중복을 허용하는 대신 빠른 read를 보장하는 장점을 최대한 활용한 방식이다.
2번방식(루트 컬렉션)을 사용하게 되면
하나의 PushAlarm에 딸린 User들을 더 적은 양의 쿼리로 검색할 수 있다. 왜냐하면, 해당 알림의 User만이 궁금하기 때문에 전체 User들을 조회할 필요가 없기 때문이다.
3번방식(루트 컬렉션)을 사용하게 되면
모든 알람들을 조회해야하는 상황에서는 굉장히 좋은 설계이다. 서비스의 모든 유저들이 Users루트 컬렉션에 모이기 때문이다.
만약 2번 방식으로 설계하였다면 서비스에 어떤 Alarm들이 있는지 조회한 다음 각 Alarm들의 하위 User컬렌션을 전부 조회해야 모든 User들을 가져 올 수 있을것이다.
해당 알람에 등록한 모든 User들을 호출해야 함으로 3번으로 진행하였다.
firestore 공부하고 있는 학생입니다
좋은글 감사합니다.
비슷한 내용의 글이 미디움에 있던데 혹시 동일인물이신가요??