flutter / dartに次の擬似コードがあると想像してください。
Stream<List<T>> list() {
Query query = Firestore.instance.collection("items");
return query.snapshots().map((snapshot) {
return snapshot.documents.map((doc) {
return standardSerializers.deserializeWith(serializer, doc.data());
}).toList();
});
}
データベース内の「アイテム」のコレクション全体を聞いています。簡単にするために、合計10のドキュメントがあり、私は常に変更を聞いているとしましょう。
コードのどこかでこのストリームを聴いています。たとえば、このクエリが最初に呼び出されたときに、10個すべての「アイテム」を返すとします。これは10回の読み取りとしてカウントされます。これらのドキュメントの1つをfirestoreWebインターフェイス(または他の場所)で直接変更すると、リスナーが起動され、1つのドキュメントのみを変更したにもかかわらず、さらに10回の読み取りがカウントされるという印象を受けます。クラウドプロジェクトの[使用状況]タブを確認しましたが、この疑いがあります。
このクエリで1つのドキュメントのみが変更された場合でも、10のドキュメント読み取りがカウントされるのはこの場合ですか?
答えが「はい」の場合、次の質問は「list()を2回呼び出したいと想像してください。1つはorderBy「rating」、もう1つはorderBy「time」(ランダム属性)で、これらのドキュメントの1つが変更されます。 1回の更新で20回の読み取りを意味しますか?
何かが足りないか、消防署が自分の用途に適合していないか、アーキテクチャを変更する必要があるか、カウントを間違えました。
pubspec.yaml =>
firebase_database: ^4.0.0
firebase_auth: ^0.18.0+1
cloud_firestore: ^0.14.0+2
これは、本質的にはより一般的な「firestore」の質問であるため、iOSやAndroidなどのすべての環境におそらく当てはまりますが、flutterfireプラグインと関係がある場合に備えて、flutter / dartの例を使用しています。
前もって感謝します。
いいえ、ドキュメントに詳しく説明されています。
クエリの結果を聞くと[注:(またはコレクションまたはサブコレクション) ]、結果セット内のドキュメントが追加または更新されるたびに、読み取りに対して課金されます。また、ドキュメントが変更されたためにドキュメントが結果セットから削除された場合も、読み取りに対して課金されます。(対照的に、ドキュメントが削除された場合、読み取りの料金は請求されません。)
また、リスナーが30分を超えて切断された場合(たとえば、ユーザーがオフラインになった場合)、まったく新しいクエリを発行したかのように、読み取りに対して課金されます。[注:この例では、10回読み取ります。]
Q1の答えは「いいえ」です:-)
はい。クエリスナップショット全体を使用するのではなく、クエリスナップショット間でクエリ結果への実際の変更をキャッチする方法を説明しているドキュメントのこの部分を参照してください。Flutterの場合は、docChanges
プロパティを使用する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加