Initial commit: SRDB - High-performance LSM-Tree database
- Core engine with MemTable, SST, WAL - B+Tree indexing for SST files - Leveled compaction strategy - Multi-table database management - Schema validation and secondary indexes - Query builder with complex conditions - Web UI with HTMX for data visualization - Command-line tools for diagnostics
This commit is contained in:
58
examples/webui/commands/dump_manifest.go
Normal file
58
examples/webui/commands/dump_manifest.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package commands
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"code.tczkiot.com/srdb"
|
||||
)
|
||||
|
||||
// DumpManifest 导出 manifest 信息
|
||||
func DumpManifest(dbPath string) {
|
||||
db, err := srdb.Open(dbPath)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
table, err := db.GetTable("logs")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
engine := table.GetEngine()
|
||||
versionSet := engine.GetVersionSet()
|
||||
version := versionSet.GetCurrent()
|
||||
|
||||
// Check for duplicates in each level
|
||||
for level := 0; level < 7; level++ {
|
||||
files := version.GetLevel(level)
|
||||
if len(files) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
// Track file numbers
|
||||
fileMap := make(map[int64][]struct {
|
||||
minKey int64
|
||||
maxKey int64
|
||||
})
|
||||
|
||||
for _, f := range files {
|
||||
fileMap[f.FileNumber] = append(fileMap[f.FileNumber], struct {
|
||||
minKey int64
|
||||
maxKey int64
|
||||
}{f.MinKey, f.MaxKey})
|
||||
}
|
||||
|
||||
// Report duplicates
|
||||
fmt.Printf("Level %d: %d files\n", level, len(files))
|
||||
for fileNum, entries := range fileMap {
|
||||
if len(entries) > 1 {
|
||||
fmt.Printf(" [DUPLICATE] File #%d appears %d times:\n", fileNum, len(entries))
|
||||
for i, e := range entries {
|
||||
fmt.Printf(" Entry %d: min=%d max=%d\n", i+1, e.minKey, e.maxKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user