Optimize node collection indexes
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 45/100
Hướng nghiên cứu
Bắt đầu với danh mục index production và truy vấn kích thước trong issue, sau đó kiểm tra Node.get_indexes() trong kernelci-core/api/models.py. Xác minh số lượng trường id trước khi xóa id_1, xóa hoặc ẩn các index được chỉ định, rồi kiểm tra lại $indexStats sau thời gian quan sát. Công việc được hoàn tất khi các index còn lại được code quản lý và việc giảm footprint theo kế hoạch đã được xác minh.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Background
The production node collection (35.6M docs) has 19 indexes totaling
~11.8 GB — 38% of all data on disk (storageSize 19 GB, indexSize
11.8 GB). Every node insert/update pays maintenance cost on all of them,
and they inflate physical backup size and restore time.
$indexStats from production (window: ~2 days since pod restart on
2026-07-06) shows roughly half of them unused.
Finding 1: no node indexes are managed by code
Node in kernelci-core does not implement get_indexes(), so
db.create_indexes() creates nothing for the node collection. All 18
non-_id indexes were created manually on the server with no record of
why. Whatever survives this cleanup should be added to
Node.get_indexes() (kernelci-core api/models.py) so the index set is
code-managed and reproducible.
Finding 2: redundant indexes — safe to drop now
data.kernel_revision.commit_1(12k ops) — fully covered by the
compound
data.kernel_revision.commit_1_data.kernel_revision.branch_1_data.kernel_revision.tree_1
(prefix rule). Drop the single, keep the compound.created_1_updated_-1(0 ops) —created_1is its prefix and is
in active use (likely the node purge job). Drop the compound, keep
created_1.id_1(0 ops) — the API mapsid↔_id; documents likely have
noidfield. Verify with
db.node.countDocuments({id: {$exists: true}})— if 0, drop.
Finding 3: zero-usage indexes — hide, observe, then drop
Zero ops in the sample window, but the window is too short to catch
weekly/monthly jobs. Hide them (planner stops using them, instantly
reversible with unhideIndex), observe 2–4 weeks, then drop what nobody
missed:
updated_1treeid_1(sparse)owner_1data.error_code_1result_1group_1data.kernel_revision.branch_1data.kernel_revision.tree_1
db.node.hideIndex("<name>")
Indexes confirmed in active use (keep)
_id_ (4.0M ops), parent_1 (2.3M), state_1 (712k), kind_1 (241k),
data.kernel_revision.commit_1_..._tree_1 compound,
processed_by_kcidb_bridge_1_updated_-1, name_1, created_1.
Expected impact
- Estimated 2–4 GB reduction in index footprint (more after observation
phase drops). - Reduced write amplification on every node insert/update.
- Smaller physical backups and faster restores.
Plan
- Capture per-index sizes:
db.node.aggregate([{$collStats: {storageStats: {}}}])→
indexSizes - Drop
data.kernel_revision.commit_1,created_1_updated_-1;
verify and dropid_1 - Hide the 8 zero-usage indexes, re-check
$indexStatsafter
2–4 weeks - Drop unused ones
- Add surviving indexes to
Node.get_indexes()in kernelci-core
Issue written with help of Codex AI assistant
- Ngôn ngữ chính
- Python
- Star
- 10
- Fork
- 21
- Merge trung bình
- 22 phút
- Pull request đã merge (30 ngày)
- 1
Chuẩn bị môi trường
- Có Dockerfile hoặc tệp Docker Compose
- Không có mẫu pull request
- Không 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 kernelci/kernelci-api
-
Components/Maestro/API/Local instance says GET /latest/ should return some JSON, but it doesn'tĐang mởdocumentation
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
kernelci/kernelci-api#632 · 1 bình luận ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
kernelci/kernelci-api#629 ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
kernelci/kernelci-api#608 ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
kernelci/kernelci-api#597 · 2 bình luận ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 48/100
kernelci/kernelci-api#582 ·
Tất cả issue của kernelci/kernelci-api
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
Maintainer thường phản hồi trong vòng 1 ngày
-
area:docs
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
RailtownAI/railtracks#1633 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
review-panel severity:low
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
kristovatlas/coin-accounting#152 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
documentation :blue_book:
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
PennyLaneAI/pennylane#10280 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
`pipx reinstall` prints a Python traceback when the reinstall failsCó thể đã có người làm @ParamTanna đã nhận hôm nay. Đang mởbug
Độ 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 1 ngày