insertDeletion looks up recognize_fs_deletions by node_id alone, which no index covers — bulk removals scan the whole table per file
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 82/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- mariadb, php
- Lĩnh vực
- backend, databases, performance
Hướng nghiên cứu
Bắt đầu trong lib/Db/FsActionMapper.php với findByNodeId() và insertDeletion(), sau đó kiểm tra unique index hiện có từ lib/Migration/Version011000001Date20251215094821.php. Xác nhận việc tra cứu sử dụng phạm vi bao phủ sẵn có của storage_id và node_id, hoặc đánh giá phương án migration node_id. Hoàn tất khi các thao tác xóa hàng loạt tránh được việc quét toàn bộ index cho mỗi tệp; sử dụng EXPLAIN và kịch bản files:scan đã được báo cáo để xác minh query plan.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
FileListener::postDelete() calls FsActionMapper::insertDeletion() for every file under a removed node. insertDeletion() first runs findByNodeId(), i.e. SELECT … FROM oc_recognize_fs_deletions WHERE node_id = ?. The table's only secondary index is the unique (storage_id, node_id) (recognize_fs_del_uniq), which cannot serve a node_id-only predicate, so each call reads the whole index.
On Nextcloud 34.0.2 / Recognize 12.0.2, MariaDB 11.4, with ~512,000 queued rows, an occ files:scan that removed 131,004 files ran at 8–20 files/s and would have taken 1–3 h (EXPLAIN showed type: index, ~539,000 rows per lookup). After ALTER TABLE oc_recognize_fs_deletions ADD INDEX (node_id) the same scan took 5 m 39 s.
Suggested fix: look the row up by (storage_id, node_id), which insertDeletion() already has and the existing unique index covers — or add a node_id index in a migration. The code is the same at the installed tag v12.0.2 (lib/Db/FsActionMapper.php findByNodeId() / insertDeletion(), lib/Migration/Version011000001Date20251215094821.php) and still present on main at dc45cc1.
- Ngôn ngữ chính
- PHP
- Star
- 698
- Fork
- 68
- Merge trung bình
- 18 giờ 34 phút
- Pull request đã merge (30 ngày)
- 2
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của nextcloud/recognize
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
enhancement
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 65/100
-
Model download button in UIĐang mởenhancement
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
-
Recognize maintenance routine unnecessarily redownloads Tensorflow CPU and GPU models every timeCó thể làm lại được @marcelklehr đã nhận 190 ngày trước và không có pull request nào đang mở. Đang mởbug
nextcloud/recognize#1478 · 3 bình luận · 1 người được giao ·
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 38/100
Tất cả issue của nextcloud/recognize
Issue tương tự
-
extension/Commercial needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
crazy-goat/rabbit-stream#753 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
opensourcepos/opensourcepos#4743 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
OpenConext/OpenConext-engineblock#2129 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
grokability/snipe-it#19786 ·
Maintainer thường phản hồi trong vòng 1 ngày