Skip to content

[index] インデックス層の真の抽象化(C++20 concept IndexConcept / PhantomStrategy) #90

@thawk105

Description

@thawk105

親イシュー: #27 / #27「MasstreeWrapper をトップレベルの index/ ディレクトリに移動する」を分割したうちの 1 つ (旧ステップ5)。

目的

masstree と yakushima の 2 バックエンドが揃った段階で、インデックス層を C++20 concept で真に抽象化する。各 CC プロトコルが <IndexConcept, PhantomStrategy> をテンプレートパラメータとして受け取れるようにし、将来の第3インデックス追加コストを下げる。

依存

現状 (2026-05-15)

やること

  • get / insert / remove / scan を要求する C++20 concept IndexConcept を定義。
  • PhantomStrategy を独立した concept として切り出す:
    • masstree / yakushima 共通の「ノードバージョン版」phantom 回避戦略。
    • 将来の非ノードバージョン系インデックス向けに「レンジロック / 述語ロック版」の余地を残す。
  • 各プロトコルが <IndexConcept, PhantomStrategy> をテンプレートパラメータとして受け取る形にリファクタ。
  • static_assert / concept で API 契約をコンパイル時に強制 ([P1] TxExecutorコントラクトをC++20 conceptで明示する #31 の TxExecutor concept 化と同じ思想)。

設計上の論点 (このイシューで決める)

  • インデックス選択の粒度: per-protocol (テンプレートパラメータ) / per-binary (cmake オプション) / per-workload のどれにするか。当面は [index] index/ ディレクトリへの masstree_wrapper 移設とインデックスエイリアス層の導入 #88 で導入した per-binary -DCCBENCH_INDEX を維持しつつ、concept 化で per-protocol テンプレート化への道を開くのが現実的。
  • PhantomStrategy を concept として本当に分離する価値があるか (現状 2 実装とも同じノードバージョン版なので、3 つ目の非ノードバージョン系インデックスが現れるまでは YAGNI の可能性もある — 着手時に再評価)。

スコープ外

完了条件

  • IndexConcept / PhantomStrategy concept が定義され、masstree / yakushima の両 wrapper がそれを満たす。
  • プロトコルがテンプレートパラメータでインデックスを受け取れる。
  • 2 バックエンドで全プロトコルがビルド・動作する。

優先度

高リスク・将来。masstree + yakushima の 2 実装が安定稼働してから着手する。急がない。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions