Skip to content

Latest commit

 

History

History
88 lines (57 loc) · 7.38 KB

README.ja.md

File metadata and controls

88 lines (57 loc) · 7.38 KB

Data Format Lab

データ形式やデータベースの性能主張を、共通契約と形式固有ワークロードで検証する公開研究ラボです。単一の「最強形式」は決めません。

English | 形式選定ガイド | 研究ログ | データ利用上の注意

最初のケーススタディは、2026-07-03に固定した公開GitHub Starsメタデータ2,331件・13列です。特定のStarsデータ専用ツールではなく、今後ほかのデータセットや主張を追加できる構成です。

equivalence拡張では、UCI Online Retail II、UCI Bank Marketing、NYC 311、OWID Energy、GeoNames cities500の小さな契約fixtureも扱います。これらは順位対象外です。manifestには公式取得URL、観測したsource hash、schema・NULL規則、正規化判断を記録し、更新され得る完全snapshotはGitではなくRelease assetとして保持します。

ベンチマークlane

lane 検証する問い 例
fair 同じ型付きArrowテーブルを保存し、同じ行を返すときの容量と速度 CSV、JSONL、Arrow IPC、Parquet、Lance、Vortex、適応TsFile
claims 公式が主張する強みを、適したワークロードで再現できるか Lance FTS、Vortex scan、適応TsFile時系列、実験FastLanes証拠
prompt 同じ7つの投影フィールドをLLMへ渡すときの正確なtoken数 Compact TSV、object JSONL、array JSONL
equivalence 一般には同等に見える形式が、このデータとworkloadでも同等か CSV対TSV、Arrow IPC対Feather、Parquet対ORC、JSONL対row serializer
engine_container SQL engineが固有のdatabase fileを操作するときにどう異なるか SQLite、DuckDB

異なるlaneや異なる機種の結果は順位比較しません。同一laneのFULL_COMPARABLEだけが順位対象です。DuckDBはファイル形式ではなくSQL実行エンジンとして扱います。

equivalence laneは登録済みのpairだけを比較します。事前登録したprimary endpointはstorage/native_bytesです。その区間が±2%以内ならPRACTICALLY_EQUIVALENT、境界の完全な外側ならMEANINGFUL_DIFFERENCE、境界をまたぐ場合はINCONCLUSIVEです。p50とp95の比区間では±5%と±10%を記録しますが、これらは説明用のsecondary evidenceでありprimary verdictを変更しません。primary evidenceが欠落または失敗している場合はNOT_APPLICABLEとし、INCONCLUSIVEとNOT_APPLICABLEは順位対象にしません。外部zstd bytes、IQR、最大RSSも説明用です。この判定は、すべてのdatasetやworkloadで同等だという主張ではありません。

Arrow IPCのcodec variant(none、lz4、zstd)は同じArrow schema、往復検証、検索結果契約を使うfair lane内の比較です。別形式やlane横断のscoreとしては扱いません。

Parquetのcodec variant(snappy、gzip、zstd、既存の高圧縮設定zstd-19)も同じfair laneの規則で比較し、canonical tableの契約を維持します。

証拠の流れ

DISCOVERED -> ENCODED -> ROUNDTRIP_VERIFIED -> BENCHMARKED -> REPORTED

非対応はUNSUPPORTED、実行失敗はFAILEDとして公開記録に残します。13列の型・NULL・値・件数・canonical hashが一致しない形式は速度や容量の順位から除外します。

比較可能性は次の4種類です。

  • FULL_COMPARABLE: そのlane内で公平に比較可能。
  • ADAPTED: スキーマやワークロードの適応が必要。
  • PARTIAL: 契約の一部だけ検証可能。
  • UNAVAILABLE: 再現可能なreader/writerを確認できない。

実行

NixはPython 3.12、rust-src付きnightly-2026-07-15、cargo-fuzz、C/C++ネイティブツールを固定します。Python環境はuv.lockで固定します。

nix develop
uv sync --frozen
uv run --frozen format-bench run --profile prompt --dataset github-stars-2026-07-03 --fixture
uv run --frozen format-bench run --profile equivalence --dataset github-stars-2026-07-03 --fixture --pair csv-tsv

--fixtureは順位対象外のsmoke testです。公開Releaseの全データを使う場合は次の順です。

uv run --frozen format-bench dataset fetch github-stars-2026-07-03
uv run --frozen format-bench prepare --dataset github-stars-2026-07-03 --run-dir runs/fair-local
uv run --frozen format-bench verify --run-dir runs/fair-local
uv run --frozen format-bench run --profile fair --dataset github-stars-2026-07-03 --run-dir runs/fair-local
uv run --frozen format-bench report --run-dir runs/fair-local

native robustness suiteは固定したArrow、Vortex、FastLanesのtargetを記録します。Arrowは記録したsource commitのcheckoutとnative/arrow/buildのbinary、VortexとFastLanesは記録したsource commitとHEADが一致するcheckoutのharnessを使います。FastLanesはcoverage-guidedではなくproject-seededとして扱います。公式native targetを確認できないLance、object JSONL、TsFileもUNSUPPORTED証拠として残します。未ビルドbinaryやsource不一致は成功扱いにしません。--targetは複数指定でき、--duration-secondsと--artifact-budget-mibで実行上限を指定します。

robustness reportには、targetごとのケース数、PASS/FAIL、crash、timeout、未完了理由、duration p50、artifact/source identityも集約します。これは信頼性の証拠であり、laneをまたぐscoreではありません。

uv run --frozen format-bench run --profile robustness --suite native --dataset github-stars-2026-07-03 \
  --target vortex-file-io --target vortex-compress-roundtrip --duration-seconds 900

手動のNative robustness Linux x86_64 workflowは、利用可能なnative targetをmatrixの1 job 1 targetで実行し、保持証拠を1 GiBに制限して14日間uploadします。LinuxとmacOSのartifact名は分離され、native crashやharness failureでも先にraw evidenceを保存してからjobを失敗扱いにします。

dispatchコマンドと証拠確認の手順はdocs/native-robustness.mdに記録しています。

測定値そのものはCIの合否に使いません。公開測定はmacOS ARMとLinux x86_64を別runにし、入力hash、commit、flake lock、依存版、seed、writer設定、失敗理由とともに保存します。

結果はまずv0.1.0実測総括を参照し、詳細値は機種別レポートとRelease assetで確認してください。

データはApple系リポジトリに偏り、分類は正解ラベルではありません。過去snapshotの生API応答と分類生成コードが残っていない制約もData Cardに明記しています。

参加方法

新しい形式や主張は、一次資料、検証するclaim、適合ワークロード、期待結果、比較可能性をIssueに記載してください。round-tripと検索結果を検証できない速度値は採用しません。作業規則はAGENTS.md、詳しい背景は英語版README.mdを参照してください。

コードと独自文書はApache-2.0です。GitHub上の第三者メタデータに新しいライセンスは主張しません。