0

計算を行うために 2 セットのユーザー入力を必要とするステートレス Web サーバーがあります。

ページ 1: GET INPUT A
ページ 2: GET INPUT B
ページ 3: ユーザー入力 A および B から計算された結果

私のアプリケーションのボトルネックは、ユーザー入力 A に関連するルックアップです。

高速化のハックとして、ユーザーが「ページ 2」で送信をクリックすると、「データ A」から検索結果が得られるように、ユーザーが B を入力するのを待っている間に、「ページ 3」が後で実行する A に対して SQL 要求を行います。既にキャッシュされています (せっかちなユーザーを 2 ~ 5 秒節約できます)。

私の質問

サーバーがクエリを実行し、何も返さずにキャッシュするような方法で SQL ルックアップを作成することは可能ですか?最終的なリクエストを 2 ~ 5 秒速くするためにキャッシュに入れるだけでよいからです。

4

2 に答える 2

2

PostgreSQL には結果キャッシュがないため、事前にウォームアップすることはできません。

ディスクキャッシュがありますSELECTそれを事前にウォームアップするには、結果を破棄するステートメントを実行するだけです。PL/PgSQLPERFORMステートメント、無意味な集計などを使用します。「postgresql pre-warm cache」を検索すると参考になる場合があります。

また、具体化されたビューを調べることもできます。PostgreSQL はまだ具体化されたビューをサポートしていませんが、トリガーとスクリプトを使用してそれらをシミュレートできます。マテリアライズド ビューのサポートを追加するパッチも進行中です。

于 2013-03-15T11:27:46.403 に答える
1

結果が大きくない場合は、サーバー側のセッションでユーザー状態を保存するのが最善です。


アップデート:

これは、データベースに保存されたセッションが適合するケース (複数の Web サーバーと単一の DB サーバー) の 1 つです。

結果を保存します。

insert into temp_result (session_id, a, b)
select %(session_id)s, a, b
from t

それを取得します。

select a, b
from t
where session_id = %(session_id)s

セッションが期限切れになったとき、またはタイムアウト後に削除します。

于 2013-03-15T11:31:29.413 に答える