btree_handler.go 1.2 KB

12345678910111213141516171819202122232425262728293031
  1. package index
  2. import (
  3. "git.ycl.pub/yl32940/TsDB2/DB/core/index/btree"
  4. "git.ycl.pub/yl32940/TsDB2/DB/core/page"
  5. )
  6. // BTreeHandler — B+ 树二级索引 (IndexTypeBTree)
  7. // 叶子条目: [key(keyLen) + PKID(8B BE)]
  8. // IndexHandler 的 9 个方法与 InsertBatch 全部由嵌入的 sbtSecondary 基座提供
  9. // (与 ComposeChainHandler 共享同一份 SBT 委托实现)。
  10. type BTreeHandler struct{ sbtSecondary }
  11. func init() {
  12. Compose.RegisterHandler(page.IndexTypeBTree, &BTreeHandler{})
  13. // 向后兼容:旧数据库中 IndexTypeStr=3 的索引统一用 BTreeHandler 处理
  14. Compose.RegisterHandler(page.IndexTypeStr, &BTreeHandler{})
  15. // 二级 B+ 树分裂参数 —— 写死在本文件, 不随索引元数据传递。
  16. // 二级键分布随机且允许重复, 对半分(50)时平均填充率最高, 故保持 50/50。
  17. btree.SBTSplitCfg = btree.SplitConfig{SplitPercent: 50, SequentialRight: false}
  18. }
  19. // SearchAll 查找相同 key 下的所有 pkID
  20. func (h *BTreeHandler) SearchAll(handle page.HandleDb, entryPage uint32, indexKey []byte, keyLen int) ([]uint64, bool) {
  21. rootPID := entryPage
  22. if rootPID == 0 {
  23. return nil, false
  24. }
  25. return btree.SBTSearchAll(rootPID, indexKey[:keyLen], handle)
  26. }