@@ -278,16 +278,6 @@ https://\[host\]/oai?verb=「値」&「verbのパラメータ」=「値」&「 v
278278
279279 - > noMetadataFormats:指定したアイテムで利用可能なメタデータフォーマットではない場合。
280280
281-
282- - > ListRecordの応答速度の改善
283-
284- ListRecord の応答内容を事前にファイルへ出力することで、レスポンスを高速化する事が可能。
285- 高速化機能を利用する場合、以下のコンフィグ値を設定する必要がある。
286- 1.OAISERVER_FILE_BATCH_ENABLE : ファイルからレスポンスを作成する機能のON/OFFフラグ
287- 2.OAISERVER_FILE_BATCH_FORMATS : ファイル作成するフォーマット。
288- 3.CELERY_BEAT_SCHEDULE : ファイル作成をする実行間隔。
289- 4.OAISERVER_FILE_BATCH_STORAGE_LOACTION : ファイルを保存するストレージのロケーション。
290-
291281<!-- end list -->
292282
293283 - > 関連モジュール
@@ -296,6 +286,198 @@ https://\[host\]/oai?verb=「値」&「verbのパラメータ」=「値」&「 v
296286
297287 - > Invenio\_ oaiserver
298288
289+ ### OAI-PMH ListRecordの応答速度の改善
290+
291+ - > 概要
292+
293+ - 機能概要
294+
295+ ListRecord の応答内容を事前のバッチ処理でファイルへ出力することで、レスポンスを高速化する事が可能。
296+
297+ 
298+
299+ - 前提条件
300+
301+ - ファイルは最大2世代とし、3世代分のファイルは持たない事とする。
302+ - ハーベスト時にどのファイルを参照するかは、ファイル作成バッチがファイル書き込み終了時に設定する。
303+ - ハーベスト実行状況をファイル作成バッチ側は把握できない。
304+ - 作成したファイルの削除は2世代先のファイル作成直前にファイル作成バッチ処理にて実施する。
305+ ※本来はファイル作成バッチ実行中に動作しているハーベスト処理で、最も遅く終了したハーベスト処理の直後にファイルを削除する事が望ましい。
306+ - resumptionTokenの有効期限は、取得対象となるファイルが削除される時間を設定する。
307+ - ファイル保存先はWEKO3のファイル管理と連動出来るように対応する。
308+ - OAI-PMHの仕様として、ハーベスト時に返す情報は任意タイミングの断面でなければならない。
309+
310+
311+ - 運用に関する制約
312+
313+ - ハーベスターの処理時間を24時間と仮定し、ファイル作成バッチ起動間隔はそれより長く設定すること。
314+ - 複数インスタンスを運用する場合、ファイル保存先を同一にしない。
315+
316+
317+ - バッチ処理の実施タイミング
318+
319+ 本バッチ処理はceleryにより、コンフィグで指定された実行間隔で実施される。<br><br>
320+ 例 2月1日より1週間に1回(土曜日の0:00 ~ 実施)ファイル作成するケース
321+
322+ 
323+
324+
325+ - バッチ処理の異常終了時の対応
326+
327+ 本バッチは以下の場合にエラーで異常終了となる。
328+ | # | エラーコード | エラー発生条件 |
329+ |----|----|----|
330+ | 1 | ERR_IOS-001 | WEKOのファイル管理のLocationが特定できない場合 |
331+ | 2 | ERR_IOS-002 | ファイルの入出力エラーが発生した場合 |
332+ | 3 | - | 既存処理の部分に関するエラー処理については、既存処理に準拠します |
333+
334+ エラー発生時の対応について
335+ - エラー発生時にはエラーログを出力する。
336+
337+ 異常終了時のリランについて
338+
339+ - 手動でリラン出来る方法を用意し、必要に応じてリランを実施する。
340+ - 手動リランはFlaskのコマンドライン・インタフェースを利用する。コマンド実行される処理にて、Celeryタスクを即実行するように設定する。
341+
342+ ~~~
343+ # flask oaipmh_file_create create_file
344+ ~~~
345+
346+
347+ 1. : ファイルからレスポンスを作成する機能のON/OFFフラグ
348+ 2. : ファイル作成するフォーマット。
349+ 3. : ファイル作成をする実行間隔。
350+ 4. : ファイルを保存するストレージのロケーション。
351+
352+
353+ - > バッチ処理の入出力
354+
355+ - コンフィグ
356+
357+ 本バッチにより利用されるinstance.cfg値
358+ | # | 項目名 | エラー発生条件 |
359+ | ---| --------| ----|
360+ | 1 | OAISERVER_FILE_BATCH_ENABLE | ファイルからレスポンスを作成する機能のON/OFFフラグ |
361+ | 2 | OAISERVER_FILE_BATCH_FORMATS | ファイル作成するフォーマット |
362+ | 3 | CELERY_BEAT_SCHEDULE | ファイル作成をする実行間隔 |
363+ | 4 | OAISERVER_FILE_BATCH_STORAGE_LOACTION | ファイルを保存するストレージのロケーション |
364+
365+ CELERY_BEAT_SCHEDULE に追記する内容
366+
367+ ~~~
368+ #: Beat schedule
369+ CELERY_BEAT_SCHEDULE = {
370+ ・・・ 既存のタスク定義
371+ # OAI-PMH Data create
372+ 'oaiserver': {
373+ 'task': 'invenio_oaiserver.tasks.create_data',
374+ 'schedule': crontab(hour=2, minute=30, day_of_week='sunday'),
375+ 'args': [],
376+ },
377+ }
378+ ~~~
379+
380+ - データ構造
381+
382+ このバッチで保存されるファイル構造は下図の構造となる。
383+
384+ 
385+
386+ - data.json
387+
388+ 本バッチにより作成された情報が定義されているjsonファイル。<br><br>
389+ ファイルの内容例
390+
391+ ~~~
392+ {
393+ 'current_data': ''20250215000001849',
394+ 'datas': [
395+ {'id': '20250208000001256', 'create_time': '2025/02/08 00:00:01.256', 'expired_time': '2025/02/15 00:00:01.256'},
396+ {'id': '20250215000001849', 'create_time': '2025/02/15 00:00:01.849', 'expired_time': '2025/02/22 00:00:01.849'}
397+ ]
398+ }
399+ ~~~
400+
401+ 項目定義
402+ | # | 項目名 | 説明 |
403+ |---|--------|----|
404+ | 1 | current_data | オンラインで参照する最新のファイル情報群 |
405+ | 2 | datas | バッチ実行によって作成されたファイルの情報群<br>1回のバッチ実行で1つの情報が作成されれ、最大2つまでの情報しか作成されない |
406+ | 3 | id | バッチ実行によって作成されたファイル情報群の識別子<br>バッチ実行時間のタイムスタンプの値を利用する |
407+ | 4 | create_time | ファイル情報群が作成された時間<br>バッチ実行時間が設定される |
408+ | 5 | expired_time | ファイル情報群の有効期間<br>create_time にコンフィグ値「OAISERVER_FILE_BATCH_FILE_EXPIRY」の値を加えた時刻が設定される |
409+
410+ - index.json
411+
412+ 各アイテムごとの情報が定義されているjsonファイル。<br><br>
413+ ファイルの内容例
414+
415+ ~~~
416+ {
417+ 'items': [
418+ {
419+ 'identifier': 'oai:invenio:00000069',
420+ 'datestamp': '2024-04-02T09:58:48Z',
421+ 'setSpec': '1616224532673:169890635083',
422+ 'file_name': 'oai_invenio_00000069.xml'
423+ },
424+ {
425+ 'identifier': 'oai:invenio:00000070',
426+ 'datestamp': '2024-04-02T09:59:24Z',
427+ 'setSpec': '1616224532673:1698906350832',
428+ 'file_name': 'oai_invenio_00000070.xml'
429+ },
430+ ・・・・
431+ }
432+ ~~~
433+
434+ 項目定義
435+ | # | 項目名 | 説明 |
436+ |---|--------|----|
437+ | 1 | items | 各アイテムに関する情報<br>1アイテムにつき1つの情報が作成される |
438+ | 2 | identifier | アイテムの識別子<br>アイテムのheader情報から取得する |
439+ | 3 | datestamp | アイテムの更新時間<br>アイテムのheader情報から取得する |
440+ | 4 | setSpec | アイテムのset(絞込み条件)<br>アイテムのheader情報から取得する |
441+ | 5 | file_name | このアイテムの内容が保存されているファイル名<br>Identifierの区切り文字を_に変更した名前とする |
442+
443+ - 各アイテムのXML
444+
445+ 既存のOAI-PMH ListRecordsのレスポンス作成処理(invenio-oaiserver.response.listrecords)で取得したXMLをアイテムごとにファイルに保存する。
446+
447+
448+ - > 処理内容
449+
450+ - バッチ処理フロー
451+
452+ 
453+
454+
455+ - オンライン処理フロー
456+
457+ OAI-PMH の オンラインでListRecord を返す処理において、処理冒頭に以下の①②の内容を追加する。
458+
459+ 
460+
461+ - オンライン処理でのファイルの利用有無について
462+
463+ - ハーベスターからの要求が2回目以降の継続要求だった場合
464+
465+ 初回のレスポンスがファイルから作成された場合、ファイルを利用する。
466+ 初回のレスポンスがオンラインで作成された場合、ファイルは利用しない。
467+
468+ - ハーベスターからの要求が初回要求だった場合
469+
470+ 下表の条件に一致する場合、ファイルは利用しない。全ての条件に該当しない場合はファイルを利用する。
471+
472+ | # | 条件 |
473+ |---|--------|
474+ | 1 | コンフィグ「OAISERVER_FILE_BATCH_ENABLE」にFalseが設定されていて、ファイル利用が無効になっている場合 |
475+ | 2 | 関数 2.3.1.2を利用してファイル管理のLocation情報が取得出来ない場合 |
476+ | 3 | URLパラメータ「metadataPrefix」 で定義されているフォーマットが、コンフィグ「OAISERVER_FILE_BATCH_FORMATS」に定義されていない場合 |
477+ | 4 | data.json が存在しない場合 |
478+ | 5 | 入出力エラーが発生した場合 |
479+
480+
299481<!-- end list -->
300482
301483 - > 更新履歴
0 commit comments