use upsert instead of 2 queries per row #5342
Open
+24
−15
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
WHY
BEFORE - What was wrong? What was happening before this PR?
We were using
DB::
transactions to wrap the reordering updates on database.We did this because we were looping over all the tree elements and doing two database queries for each of the elements.
Wrapping the queries in a DB transaction does not make less queries, it just means that if any of the queries fail we are able to revert the whole process. So for ordering 10 items, we would still make 20 queries.
I switched to use a combination of
upsert
and validating the ids to do the WHOLE process in only two queries.If we do it all in one query, if the query fails it fails as a whole, and we don't need to wrap this in a transaction.
This would allow us to also fix some compatibility issue with MongoDB reported in #4909