私の DB は、午後 1 時から午後 2 時の間にのみ新しいデータを取得します。ユーザーは何度も同じものを見たり、行ったり来たりします。キャッシングを使用してネットワークの負荷を減らしたいと考えています。私の応答タイプは次のとおりです。
source_type_collection_item
Executes a SQL Query returning one row of data into a ORDS Standard JSON representation.
Available when the HTTP method is GET.
Result Format: JSON
複数のネストされた CURSORS を持つ単一行の SYS_REFCURSOR 応答。
FUNCTION my_func RETURN SYS_REFCURSOR
AS
my_cursor SYS_REFCURSOR;
BEGIN
OPEN my_cursor FOR
SELECT value, CURSOR(SELECT value_2, CURSOR(SELECT ... FROM table)
...
サーバー時間に基づいて異なるキャッシュ制御を設定したい:
- 午前 9 時 30 分のリクエスト - キャッシュ 3.5 時間
- 午後 1 時 30 分にリクエスト - キャッシュ 0 分
- 午後 3 時 30 分にリクエスト - 21.5 時間キャッシュ
問題は、HTTP GET を返す ORDS エンドポイントに対してキャッシュを設定する方法がまったくわからないことです。無関係のPL/SQLサービスで正常に動作するものがあります
source_type_plsql :-
Executes an anonymous PL/SQL block and transforms any OUT or IN/OUT parameters into a JSON representation.
Available only when the HTTP method is DELETE, PUT, or POST.
Result Format: JSON
定義済みパラメータを使用:
ords.define_parameter(
p_module_name => l_module_name,
p_pattern => l_pattern,
p_method => l_method,
p_name => 'Cache-Control',
p_bind_variable_name => 'cache_control',
p_source_type => 'HEADER',
p_param_type => 'STRING',
p_access_method => 'OUT',
p_comments => '');
しかし、これは GET の場合には機能しません。理由は次のとおりです。
- HTTP GET は PL/SQL ではサポートされていません
- ORDS PL/SQL出力パラメータとしてのSYS_REFCURSORはサポートされていません
私が見つけた唯一のオプションは、ORDS ではなく、Tomcat での静的キャッシュ設定でした。
<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
<init-param>
<param-name>ExpiresByType application/json</param-name>
<param-value>access plus 30 minutes</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>/ords/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
しかし、それは多くの理由から望ましくありません:
- ORDS の下のすべてのサービスに適用されますが、他のほとんどのエンドポイントではキャッシングはお勧めできません。これ以上正確にフィルタリングすることはできませんでした.Tomcatの観点からは、ORDSはモノリスであり、1つのキャッシュ制御設定を取得しているようです.
- 固定値です。