コンテンツにスキップ
FDL
Esc
↑↓移動↵開く⌘Jプレビュー
このページの内容

HTTP で配信する

普通の HTTP サーバーや CDN からリポジトリを ATTACH してもらう方法と、ファイルの種類ごとのキャッシュ。

読み手はファイルを読むだけなので、リポジトリはどんな HTTP サーバーからでも配信できます。バケットの公開 URL でも、その前に置いた CDN でもかまいません。DuckDB は、カタログと Parquet ファイルを範囲リクエストで取得します。

読み手が取得するもの

  1. HEAD か、指定された ref
  2. HEAD が指していれば refs/heads/main
  3. versions/<ID>/version.json。保持期間を過ぎていないか、形式を開けるかを確かめる
  4. versions/<ID>/ducklake.duckdb。範囲リクエストで
  5. クエリに要る Parquet ファイル。範囲リクエストで
ATTACH 'ducklake:https://data.example.org/towns/versions/019a3c4e-…/ducklake.duckdb' AS towns (
  DATA_PATH 'https://data.example.org/towns/data/', OVERRIDE_DATA_PATH true, READ_ONLY
);

ヘッダー

パス Cache-Control Content-Type
HEAD、refs/** no-store text/plain; charset=utf-8
refs.json no-store application/json
versions/** public, max-age=31536000, immutable ファイルに合わせる
data/** public, max-age=31536000, immutable application/octet-stream
fdl.json 短い max-age application/json

バージョンのフォルダとデータファイルは一度書いたら変わらないので、CDN が許す限り長くキャッシュできます。変わるのは HEAD と ref だけです。ref をキャッシュすると、読み手は知らないうちに古いバージョンを読みます。expired.json はあとからバージョンのフォルダに増えることがあるので、保持期間を終わらせたホストは、そのとき versions/<ID>/ を CDN から消してください。

サーバーは範囲リクエストに応える必要があります(Accept-Ranges: bytes、206 Partial Content)。応えないと DuckDB はファイル全体を取得し、大きな Parquet ファイルでは遅くなります。

一覧

読み手は一覧を取りません。ref の名前が分かれば、あとは ID をたどって全部取得できます。名前が分からなければ refs.json を読みます。ディレクトリの一覧は使わないので、無効にしておいてください。

決まった URL で最新のカタログを出す

FDL を知らない読み手は、カタログの URL が 1 つであることを期待します。ホストは、HEAD が指すバージョンのカタログを <root>/ducklake.duckdb で出してもかまいません。その場合は、どのバージョンを返したか分かるように、レスポンスヘッダー FDL-Version にバージョン ID を付け、ref より長くキャッシュさせないでください。

これは読み手のための便宜で、リポジトリの一部ではありません。置き場には versions/ の外のカタログはありません。

CORS

ブラウザの DuckDB WASM から読むときは、読むページからの GET と HEAD を許可し、Content-Range、Content-Length、ETag、FDL-Version を公開してください。

このページは役に立ちましたか?