nickva opened a new pull request, #6050:
URL: https://github.com/apache/couchdb/pull/6050

   Add a sort key libicu NIF function. A sort key is an opaque binary 
representation generated by libicu from a key, which then can then be compared 
directly against other sort keys to produce an equivalent collation order as 
calling the pair-wise comparison libicu function.
   
   The idea to use sort keys in the fabric view row "merge head" structure, 
where we merge together streaming rows from multiple workers. When we do that 
we keep either a sorted list (for map-only views) and then do an insertion sort 
step and take the minimum, or we keep the rows in key/value structure for 
reduce views and find the minimum key and its grouped values. In either case we 
can reduce the number of libicu compare(a,b) calls from O(K^2) to just O(K) 
sort key generating calls and since libicu calls are not cheap, it worth adding 
an extra NIF calls just for it.
   
   As a side note: we've actually implemented this once during the now 
abandoned CouchDB 4.0 /w FoundationDB backed attempt, there we stored sort key 
in the database, which libicu workers do not recommend doing. Here we're 
planning on using in memory only on the coordinator.
   
   
https://unicode-org.github.io/icu/userguide/collation/concepts#sortkeys-vs-comparison
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to