1

以下の要件を念頭に置いてプロジェクトを作成します。

  • データ読み取りの多いアプリケーション。
  • 一度に最大 100 人の同時ユーザー。アプリケーションのトラフィックが非常に多い
  • データは膨大ですが、変更されるのは 1 日に 1 回だけです

開発が容易で、交通量の多い環境で動作する可能性があるため、亜音速を使用することにしました。

SubSonic 3 で動作するようにまだ見つかっていない/解決されていないものはほとんどありませんが、

  • Active Records、Repository、Linq To SQL を使用するレイヤーのタイプ
  • ページング/ソート ストアド プロシージャの操作 (ページングとソートで 10000 行以上を表示する場合、組み込みのページング メカニズムよりも優れたパフォーマンスが得られるからです。そうですか??)
  • キャッシング、プロジェクトの要件では、キャッシングを多用する必要があることは明らかです。しかし、亜音速で動作する適切な解決策を見つけることができませんでした。そのために別のレイヤーを作成する必要がありますか。はいの場合、短い例が役立ちます。
4

3 に答える 3

3

subsonic 2.x ActiveRecord の CacheUtil クラスを作成しました。これは、誰かが古いサブソニック フォーラムに投稿したコードに基づいています。(これは、最後のフォーラムが削除される前に削除されたフォーラムからのものです。これが、ソフトウェア フォーラムが永続的であるべき理由です。) キャッシュの Find メソッドの例を次に示します。ss3に適応させることができます。また、insert、fetchall、delete、clear などもあります。当時、Rob Connery は、キャッシングには問題があり、意図的に ss2 から除外されたと述べました。HttpRuntime.Cache を使用して、Web アプリケーションとサービスの間で同時にキャッシュを共有します。これは小さなアプリケーションであり、常に単一のサーバー上にあるため、これを実行できると思います。

public static RecordBase<T> Find<T, ListType>(object primaryKeyValue)
    where T: RecordBase<T>, new()
    where ListType: AbstractList<T, ListType>, new()
{
    string key = typeof(T).ToString();
    if(HttpRuntime.Cache[key] == null)
        FetchAll<T, ListType>();
    if(HttpRuntime.Cache[key] != null)
    {
        ListType collection = (ListType)HttpRuntime.Cache[key];
        foreach(T item in collection)
        {
            if(item.GetPrimaryKeyValue().Equals(primaryKeyValue))
                return item;
        }
    }
    return null;
}
于 2009-07-11T04:54:12.563 に答える
1

ここでも同様に答えました.NET用のスレッドセーフキャッシュライブラリ. 基本的に、CollectionCacheManager が必要です。次に、タイプごとにレイヤーを追加し、この個々のキャッシュ コントローラーを介してすべてのリクエストを処理します。これにより、1 つの collectioncachecontroller が使用されます。外側のレイヤーでは、純粋なサブソニック、linq など、当時の条件に合うものをミックスします。SubSonic の利点は、邪魔にならないことです。ストアド プロシージャのパフォーマンスに関しては、CodingHorror にある Jeff Atwood の記事を参照して、節約を再評価します。ハードウェアは非常に安価ですが、メモリはそうではありませんが、データベースはそうではありません。個人的には、データベースを非常にシンプルかつ軽量に保ち、ウェブサーバーがすべてをメモリにキャッシュできるようにすることを好みます。データベースサーバーは、私が気に入っている方法であるほとんどの作業を行うことができます。負荷分散された Web サーバーをいくつか追加しても、これは、データベースのスループットの向上、クラスタリング、または DB のシャーディングとほぼ同じくらい大きなことです。SQL とストアド プロシージャは、作成と保守が非常に難しい場合もあります。それを行うために費やしたはずの予算を取り、代わりにハードウェアを強化してください...ハードウェアは非常に安価ですが、優れた開発者はそうではないことを忘れないでください。幸運を!

于 2011-01-31T23:01:57.880 に答える