0

私がこれを尋ねる理由は、最近設計されたアプリケーションであり、最初はセッション状態を使用せずに物事を単純にしたいと考えていましたが、最終的には状態を保存するためのセッション状態のアイデアの容易さに屈しました。Webファームソリューションに移行するには、SQLで実行するようにセッション状態を構成する必要があることを認識していました。しかし、シリアル化が必要であることを説明する情報に出くわしたことはありませんでした。したがって、これを実現するためにコードをリファクタリングする必要はありません。

さらに、linqtosqlを使用してデータオブジェクトを提供します。理想的には、これは簡単にシリアル化できますが、簡単ではないようです。

私はグーグルで検索しましたが、これは問題ないはずです。問題は、linqデータクラスをシリアル化する方法ではなく、次のことです。

特にWebファームでスケーラブルなアプリケーションを設計する場合、セッション状態は今後の方向に進んでいますか。他の方法を使用する必要があります。データアクセスにlinqを使用する場合、クエリ文字列などを使用する場合に推奨されます。

ありがとう

4

1 に答える 1

1

これを行うには(本当に)たくさんの方法があります

セッション状態の保存は、多くの Web ファーム/アプリの基本的な要件です。LINQ->SQL を使用してデータベースに格納するか、SAN でフラット ファイルを使用できます。ストレージ形式からネイティブ言語形式にシリアル化する方法があれば、(パフォーマンスの観点以外では) 本当に問題ではありません。

PHP では、Session ハンドラーはセッション テーブルに文字列としてマップされます。Python では、オブジェクトを文字列にマーシャリングし、それを格納することがあります

RDBMSは同時アクセス用に設計されているため、ロックなどを心配する必要がないため、あらゆる形式でアクセスできるSQLバックエンドをお勧めします。また、RDBMS と同様にスケーリングします。

SQL Alchemy のようなものを使用できます

Session = sqlalchemy.orm.sessionmaker() session = Session()

http://www.darrellhawley.com/2009/01/sql-alchemy-orm-b​​asics.htmlから

またはここ

http://idunno.org/articles/277.aspx

または、Microsoft の「HOW TO: Configure SQL Server to Store ASP.NET Session State」と呼ばれるこの HOWTO が役立つ場合があります。

http://support.microsoft.com/kb/317604

提供するもの

<sessionState 
    mode="SQLServer"
    sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
    cookieless="false" 
        timeout="20" 
/>

アプリのニーズを確認せずに、セッション状態が必要かどうかを判断することは不可能です。しかし、結局のところ、状態は状態であり、その状態へのアクセスの要件 (読み取り負荷が高い、書き込み負荷が高い、大きい、小さいなど) によって、それをどのように、どの形式で格納するかが決まります。

ハッシュマップのようなオブジェクトから SQL テーブルへの ORM マッピング、または次のようなハッシュマップのシリアル化のいずれかをお勧めします。

session = load_from_sql(session_id)
someval = session['var']

値を文字列またはネイティブ オブジェクトとして保持するかどうかは、選択した ORM や、言語からの容易さなどによって異なります。データベースのフットプリントだけでなく、パフォーマンスも要因の 1 つです。単純な変数の文字列を格納し、オンデマンドでアンマーシャリングする方が簡単な場合があります。JSON 型を保存してからネイティブに変換できます。

考慮すべきことがたくさん...

ORM->session_object であれ、ハッシュテーブルにマッピングされた一連のタプルであれ、SQL はおそらく最も単純です。

幸運を

于 2009-06-02T21:26:16.977 に答える