Firebase RealtimeDatabase에 대량 데이터 투입 - 그 1 -

GYAO의 ts입니다.

경위



투고가 꽤 오랜만이 되어 버렸다. 팀이 바뀌거나 담당 제품이 바뀌거나 완전히 팀도 재작성 상태가 되어 버렸다. 개인적으로는 팀을 어느 정도 고정해 팀에 대해 일을 할당하는 편이 효율적이고 인크리멘탈인 팀을 만드는데 있어서 효과적인 생각이 든다. 평가도 팀에 대해 이루어지는 편이 좋다고 생각하지만, 그렇지 않은 현상이 있다. . . 노력하지 않으면.

이런 식으로 현재는 Firebase Realtime Database을 주축으로 하고, 모바일 애플리케이션의 백엔드를 쇄신하려고 하고 있다.

하고 싶은 일


  • 사용자에 대한 알림을 메시지로 저장한다.
  • 모든 사용자에 대한 알림, 개별 사용자에 대한 알림이 있습니다.
  • 메시지를 변경하거나 삭제할 수 있습니다
  • 개별 유저에 대한 알림은 1회로 500만 정도의 유저에 대해서.

  • 이것을 실현하기 위해 우여곡절(Firestore 시험하거나, dataflow-pubsub 시험하거나) 있었지만,
    현재, 이하의 구성으로 가기로 결정했다.

    데이터 구조



    /root/messages에 메시지 ID와 메시지 내용을 저장합니다.



    isEveryone이 true이면 전원 전용. (모바일 앱으로 제어)


    /root/users 안에 메세지 ID와 boolean(이미 읽고 읽지 않은)을 저장.





    전체 시스템




  • cloud storage 에 message 디렉토리, users 디렉토리를 작성.
  • 기존 시스템에서 json liner를 cloud storage에 업로드 받는다(1파일 1만행을 500파일)
  • CloudFunctions의 이벤트 트리거로 버킷을 모니터링합니다. 업로드 감지
  • cloud storage의 path가 messages이면 messages에, users이면 users에 upsert(병합)한다.

  • ※message는 유효기간(expireDate)을 unix timestamp로 가지고 있으므로, 모바일 앱으로 끊어진 메시지는 내지 않는 처리를 넣는다. DB상은 남아 버리므로, cleanExpiredMessage로 daily로 삭제. functions는 cron trigger가 제공되지 않습니다. 다른 서비스를 사용하십시오. 그래서 Azure의 LogicApps를 사용하여 https로 시작.

    다음 번



    DB 규칙 설정과 upsertJson을 작성합니다.

    좋은 웹페이지 즐겨찾기