2012-09-14 3 views
1

Firebase를 사용하여 사용자 알림 시스템을 관리하는 방식을 유효하게 할 수 있습니까?알림 삭제를위한 접근 방식을 확인하십시오.

기본적으로 알림을 보관하는 일반 채널뿐만 아니라 사용자 관련 채널도 갖고 싶습니다. 이러한 알림은 사용자가 전에 보지 않은 인트라넷에 표시됩니다.

서버 측 동작이라는 생각은 특정 사용자 또는 모든 사용자에게 브로드 캐스트하는 REST API를 사용하여 Firebase 끝점을 업데이트합니다. 특정 사용자 메시지는 쉽게 읽을 수 있으므로 다시 표시하지 않을 수 있습니다. 일반 방송은 약간 어려움을 겪고 있습니다.

일반적인 브로드 캐스트에 읽기를 표시하는 플래그 (사용자 ID)를 추가 할 수 있지만 클라이언트가이 플래그의 존재에 대한 기록 방송 메시지를 확인해야하므로 성능에 대해 우려하고 있습니다. 사용자 ID를 추가하여 새 끝점을 더 빨리 만들 수 있습니다.
예 :/notification/general/- 메시지가 포함되어 있으면 클라이언트가 메시지를 표시하고이 끝점을 만들면/users/USERID/MessageID가 있는지 확인합니다.

내가 누락되었거나 최선의 접근 방법이 있습니까?

답변

1

메시지는 항상 순서대로 소비됩니까? 그렇다면 각 클라이언트가 각 공개 채널에서 읽은 마지막 메시지의 ID를 기억하게 할 수 있습니다. 그런 다음 큐에서 "startAt"를 사용하여 새 메시지로만 제한 할 수 있습니다.

순서대로 사용하지 않으면 읽은 데이터와 읽지 않은 데이터를 저장하는 방법이 필요합니다. 아마도 각 메시지를 모든 사용자의 개인 큐로 보냈을 수 있으며 각 사용자가 읽은 메시지를 제거하도록 할 수 있습니다.

+0

흥미 진진한 접근법 - 나는 또한 일괄 배치를 읽는 것만으로 이제는 일괄 처리를 읽고 읽기 메시지 목록과 비교해야한다는 것을 의미했습니다. – markbarton

+0

리플렉션에서 마지막으로 읽은 ID로 이동합니다.이 메시지는 모든 메시지 큐 이후에 있으며 큐에있는 위치를 나타내는 것이 좋습니다. 감사 – markbarton

1

이미 개별적인 사용자 메시지가 있기 때문에 단일 복사본을 저장하고 누가 그것을 읽었는지 파악하지 않고 모든 사람에게 개별적으로 브로드 캐스트를 전달 (전자 메일로 생각하는 것)하지 마십시오.

일괄 처리를 줄이려면 메시지 콘텐츠를 별도로 저장할 수 있으며 간단히 ID를 사용자의 대기열에 저장할 수 있습니다. 그런 다음 사용자가 볼 때 추가 복잡성없이 사용자별로 플래그를 지정합니다.

표준 firebase ID (약 20 자)로 방송을 포함하여 하루에 100 개의 메시지를받는 사용자 100,000 명이 1 년에 210,000,000 자로 나옵니다 (즉, 데이터베이스는 없으며 실제 실제보다 훨씬 적습니다 메시지 본문을 저장하는 대량). 만료되지 않고 삭제되지 않는다고 가정합니다.

+0

확실히 가장 쉽고 가장 논리적 인 접근이지만 REST API를 사용하면 각 메시지/사용자에 대해 단일 API 호출을 수행해야하지 않을까요? 스케일링 문제로 이어질 것입니다. – markbarton

관련 문제