2017-10-08 3 views
0

Firebase를 사용하여 iOS 익명 채팅 앱을 구현합니다.Firebase의 특정 데이터 세트를 관찰하십시오

내 앱에는 채팅방 목록이 있으며 방을 클릭하면 그룹 채팅에 가입하고 Facebook 메신저를 좋아합니다. 사용자가 객실에 가입하면 데이터베이스의 구조는 예를 AAABBB를 들어,

rooms 
    |- AAA 
    |- messages 
     |- "aaaaa" 
     |- "bbbbb" 
     |- "ccccc" 
    |- BBB 
    |- messages 
     |- "ddddd" 
     |- "eeeee" 
    |- CCC 
    |- messages 
     |- "fffff" 
     |- "ggggg" 
    ... 

것 같습니다. 앱은 로컬 저장소에 AAABBB을 저장합니다. 새 메시지가 AAA 또는 BBB에 추가되었지만 CCC은 관찰되지 않음을 어떻게 확인할 수 있습니까?

나는 Firebase의 문서를 읽었습니다. 나는 그것을 할 수있는 몇 가지 방법이있을 수 있습니다.

  1. 는 전체 rooms 노드를 관찰하고 응용 프로그램에 AAABBB를 필터링 할 수 있습니다. 하지만 rooms이 너무 많으면 성능 문제가 발생할 것으로 생각됩니다. 데이터 크기가 너무 큽니다.
  2. AAABBB에 대해 별도의 관찰자를 만듭니다. 그것은 내 문제를 해결할 수 있지만 내 사용자가 너무 많이 합치면 rooms. 많은 노드를 관찰하는 것은 의미가없는 것처럼 보입니다.
  3. rooms을 동기화 할 수있는 규칙을 설정하십시오. 하지만 사용자가 방에 들어가는 것을 기록해야합니다. 익명 사용자와 채팅의 관계를 관리해야합니다.

내 문제를 해결할 수있는 더 나은 성능을 가진 방법이 있습니까?

어쩌면

['AAA', 'BBB'].observe(.childAdded, { 
    // do something 
}) 

을 좋아하는 또는 어떤 제안을 환영합니다!

감사합니다.

답변

0

Firebase 데이터베이스 옵서버는 항상 전체 노드를 검색합니다. 쿼리의 능력 이상으로 부분 노드를 검색 할 수있는 방법은 없습니다. 하지만 쿼리에서는 OR을 수행 할 수 없으며 대화방이 범위 내에 있지 않을 수도 있으므로 쿼리를 사용할 수 없습니다.

사용자가있는 방이 오프라인 일 때 캐시되도록하려는 경우 각 방의 call keepSynced(true) 수 있습니다. 이것은 기본적으로 (디스크) 캐시가 최신 상태로 유지되도록하는 빈 리스너를 추가합니다.

sone에 여러 개의 대화방을 표시하려면 여러 명의 참관자 (각 방에 하나씩)를 사용해야합니다.

관련 문제