Cloud Firestore의 실시간 업데이트로 초기 상태의 added 이벤트 발화로 인한 요금 청구 방지
소개
공식 문서에도 나타나지 않았고 구그가 좀처럼 나오지 않는 정보이기 때문에 누군가가 도움이되면 감사하겠습니다.
무엇을 해결하고 싶습니까?
ref. htps : // 푹 빠져라. 오, ぇ. 코 m / cs / 푹신 s 잡아 / 쿠 ry-data / ぃ s 텐
Cloud Firestore에서 실시간 업데이트를 받을 때 다음과 같이 아무것도 생각하지 않고 지금까지 모든 문서를 검색하면 저장된 모든 데이터에 대해
added
이벤트가 발화됩니다.// チャットアプリなどで messages コレクションのドキュメントスナップショットを取得する例
firebase
.firestore()
.collection("messages")
.orderBy("createdAt", "desc")
.onSnapshot(snapshot => {
snapshot.docChanges().forEach(change => {
if (change.type === "added") {
// 保存済みのデータ n 件分出力される
console.log("New message:", change.doc.data());
}
});
});
ref. htps : // 푹 빠져라. 오, ぇ. 코 m / 드 cs / 푹신 s 잡아 / 쿠에 ry-data / ぃ s 텐 # ぃ え w_
첫 번째 쿼리 스냅샷에는 쿼리와 일치하는 모든 기존 문서의 added 이벤트가 포함됩니다. 이는 쿼리의 초기 상태에 대한 쿼리 스냅샷이 최신 상태가 되도록 일련의 변경 사항을 얻었기 때문입니다.
이것의 무엇이 문제인가 하면,
added
이벤트 1회에 대해 1회의 독해로서 카운트되어 버리므로, 엄청 낭비적인 비용이 걸려 버립니다.ref. htps : // 푹 빠져라. 오, ぇ. 코 m / 드 cs / 후레 s
쿼리 결과를 수신하는 경우 결과 집합에 문서를 추가하거나 업데이트할 때마다 한 번의 읽기로 청구됩니다.
해결 방법
위의 채팅 앱의 예라면 스냅샷으로 이전 최신 메시지의 저장 시간보다 새로운 메시지만 가져오도록 하면 됩니다.
※ Firestore 의 Timestamp 형과 JavaScript 의 Date 형을 비교하기 위해서는
fromDate()
메소드를 사용해 형 변환해 줄 필요가 있습니다.// チャットアプリなどで messages コレクションのドキュメントスナップショットを取得する例
firebase
.firestore()
.collection("messages")
.orderBy("createdAt", "desc")
.where(
"createdAt",
">",
// 変数 lastCreatedAt には Date 型の値を渡してあげてください
// See. https://firebase.google.com/docs/reference/js/firebase.firestore.Timestamp.html#fromdate
firebase.firestore.Timestamp.fromDate(lastCreatedAt)
)
.onSnapshot(snapshot => {
snapshot.docChanges().forEach(change => {
if (change.type === "added") {
// 新しく追加されたデータのみ出力される
console.log("New message:", change.doc.data());
}
});
});
참고
Reference
이 문제에 관하여(Cloud Firestore의 실시간 업데이트로 초기 상태의 added 이벤트 발화로 인한 요금 청구 방지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/daido1976/items/393436147ec886b61882텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)