web-dev-qa-db-ja.com

Firestoreはオフライン永続化メカニズムとしてどの程度信頼できますか?

現在、さまざまなソースからデータを取得するプライマリバックエンドとしてFirebase Firestoreを使用しています。モバイルバックエンドにはAndroidの部屋も使用しています。電話機がデータを受信すると、ユーザーが数日から数週間にわたって再びオンラインにならない場合に、会議室データベースに保存されます。

デバイスファイルを調べた後、firestoreが/data/data/<your-app>/databasesディレクトリの下のファイルにデータを保存していることがわかります。

enter image description here

ファイルは次のようになります enter image description here

Firestoreでオフライン永続性のドキュメントを読みましたが、オフライン永続性の耐久性については何も示されていません。私の質問は、Firestoreのオフライン永続性の耐久性とは何ですか。長期間(日、週)同期されない可能性のあるデータを保存するために、本格的なローカルDBを使用する代わりに、これを使用することをお勧めしますか?

接続が再確立されると、データの同期はすでにうまく処理されているようです。ある時点の後、そのファイルがシステムによって削除され、ユーザーがすべてを失う可能性があることを心配しています。

17
martinomburajr

On Android(この記事の執筆時点)Firestoreは、持続メカニズムとしてSQLiteを使用しています。したがって、オフラインアクティビティが断続的に発生する場合、パフォーマンスや耐久性に問題はありません。

ただし、あなたが言ったように、数日または数週間オフラインになる場合は、次の点に注意する必要があります。

パフォーマンス

Cloud Firestoreは主にオンラインで使用するためのものであるため、サーバーにまだ同期されていない保留中の書き込みはキューに保持されます。オンラインに移行せずに多数の保留中の書き込みを実行すると、そのキューが大きくなり、全体的な読み取り/書き込みパフォーマンスが低下します。 Cloud Firestoreのパフォーマンス保証の大部分は、バックエンドでのインデックス作成とレプリケーションによるものですが、オフラインのみで操作している場合、それらの最適化のほとんどは存在しません。

競合

Firestoreの基本的な競合解決モデルは「最終書き込み優先」です。したがって、同じドキュメントに多くのオフラインクライアントが書き込みを行っている場合、最後にオンラインになったクライアントだけが実際に「勝ち」、その変更を保持します。

機能

Firestoreの機能のほとんどは、1つの大きな例外を除いてオフラインで動作します。トランザクションです。トランザクションは、オンラインのときにのみ実行できます。そのため、アプリでトランザクションを使用している場合、特別な処理を行わないとオフラインで適切に動作しません。

20
Sam Stern

オフラインの永続性は予測できないため、その永続性がどれほど永続的であるかについては、公式文書には示されていません。この質問には、4週間などの正確な答えはありません。オフライン中に実行される書き込み操作の数に依存するためです。

Cloud Firestoreをオフライン専用データベースとして使用するには、notをお勧めします。これは、切断された短時間から中期まで機能するオンラインのリアルタイムデータベースとして設計されています。

オフラインの間、すべての書き込み操作のキューを保持します。このキューが大きくなると、ローカル操作とアプリの起動が遅くなります。ただし、デバイスを再起動してもこれらの操作が持続することを知っておく必要があります。データを失うことはありません。

4
Alex Mamo