优化优先线程

This commit is contained in:
2026-04-11 19:44:51 +08:00
parent e3a6d18a8c
commit e372ef2295
7 changed files with 210 additions and 106 deletions
+27 -10
View File
@@ -690,22 +690,14 @@ func (d *DB) GetPriorityURLs() ([]PriorityEntry, error) {
}
// AddPriorityURL 添加一条 priority 条目(key = URLvalue = PriorityEntry)。
// 若已存在(且未访问)则忽略
// 每次手动添加都会重新爬取,不做去重检查
func (d *DB) AddPriorityURL(entry PriorityEntry) error {
return d.db.Update(func(tx *bolt.Tx) error {
k := []byte(entry.URL)
existing := tx.Bucket(bucketPriority).Get(k)
if existing != nil {
var e PriorityEntry
if err := decompressUnmarshal(existing, &e); err == nil && !e.Visited {
return nil // 已存在且未访问,忽略
}
}
data, err := marshalCompress(entry)
if err != nil {
return err
}
return tx.Bucket(bucketPriority).Put(k, data)
return tx.Bucket(bucketPriority).Put([]byte(entry.URL), data)
})
}
@@ -716,6 +708,31 @@ func (d *DB) RemovePriorityURL(url string) error {
})
}
// MarkPriorityURLVisited 将指定 URL 的 priority 条目标记为已访问。
// 用于 priority 爬取完成后标记,避免 RemovePriorityURL 后同一 URL 被重复添加。
func (d *DB) MarkPriorityURLVisited(url string) error {
return d.db.Update(func(tx *bolt.Tx) error {
k := []byte(url)
v := tx.Bucket(bucketPriority).Get(k)
if v == nil {
return nil // 条目不存在,无需处理
}
var e PriorityEntry
if err := decompressUnmarshal(v, &e); err != nil {
return nil
}
if e.Visited {
return nil // 已是 visited 状态
}
e.Visited = true
data, err := marshalCompress(e)
if err != nil {
return err
}
return tx.Bucket(bucketPriority).Put(k, data)
})
}
// ClearVisitedPriorityURLs 批量删除所有已标记为 visited 的条目(crawler 爬完后调用)。
func (d *DB) ClearVisitedPriorityURLs() error {
return d.db.Update(func(tx *bolt.Tx) error {