You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2026/10/16 19:52:50 UTC
(couchdb) 01/01: Speed up internal replicator
This is an automated email from the ASF dual-hosted git repository.
nickva pushed a commit to branch mem3-rep-open-docs-map
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit a40ef1cec498008ae6b6e9a4db5e249033560dd5
Author: Nick Vatamaniuc <va...@gmail.com>
AuthorDate: Fri Oct 16 15:43:05 2026 -0400
Speed up internal replicator
Remove quadratic lists:keyfind call from open_revs and get from O(n^2) to
O(n). (Well probably something with a log in there based on HAMT algorithm for
maps).
This should allow us to use large batches above 1000 docs easily.
---
src/mem3/src/mem3_rep.erl | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/mem3/src/mem3_rep.erl b/src/mem3/src/mem3_rep.erl
index 6413c72a4..55ac938cd 100644
--- a/src/mem3/src/mem3_rep.erl
+++ b/src/mem3/src/mem3_rep.erl
@@ -843,10 +843,10 @@ chunk_revs([{Id, R, A} | Revs], {Count, Chunk}, Chunks, Limit) ->
).
open_docs(Db, Infos, Missing) ->
+ InfoMap = #{Id => FDI || #full_doc_info{id = Id} = FDI <- Infos},
lists:flatmap(
fun({Id, Revs, _}) ->
- FDI = lists:keyfind(Id, #full_doc_info.id, Infos),
- #full_doc_info{rev_tree = RevTree} = FDI,
+ #full_doc_info{rev_tree = RevTree} = map_get(Id, InfoMap),
{FoundRevs, _} = couch_key_tree:get_key_leafs(RevTree, Revs),
lists:map(
fun({#leaf{deleted = IsDel, ptr = SummaryPtr}, FoundRevPath}) ->