Closed Bug 703788 Opened 13 years ago Closed 13 years ago

Improve performance of diff_arrays() with large arrays

Categories

(Bugzilla :: Bugzilla-General, enhancement)

4.1.3
enhancement
Not set
normal

Tracking

()

RESOLVED FIXED
Bugzilla 4.2

People

(Reporter: LpSolit, Assigned: LpSolit)

References

Details

(Keywords: perf)

Attachments

(1 file)

Attached patch patch, v1Splinter Review
In order to fix bug 644281 and to detect changes between two buglists, which can both contain thousands of bug IDs, I need to rewrite diff_arrays() to make it work efficiently with large arrays. The difference is already noticeable with only a few items in both arrays: the improvement is 2-3x faster! With two arrays of 10,000 items each, the improvement is huge: 49 seconds (old) vs 0.03 second (new)!! And with 100,000 items, my rewrite makes diff_arrays() to complete in 0.35 second only (and probably several tens of minutes or hours with the old code)! I included a test in t/007util.t to validate my code.
Attachment #575588 - Flags: review?(mkanat)
Comment on attachment 575588 [details] [diff] [review] patch, v1 Review of attachment 575588 [details] [diff] [review]: ----------------------------------------------------------------- Awesome. Wow, what a remarkable speedup! I bet this was biting us in places we didn't even know. ::: t/007util.t @@ +83,5 @@ > +# Removed (in this order): gamma alpha gamma. > +# Added (in this order): delta > +my ($removed, $added) = diff_arrays(\@old_array, \@new_array); > +is(join(":", @$removed), 'gamma:alpha:gamma', 'diff_array(\@old, \@new) (check removal)'); > +is(join(":", @$added), 'delta', 'diff_array(\@old, \@new) (check addition)'); You can use is_deeply here instead of doing an is with a join.
Attachment #575588 - Flags: review?(mkanat) → review+
Flags: approval4.2+
Flags: approval+
I replaced is() by is_deeply(), as suggested. Committing to: bzr+ssh://lpsolit%40gmail.com@bzr.mozilla.org/bugzilla/trunk/ modified Bugzilla/Util.pm modified t/007util.t Committed revision 8006. Committing to: bzr+ssh://lpsolit%40gmail.com@bzr.mozilla.org/bugzilla/4.2/ modified Bugzilla/Util.pm modified t/007util.t Committed revision 7957.
Status: ASSIGNED → RESOLVED
Closed: 13 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: