优化优先线程
This commit is contained in:
+27
-10
@@ -690,22 +690,14 @@ func (d *DB) GetPriorityURLs() ([]PriorityEntry, error) {
|
||||
}
|
||||
|
||||
// AddPriorityURL 添加一条 priority 条目(key = URL,value = 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 {
|
||||
|
||||
Reference in New Issue
Block a user