Skip to content

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

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 実装が安定稼働してから着手する。急がない。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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