perf(redis): sort key tree names without lower-casing on every comparison
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đá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
- 76/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Lĩnh vực
- backend, performance
Hướng nghiên cứu
Bắt đầu với RedisKeyTreeEngine.buildTree trong lib/features/redis/redis_key_tree_engine.dart và các bài kiểm tra hiện có của RedisKeyTreeEngine. Kiểm tra cách sắp xếp các lá gốc, tên thư mục và lá trong thư mục, sau đó thêm một bài kiểm tra có chữ hoa và chữ thường lẫn nhau, bao gồm các tên giống nhau khi không phân biệt chữ hoa chữ thường. Hoàn tất khi các bài kiểm tra chạy thành công, giữ nguyên cách xử lý khi bằng nhau hiện có và không có comparator nào trong tệp đó gọi toLowerCase().
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Problem
RedisKeyTreeEngine.buildTree (lib/features/redis/redis_key_tree_engine.dart) sorts root leaves, folder names and each folder's leaves with
..sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase()))
so toLowerCase() runs twice per comparison, i.e. O(n log n) string allocations for an O(n) amount of information. A single folder with tens of thousands of keys (the common case for session:* / cache:*) pays for it when the tree is built.
Measurements
Standalone Dart AOT, names like Cache_123456789_Key:
| Names | toLowerCase() per compare |
Decorated (lowercase once, sort pairs) |
|---|---|---|
| 5,000 | 3.2 ms | 1.5 ms |
| 50,000 | 47.5 ms | 24.7 ms |
About 2x. Not per-frame work, but it is a one-off pause of ~50 ms on a big keyspace that also happens on every refresh.
Solution
- Sort decorated pairs
(lower, node)(or precomputelowerNameon the node) so the lowercase string is created once per element. - Same ordering as today (case-insensitive compare of the label); keep the existing tie-break behaviour.
Acceptance
-
RedisKeyTreeEnginetests unchanged and green; add a case with mixed-case and equal-ignoring-case names to pin the order. - No
toLowerCase()inside a comparator in that file. - Optional: same pattern checked in other comparators (
grep -rn "toLowerCase().compareTo"inlib/).
- Ngôn ngữ chính
- Dart
- Star
- 23
- Fork
- 1
- Merge trung bình
- 32 phút
- Pull request đã merge (30 ngày)
- 537
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- 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 QueryaHub/Querya-Desktop
-
enhancement ui
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
QueryaHub/Querya-Desktop#1689 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
ui(dialogs): make destructive query and DML preview dialogs adaptive and prevent table name overflowĐang mởbug frontend
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
QueryaHub/Querya-Desktop#1642 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug error-handling settings
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 78/100
QueryaHub/Querya-Desktop#1637 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
QueryaHub/Querya-Desktop#1636 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement marketplace
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
QueryaHub/Querya-Desktop#1635 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của QueryaHub/Querya-Desktop
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
jhomlala/betterplayer#1609 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[FR] 缓存键放置在外面Đang mởenhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
bggRGjQaUbCoE/PiliPlus#3310 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
package:code_builder type-bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 90/100
Maintainer thường phản hồi trong vòng 1 ngày
-
type:feature
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[material_ui] CalendarDatePicker day numbers are cut off with large text scale on narrow screensĐang mở
Độ 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