1

Microsoft Velocity に関するランダムなクエリです。

シナリオ: データベースからすべての注文が必要だとします。SQL では、これで問題ありませんSELECT OrderId,TotalCost... from Orders。これは私のデータベースへの 1 回の往復であり、全員が満足しています。

現在、Memcached または (現在使用しているように) Microsoft Velocity (CTP3) を使用している場合、これを行う簡単な方法はありません。私が見る2つのオプションは(疑似コードで)

FOR EACH ORDER
     Order = cache.TryGet(OrderId)
     if Order is null
            Order = db.Get(OrderId)
END FOR EACH

これは往復の負荷になります。

また、顧客から注文を受けたいと考えています

SQL:Select OrderId....TotalCost from Orders where CustomerId = MyCustomerId

一往復、みんなでハッピーに。

キャッシュされたソリューションを使用すると、私が実際に目にする 2 つのソリューションがあります。

解決策 1:

DOES CustomerOrderIdsForCustomerId EXIST
     NO
           POPULATE CustomerOrderIdsForCustomerId FROM DATABASE
     YES
           FOR EACH OrderId IN CustomerOrdersForCustomerId
                  cache.TryGet(OrderId)
                  IF Order IS NULL
                        Order = db.Get(OrderId)
           END FOR EACH

解決策 2 は、すべての顧客注文のシリアル化されたリストを独自のキャッシュ オブジェクトに保持することです。往復を減らしますが、不自由なようです。

誰かがこの状況に光を当てることができますか?

4

2 に答える 2

1

キャッシュがあるからといって、すべてのクエリでそれを使用する必要があるわけではありません! この例では、すでに特定したように、実際には役に立ちません。この種のことについては、おそらくデータベースに直接アクセスするでしょう.
ただし、アプリケーションによって多少異なります。顧客が定期的に注文履歴を確認する場合や、注文を分析して人気のある製品を確認する機能がある場合は、キャッシュを使用して負荷を維持することをお勧めします。あなたのSQLサーバーから。その場合、注文の DataTable または Orders のコレクションのいずれかをキャッシュに保持し、LINQ でクエリを実行して顧客の注文を表示します。

于 2009-11-23T15:04:23.370 に答える
0

キャッシュは、データの永続的なストアであるとは想定されていないことに注意してください(あなたの場合は注文)。この場合、キャッシュは DB サーバーからの負荷の一部を取り除くのに役立ちますが、注文を取得する前にキャッシュに注文をロードする必要があります。そうは言っても、コレクションをループする必要がないように速度を使用している場合に考慮すべきいくつかのオプションがあります。ただし、キャッシュにないデータを処理する方法を常に考え出す必要があります。

オプション 1: リージョンを使用する

リージョンを作成し、1 回の呼び出しでそのリージョンからすべてのオブジェクトを取得できます。このシナリオでは、すべての注文を格納できるOrdersリージョンを作成し、 GetObjectsInRegionメソッドを使用してキャッシュ内のすべての注文を取得できます。ただし、これによりキャッシュ内のすべての注文が返されることに注意してください...データベースにあるすべての注文がある場合とない場合があります。

オプション 2: リージョンとタグを使用する

Velocity を使用すると、キャッシュ領域に配置したオブジェクトにタグを付けて、それらのタグを使用してそれらを取得できます。したがって、シナリオでは、注文オブジェクトに「注文」タグを付けてから、GetObjectsByTagメソッドを使用してそれらを取得できます。複数のタグを使用できるため、それらに顧客 ID タグを付けて、その方法で引き出すこともできます。

これら 2 つのオプションにはいくつかの注意事項があるため、必ずドキュメントを読んでください: Velocity Tag BasedMethods

于 2009-11-19T20:43:31.790 に答える