親イシュー: #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 実装が安定稼働してから着手する。急がない。
親イシュー: #27 / #27「MasstreeWrapper をトップレベルの index/ ディレクトリに移動する」を分割したうちの 1 つ (旧ステップ5)。
目的
masstree と yakushima の 2 バックエンドが揃った段階で、インデックス層を C++20 concept で真に抽象化する。各 CC プロトコルが
<IndexConcept, PhantomStrategy>をテンプレートパラメータとして受け取れるようにし、将来の第3インデックス追加コストを下げる。依存
DefaultIndex<T>/index/index.hhが前提。現状 (2026-05-15)
index/masstree/wrapper.hhとindex/yakushima/wrapper.hhが同じ public API 面 (get_value/insert_value/remove_value/scan/thread_init/table_init/ 共通insert_info_t/node_type/ScanCallback) を提供しているはず。scan_callback.hhのon_resp_node/transaction.hhのnode_map_/transaction.ccのコミット時再検証) を使っている。d2pl / mvto / ss2pl は node-version phantom 回避を使っていない。node_version64は masstree の version と同型 — [index] 第2インデックス yakushima の統合(ビルド統合 + YakushimaWrapper 実装) #89 で確認済み)。やること
get/insert/remove/scanを要求する C++20 conceptIndexConceptを定義。PhantomStrategyを独立した concept として切り出す:<IndexConcept, PhantomStrategy>をテンプレートパラメータとして受け取る形にリファクタ。static_assert/ concept で API 契約をコンパイル時に強制 ([P1] TxExecutorコントラクトをC++20 conceptで明示する #31 の TxExecutor concept 化と同じ思想)。設計上の論点 (このイシューで決める)
-DCCBENCH_INDEXを維持しつつ、concept 化で per-protocol テンプレート化への道を開くのが現実的。PhantomStrategyを concept として本当に分離する価値があるか (現状 2 実装とも同じノードバージョン版なので、3 つ目の非ノードバージョン系インデックスが現れるまでは YAGNI の可能性もある — 着手時に再評価)。スコープ外
tpcc_silo/の旧ユニットテスト復活 (インデックス層と独立した論点、必要なら [P6] テストインフラを機能させる + 分離レベル正当性を椚認するテストを追加する #35 系で別途)。完了条件
IndexConcept/PhantomStrategyconcept が定義され、masstree / yakushima の両 wrapper がそれを満たす。優先度
高リスク・将来。masstree + yakushima の 2 実装が安定稼働してから着手する。急がない。