データ・バージョンの維持

Endeca Serverでは、データの特定のバージョンをメモリー内に維持(固定)できます。バージョンの維持は、たとえば、フロントエンド・アプリケーション(Studioなど)から一貫性のあるページ結果を返す必要がある場合に役立ちます。また、Endeca Serverから大量のレコードをエクスポートする場合にも、特定のバージョンを維持すると便利です。

メモリー内にバージョンを維持する対話Webサービス・リクエストを発行すると、後続のリクエストで問合せ処理を実行するときにこのバージョンを指定できるようになります。次の文で、Endeca Serverの動作を説明します。
  • データ・バージョンを維持するリクエストを発行した場合、指定した期間にわたってデータ・バージョンがメモリー内に維持(固定)されます。
  • リクエストでは、オプションでタイムアウトの値を指定できます。タイムアウトとは、その期間が経過するとEndeca Serverによってバージョンが解放される期間を指します。タイムアウト期間は、このデータ・バージョンを使用した最後のリクエスト発行時からカウントされます。タイムアウトを指定しなかった場合は、EndecaServer.propertiesファイルのデフォルト・タイムアウトが使用されます。
  • リクエストで最小値よりも小さいまたは最大値よりも大きいタイムアウト値を指定した場合は、エラーが返されます。
  • 固定されたバージョンに対して繰り返しリクエストを発行すると、その都度、タイムアウトが更新されます。
  • 固定されたバージョンに対して問合せを発行しなくなると、タイムアウト期間が経過し、Endeca Serverによってそのバージョンが削除されます。
  • データ・バージョンを維持するために連続して複数のリクエストを発行する際、最小値と最大値の範囲内で前回と異なるタイムアウト値を指定した場合は、大きい方のタイムアウト値が使用されます。例として、すでに10分のタイムアウトを指定して固定したバージョンがあり、最大タイムアウト値が20分である場合について考えてみます。
    • 15分のタイムアウトを指定して新しいリクエストを発行した場合、この値は既存の10分のタイムアウトよりも大きいため、Endeca Serverによりタイムアウトがこの値まで延長されます。この際、EndecaServer.propertiesで新しい値が最大値の20分以下であることもチェックされます。
    • 7分のタイムアウトを指定して新しいリクエストを発行した場合、Endeca Serverにより既存のタイムアウトの残り期間がチェックされます。このとき、たとえば、既存の10分のタイムアウトが残り7分であれば、このタイムアウトはリセットされません。同様に、残り期間が8分であれば、8 > 7であるため現在のタイムアウトはリセットされません。一方、残り期間が5分であれば、タイムアウトは7分に延長されます。
  • バージョンは、Endeca Serverによってデータ・ドメイン内の特定のDgraphで固定されます。この動作を保証するため、Endeca Serverでは、データ・ドメインでセッション・アフィニティを使用している場合にのみ、データ・バージョンを固定できます。セッション・アフィニティにより、Dgraphが使用可能である場合にリクエストをデータ・ドメイン内の同じDgraphに確実にルーティングできるようになります。(デフォルト・データ・ドメイン・プロファイルを使用する場合、セッション・アフィニティはデフォルトで有効化されます。)セッション・アフィニティの構成の詳細は、『Oracle Endeca Server管理者ガイド』を参照してください。

データ・バージョンを固定する手順:

  1. データ・ドメイン・プロファイルでセッション・アフィニティを使用していることを確認します。次のコマンドを続けて発行します。
    endeca-cmd get-dd <data_domain_name>
    endeca-cmd get-dd-profile <data_domain_profile_name>

    get-ddコマンドは、プロファイルを含むデータ・ドメインの詳細を返します。get-dd-profileコマンドは、データ・ドメイン・プロファイルの特性を返します。

    プロファイル内の次の行は、データ・ドメインに対してセッション・アフィニティが指定されていることを示します。
    session-id-type: header
    session-id-key: X-Endeca-Session-ID
    この例では、セッション・アフィニティでheaderが使用されています(セッション・アフィニティでは他の方法も使用できます。『Oracle Endeca Serverクラスタ・ガイド』を参照してください)。
  2. 次の省略された例に示すように、Endeca Serverデプロイメントのホストとポートで、タイムアウトを指定する対話Webサービス・リクエストを発行します。
    ...
    <ns:Request>
     <!--Optional:-->
      <ns:PinDataVersion>optional_pin_timeout</ns:PinDataVersion>
    <ns:State>
      ....
    </ns:State>

    optional_pin_timeoutは任意の整数値(ミリ秒)で、$DOMAIN_HOME/config内のEndecaServer.propertiesファイルに指定されているタイムアウトの最小値と最大値の範囲内で指定できます。このファイルのデフォルトの最小タイムアウトは60000ミリ秒(1分)、最大タイムアウトは300000ミリ秒(5分)です。このファイルのデフォルト・タイムアウトは120000ミリ秒(2分)です。リクエストでタイムアウトを指定しなかった場合は、このファイルのデフォルトが使用されます。

成功した場合、Endeca Serverによって次のような空の対話Webサービス・レスポンスが返されます。
<cs:Results xmlns:cs="http://www.endeca.com/MDEX/conversation/3/0" 
            xmlns:mdex="http://www.endeca.com/MDEX/XQuery/2009/09">
    <cs:State/>
</cs:Results>
レスポンスのヘッダーには次のものが含まれます。
  • X-Endeca-Served-Data-Version — 固定されたバージョンです。
  • X-Endeca-Data-Version — 最新のデータ・バージョンです。
最新のデータ・バージョンは、固定されたデータ・バージョンと同じであるか異なります。次に示すヘッダーの例は、提供されたデータ・バージョン(固定されたもの)と最新のデータ・バージョンが同じである一般的なケースです。
X-Endeca-Served-Data-Version 61
X-Endeca-Data-Version 61

固定されたデータ・バージョンを取得したら、指定したタイムアウト期間内に発行する後続のリクエストでこのデータ・バージョンを使用できます。固定されたバージョンを使用するには、タイムアウト期間が経過する前に、DataVersionRequested要素を含めて後続のリクエストを発行します。