-1

私は、ユーザーがいくつかのフォームに記入し、その見返りに自動車保険の見積もりを出す、やや大きなRailsアプリを作成しています。見積もりエンジンはすべて外部DBであり、外部DBでもあります。

mysqlまたは同様のDBにセッションを長期間保存する必要はありません。

これらのセッションを保存するための最良の方法は何でしょうか。

CookieStoreは安全ではなく、制限が多すぎます(<4kb cookie)。

Memchachedは、キー=>値のペアのアイデアが気に入らない場合を除いて、可能性があります。可能な場合は、より連想配列が必要です。

DB関連のセッションストアは、これらのニーズに対して冗長です(?)

ある種のファイルストアシステムが行く方法かもしれませんか?

誰かがセッションを保存するための最良の方法についてアドバイスしてもらえますか?

4

2 に答える 2

1

Memcacheまたはデータベースストアが最適です。どちらの場合も、サイトの規模が拡大するにつれて、多くのサーバーがセッションデータを取得/設定できるようになります。

私は過去に両方を使用しましたが、知っておくべきことがいくつかあります。

1)どちらも任意のデータを保存できます

Railsセッションはハッシュのように扱われ、保存される値はそのハッシュのシリアル化されたバージョンです。Memcacheでは、キー=>値のペアはsession_id=>session_contentsです。データベースストアには、ID用とコンテンツ用の2つの列があります。

2)Memcacheは少し高速です

少しでもスピードが出ます。この目的のために、Memcacheはデータベースよりも高速になります。

3)Memcacheは、いっぱいになるとキーをドロップする傾向があります

Memcacheインスタンスがメモリ不足になり始めると、キーのドロップを開始します。それは最も古いものを最初に落とすことによってそれをします。セッションは積極的に使用されているため、リクエストごとにセッションデータをくすぐることで、これを軽減できます。それはそれらを山の頂上に保ちます。ただし、インスタンスが実際にいっぱいになると、セッションをフロアにドロップしてユーザーをログアウトし始める可能性があります。これは通常、スラッシュドット効果が発生した場合など、非常に急速に成長している状況でのみ問題になります。それ以外の場合は、Memcacheサーバーを監視し、ストレージが不足していないことを確認するのは簡単です。

4)データベーステーブルは期限切れのセッションで急速にいっぱいになりますMemcacheは自動的に古いものを削除します。ユーザーがログアウトせず、単にセッションを中止した場合は、データベースで手動でクリーンアップを実行する必要があります。通常、これは毎日のcronジョブで行うのが最適です。そうでない場合は、そのテーブルへのクエリを遅くする何億もの古いレコードになってしまいます。

どちらがあなたに最適ですか?知らない。それはあなたの状況とあなたが引き受けようとしているリスクの種類に依存します。memcacheでセッションのドロップの問題が発生したことはありませんが、それは実際にはmemcacheを使用している他の目的によって異なります。頻繁に使用する場合は、セッション専用の2番目のmemcacheインスタンスが最適な方法かもしれません。そうすれば、それらを落とすリスクはありません。

于 2012-06-25T16:33:27.577 に答える
1

これがデータベースで処理できなかった理由がわかりません。

データベースを使用して処理中のデータを保存し、Cron job営業時間外に古いレコードを削除することをお勧めします。

お金の取引や、データをACID方式で処理する必要があるその他の種類のデータベース トランザクションが関係している場合は、 PostgreSQLなどのデータベースを使用する必要があります。

そうではなく、単にデータをすばやく保存したい場合は、MongoDBのようなNoSQLソリューションを使用してみませんか?

また、警告として、ファイルシステムを使用してデータを保存することを決定した場合、データが 1 つのサーバーに保存されているにもかかわらず、要求が別のサーバーによって処理されるというスケーリングの問題が発生する可能性があります。

于 2012-06-25T16:10:41.917 に答える