마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

파이어베이스로 사용자 그룹을 만드는것에 대해 방향성이 필요합니다

0 추천
일단 어플리케이션은 사용자들이 그룹을 이루어 같은 그룹끼리 같은 일정을 공유하는 형식으로 만들고 싶습니다

그룹 생성 -> 그룹장 혹은 작성 허가된 인원이 일정 작성 -> 그룹에 들어간 모든 인원이 그 일정을 볼 수 있음

현재 작업 상태로는 제이슨상으로 그룹 데이터도 생성되었고 유저 데이터들도 생성 되었으니

이제 유저가 자신이 가입된 그룹을 파이어베이스에서 받아와서 Recyclerview로 참여중인 그룹들을 시각화 시켜야 하는데

여기서 유저가 참여중인 그룹들을 어떻게 받아오면 좋을까요??

그룹 테이블 안에는 members 테이블이 있어 유저가 그룹 멤버로 참여할때 본인의 uid를 그룹에 넣어두게 되어있는데

검색할때 모든 그룹을 돌아다니면서 members 테이블애 유저의 uid가 있는지 검색하는건 너무 느리니

각 유저 테이블에 참여중인 그룹 테이블을 만들어서 그룹 id들만 넣어두고 그걸로 찾는게 맞을까요??

그렇게되면 유저 테이블에서 그룹 id 받아올때 한 번, 그룹 테이블에서 그룹 id로 찾을때 한 번 해서 총 두 번의 snapshot이 필요하게 되나요??

만약 아니라면 어떻게 하는게 좋을지 방향성 추천 부탁드립니다...
ㅇㅇㅇㅇㅇㅇㅇㅇ (1,000 포인트) 님이 2022년 4월 11일 질문

1개의 답변

+1 추천
 
채택된 답변

파이어베이스는 데이터베이스는 JSON Tree입니다. 따라서 권장하는 데이터구조가 Flat한 형태입니다. 즉, 최대한 Tree를 구성할 떼, 가지의 레벨이 적게끔 디자인하는게 핵심입니다. 님의 경우를 예를 들면,

User테이블을 아래처럼 nested(중첩?) 구조로 만들 수도 있고,

User
 - id
 - name
 - UserGroup
    - id
    - name
 - Event
    - date
    - name

 

다음과 같이 단계가 적은 flat한 구조로 만들 수도 있습니다.

UserGroup
  - id
  - name

User
 - id
 - name
 - groupId

Event
  - uid
  - date
  - name

 

사용하기에는 첫번째 구조가 편하지만, 성능상으로는 두번째 구조가 권장됩니다. 두번째의 경우는 앱에서 조인을 해주셔야할 일이 생길 것 같습니다.

파이어베이스의 관련문서를 보시고 어떻게 설계를 하는 것이 좋은지 공부를 하시기를 권장드려요. 유투브링크 참고하세요.

https://www.youtube.com/watch?v=rffbpMzLrZ0

spark (224,800 포인트) 님이 2022년 4월 11일 답변
ㅇㅇㅇㅇㅇㅇㅇㅇ님이 2022년 4월 11일 채택됨
파어베이스 문서도 참고하세요.
https://firebase.google.com/docs/firestore/solutions/aggregation
...