- 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
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|