5

私はここ数週間、asp.net Web API を使用して大きな成功を収めてきました。モバイル クライアントが http を介してプログラミングするためのインターフェイスを作成するのに本当に役立ちました。

助けが必要なところまで来ました。

データベースに接続でき、100K の結果を返すことができる新しいエンドポイントがあります。OData を使用してデータをフィルター処理し、ページ分割されたデータ セットを返します。

これは複数のリクエストで発生する可能性があるため、パフォーマンスに関心があります。毎回データベースから 100K レコードを返すのは理想的ではありません。だから私はいくつかのアイデアを持っています。

1 つ目は、100K の結果をキャッシュし、毎回 OData に魔法をかけてもらうことです。負荷分散環境として AppFabric 分散キャッシュを使用しています。ただし、このような量のデータを AppFabric にキャッシュすると、メモリが複雑になる可能性があるため、これを避けるのが最善だと思います。

次のオプションは、OData の魔法を忘れて、使用するフィルターをデータベースに送信し、毎回必要なデータのみを返すことです。つまり、毎回データベースにアクセスします。

この記事で概説されているバージョンのようなキャッシュ ハンドラーを使用して、http キャッシュにキャッシュすることを検討できます - > http://byterot.blogspot.ie/2012/06/aspnet-web-api-caching-handler.htmlこれは、データが別のシステムを介して更新された場合に、キャッシュされたデータが期限切れにならないことです。

このシナリオ、大量のデータ、web api と組み合わせて odata でフィルター処理する方法に関するその他のヒントはありますか?

4

4 に答える 4

2

これは、さまざまな回答が得られる可能性が高い質問です。そうは言っても、MSFT 以前の帽子をかぶって、2 セントあげさせてください。

アーキテクチャに関する多くの質問には、コンサルタントの「場合による」という回答が最も適しています。答えは、あなたの場合、具体的にいくつかのことに依存します。一部の開発者は、追加の考慮事項があるため、レイヤーのキャッシュに問題を抱えています。ACID 準拠のデータベースは、少なくとも非常に限られた量の結果整合性を確保するという多くの保険を購入します。

この決定を下すのが私である場合、いくつかのことを検討します。

  • 定期的に返される行数は?
  • それらは何度も同じ行ですか?
  • それはメモリ内でどのくらいの大きさですか?(100k は実際にはそれほど多くの行ではありません。100k 行を毎回ディスクにヒットさせたくないというのは正しいことですが、おそらくそれらすべてをメモリに保持することは問題ではありません。とにかく、SQL Server がおそらくこれを行うでしょう。)
  • 結果整合性に関して、私は何を処理しますか? 他のソフトウェアで処理したいですか?(キャッシュについて人々をしばしば怖がらせるのは、無効化と挿入が異なるアプリケーション/アプリケーション内の異なる場所から適切かつ一貫して行われるようにすることです。)

あなたがすでに提供した情報 (階層型アーキテクチャ、分散キャッシュを試す意欲) を考えると、キャッシング レイヤーを追求する必要があると思います。そこにはたくさんの良いキャッシュがあります。Microsoft で働く前は、AppFabric は問題なく機能していましたが、他のさまざまなキャッシュ レイヤーも扱ってきました。

于 2012-07-23T13:26:55.540 に答える
1

Entity Framework を使用すると仮定すると、EF の IQueryable を直接返すのが最適なオプションです。このようにして、OData の魔法がデータベースで直接機能します。$limit と $take は、SQL クエリに直接マップされます。

于 2012-07-22T17:16:29.827 に答える
0

最善の方法は、すでに使用している分散キャッシュを使用することです。ただし、使用しているキャッシュ プロバイダー、つまり AppFabric にはいくつかの制限があります。制限とは、機能の制限を意味します。十分に成熟した機能豊富なサード パーティの分散型キャッシュ プロバイダーである NCache をチェックしてください。

NCache と Appfabric の違いを理解したい場合は、以下の YouTube リンクを確認してください。これは参考までに....

http://www.youtube.com/watch?v=3CPi1QlskrU

于 2012-07-23T09:10:49.960 に答える
0

ブログhttp://byterot.blogspot.ie/2012/06/aspnet-web-api-caching-handler.htmlで指摘したキャッシュは、出力キャッシュとも呼ばれるHTTP キャッシュに適用されます。実際には、データ自体はサーバーにキャッシュされるのではなく、クライアントまたはミッドストリーム キャッシュ サーバーにキャッシュされるため、考えている内容には適していません。

于 2012-07-25T17:47:29.387 に答える