1

リモート データとローカル キャッシュを同時にクエリする良い方法を探しています。リモート データをクエリできるようにする必要がありますが、結果をローカルの変更とマージする必要があります。

したがって、項目「Bob」を追加すると、最初の 5 つの結果がアルファベット順に昇順で表示され、「Aaron、Adam、Alice、Ashley、Bud」ではなく、「Aaron、Adam、Alice、Ashley、Bob」が表示されます。 2 番目の 5 つの結果 (5 をスキップして 5 を取得) を照会すると、リストは「Bud」で始まります。これは削除も処理する必要があるため、アイテム 1 と 3 をローカルで削除し、最初の 50 個のアイテムを照会した場合、アイテム 2 と 4 から 52 までを取得したいと考えています。ローカル キャッシュの変更: したがって、"Sam" の名前を "Bob" に変更し、B で始まるすべての名前を照会すると、Bill とその仲間と共に Sam の新しい Bob レコードを取得する必要があります。

通常、最初のクエリですべての行をダウンロードするだけで、queryLocally が作業を処理できるようになりますが、10,000 レコード以上を処理しているため、問題があります。

どんな助けでも大歓迎です!

4

3 に答える 3

1

シナリオの1つの可能な解決策は、結果として期待されるよりも「もう少し」サーバーにクエリを実行することですが、最終的には常にローカルキャッシュをフィルタリングします。ローカル キャッシュを唯一のソースにして、そこからフィルター/取得/スキップします。

ここで、「もう少し」の意味を定義してみましょう。

"Sam" の名前を "Bob" に変更し、B で始まるすべての名前を照会すると、Bill とその仲間との Sam の新しい Bob レコードを取得する必要があります。

これは期待どおりに機能するはずです。サーバーから「B で始まる名前」以上のものを取得する必要はありません。

アイテム「ボブ」を追加し、最初の 5 つの結果をアルファベット順に昇順で取得すると、「アーロン、アダム、アリス、アシュリー、バッド」を受け取る代わりに、「アーロン、アダム、アリス、アシュリー、ボブ」を受け取り、 2 番目の 5 つの結果 (5 をスキップして 5 を取得) を照会すると、リストは「Bud」で始まります。

これを機能させるには、次のようにリモートで取得する必要があります:通常の方法でローカル キャッシュから取得してスキップし、ローカル キャッシュから取得します。 numberOfEntitiesChangedLocally + ( pageNr * recordsPerPage )

于 2012-12-06T11:17:06.683 に答える
0

\Samples\DocCode には、リモート クエリとローカル クエリを組み合わせた 3 つの例があります。おそらく彼らは助けてくれるでしょう。

ここにコメントが追加されました。完全なコードは queryTests.js にあります

1. * リモート クエリとローカル クエリを組み合わせてすべての顧客を取得する * 新規の保存されていない顧客を含む * v1 - FetchStrategy を使用する

2. * リモート クエリとローカル クエリを組み合わせて、すべての顧客を取得する * 新規の保存されていない顧客を含む * v1=FetchStrategy.FromLocalCache を使用する

3. * リモート クエリとローカル クエリを組み合わせてすべての顧客を取得する * 新規の保存されていない顧客を含む * v2=ExecuteLocally() を使用する

もうそれをしない方法の興味深い例は、あなたにも興味があるかもしれません (queryTests にもあります:

    /*********************************************************************
    * This portion of the "queryTests (by id)" module  
    * tests a hand-built async getById utility that was the way to do it 
    * before EntityManager.fetchEntityByKey
    * A curiosity now.
    ********************************************************************/

    // This hand-built async getById utility method returns a promise.
    // A successful promise returns the entity if found in cache 
    // or if found remotely.
    // Returns null if not found or if found in cache but is marked deleted.
    // Caller should check for query failure.
    // 'queryResult' reports if queried the remote service 
    // and holds a found entity even if it is marked for deletion.
    // 
    // This fnc has been replaced by EntityManager.getEntityByKey.
于 2012-12-06T00:36:33.397 に答える