sql >> データベース >  >> RDS >> SQLite

ローカルDBでFirebaseDBを使用する

    Firebaseの構造がそれほど複雑でない場合は、

    のようなメソッドを定義するインターフェースを作成することもできます。
    void addData(Data data);
    Data getData(long id);
    void editData(Data data, long id);
    void deleteData(long id);
    

    次に、そのインターフェースを実装する2つのクラスを作成します。1つはFirebaseを使用し、もう1つはSQLiteを使用します。

    DatabaseImplementation
    FirebaseImplementation
    

    Firebase実装内では、通常のようにデータを公開し、1つの新しいノードをroot/requestUpdate/userId/push/のようなものに公開します。 プッシュには、場所に関する情報が含まれます 更新をリクエストし、 deviceId 公開しました。

    次に、ValueEventListenerをその言及されたノードに関連付け、新しい子を取得した場合は、deviceIdが同じかどうかを確認します。そうでない場合は、 FirebaseImplementationを使用してください getData 取得した情報を使用してから、 DatabaseImplementationを使用します 、 addData

    これにより、変更が加えられるたびに、ログインしている他のクライアントがFirebaseを更新することを認識できるようになります。クライアントがオンラインでない場合は、次にオンラインになるときに、接続時にValueEventListenerがトリガーされるときにクライアントがそれを実行します。要求されたすべての更新をループして、すべてが行われたことを確認してください。また、完了した更新のプッシュキーをローカルデータベースに保存して、複数回更新しないようにします。

    基本的に、Firebaseは常に最新であり、すべてのクライアントがリッスンしている別のノードでユーザーが行った変更を保存します。

    明らかに、このソリューションには、requestUpdateノードをいつ削除するかを判断するなど、修正する必要のある多くの問題がまだあります。論理的にはすべてのユーザーが同期した後ですが、これをどのように判断しますか? ...

    最初のログインについては、 populateDatabaseFromFirebase()を作成する必要があります。 大量のgetDatasとaddDatasを実行するメソッド。それをどのように行うかは、DBの外観によって異なります。次に、ユーザーが SharedPreferencesですでにログインしていることを保存します。 およびFirebaseUID

    とはいえ、これはFirebaseがかなりフラットな場合にのみ機能します。複雑なデータベースがある場合は、すべてがはるかに複雑になり、絡み合っているため、外部ライブラリを調べる価値があるかもしれません。



    1. パターンに一致する値を含むオブジェクトのJSON配列を検索します

    2. MySQL8の構成

    3. SQLclでJSON形式のクエリ結果をプリティファイする方法(Oracle)

    4. MySQL、Postgres、Aurora用のサーバーレスGraphQLAPIを作成する方法