[ https://issues.apache.org/jira/browse/CASSANDRA-9988?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15833718#comment-15833718 ]
Jay Zhuang commented on CASSANDRA-9988: --------------------------------------- [Patch|https://github.com/cooldoger/cassandra/commit/8704eb8bbf94d5b556f67386d464a015ca98554b] is ready, please review. Here is the JMH test result before and after the patch, overall it significantly improved the iterator for small BTree: || || Before the patch || After the patch || Improvement || | iteratorBigTreeTest | 171.271 | 167.288 | -2% | | searchBigTreeTest | 12743.251 | 11833.277 | -7% | | searchNotFoundBigTreeTest | 11140.872 | 10378.794 | -7% | | iteratorLeafTreeTest | 5337.291 | 19788.253 | +271% | | searchFoundLeafTreeTest | 18608.504 | 36809.601 | +98% | | searchNotFoundLeafTreeTest | 19670.935 | 28880.540 | +47% | | iteratorOneElemTreeTest | 65983.946 | 414832.010 | +529% | | searchFoundOneElemTreeTest | 45796.932 | 288174.238 | +529% | | searchNotFoundOneElemTreeTest | 43176.354 | 284008.493 | +558% | Here is the code for JMH test without fix: https://github.com/cooldoger/cassandra/tree/9988-nofix I tried exponential search: https://github.com/cooldoger/cassandra/commit/a23a3422a894acb72a47975da035bbf8da50fc4b But the JMH test result is worse (other tests didn't change too much): || || Binary search || Exponential search || Improvement || | searchFoundLeafTreeTest | 36809.601 | 30074.161 | -18% | | searchNotFoundLeafTreeTest | 28880.540 | 24540.700 | -15% | | searchFoundOneElemTreeTest | 288174.238 | 233786.942 | -19% | | searchNotFoundOneElemTreeTest | 284008.493 | 199549.589 | -30% | Here are the JMH test results: {noformat} No Fix [java] Benchmark Mode Cnt Score Error Units [java] BTreeSearchIteratorBench.iteratorBigTreeTest thrpt 40 171.271 ? 3.872 ops/ms [java] BTreeSearchIteratorBench.iteratorLeafTreeTest thrpt 40 5337.291 ? 306.129 ops/ms [java] BTreeSearchIteratorBench.iteratorOneElemTreeTest thrpt 40 65983.946 ? 10651.607 ops/ms [java] BTreeSearchIteratorBench.searchBigTreeTest thrpt 40 12743.251 ? 1171.717 ops/ms [java] BTreeSearchIteratorBench.searchFoundLeafTreeTest thrpt 40 18608.504 ? 1671.129 ops/ms [java] BTreeSearchIteratorBench.searchFoundOneElemTreeTest thrpt 40 45796.932 ? 6543.235 ops/ms [java] BTreeSearchIteratorBench.searchNotFoundBigTreeTest thrpt 40 11140.872 ? 1355.109 ops/ms [java] BTreeSearchIteratorBench.searchNotFoundLeafTreeTest thrpt 40 19670.935 ? 1775.676 ops/ms [java] BTreeSearchIteratorBench.searchNotFoundOneElemTreeTest thrpt 40 43176.354 ? 6862.149 ops/ms Fix [Binary Search] [java] Benchmark Mode Cnt Score Error Units [java] BTreeSearchIteratorBench.iteratorBigFullTreeTest thrpt 40 147.093 ? 7.968 ops/ms [java] BTreeSearchIteratorBench.iteratorBigTreeTest thrpt 40 167.288 ? 4.029 ops/ms [java] BTreeSearchIteratorBench.iteratorLeafTreeTest thrpt 40 19788.253 ? 887.529 ops/ms [java] BTreeSearchIteratorBench.iteratorOneElemTreeTest thrpt 40 414832.010 ? 16663.043 ops/ms [java] BTreeSearchIteratorBench.searchBigTreeTest thrpt 40 11833.277 ? 1290.791 ops/ms [java] BTreeSearchIteratorBench.searchFoundLeafTreeTest thrpt 40 36809.601 ? 2403.004 ops/ms [java] BTreeSearchIteratorBench.searchFoundOneElemTreeTest thrpt 40 288174.238 ? 11618.352 ops/ms [java] BTreeSearchIteratorBench.searchNotFoundBigTreeTest thrpt 40 10378.794 ? 1229.196 ops/ms [java] BTreeSearchIteratorBench.searchNotFoundLeafTreeTest thrpt 40 28880.540 ? 1875.317 ops/ms [java] BTreeSearchIteratorBench.searchNotFoundOneElemTreeTest thrpt 40 284008.493 ? 7929.286 ops/ms Fix [Exponential search] [java] Benchmark Mode Cnt Score Error Units [java] BTreeSearchIteratorBench.iteratorBigFullTreeTest thrpt 40 164.849 ? 3.571 ops/ms [java] BTreeSearchIteratorBench.iteratorBigTreeTest thrpt 40 161.228 ? 6.219 ops/ms [java] BTreeSearchIteratorBench.iteratorLeafTreeTest thrpt 40 19828.490 ? 727.999 ops/ms [java] BTreeSearchIteratorBench.iteratorOneElemTreeTest thrpt 40 397640.373 ? 18525.227 ops/ms [java] BTreeSearchIteratorBench.searchBigTreeTest thrpt 40 11816.892 ? 1305.738 ops/ms [java] BTreeSearchIteratorBench.searchFoundLeafTreeTest thrpt 40 30074.161 ? 1916.827 ops/ms [java] BTreeSearchIteratorBench.searchFoundOneElemTreeTest thrpt 40 233786.942 ? 6960.706 ops/ms [java] BTreeSearchIteratorBench.searchNotFoundBigTreeTest thrpt 40 11014.239 ? 1323.596 ops/ms [java] BTreeSearchIteratorBench.searchNotFoundLeafTreeTest thrpt 40 24540.700 ? 1596.072 ops/ms [java] BTreeSearchIteratorBench.searchNotFoundOneElemTreeTest thrpt 40 199549.589 ? 7523.028 ops/ms {noformat} > Introduce leaf-only iterator > ---------------------------- > > Key: CASSANDRA-9988 > URL: https://issues.apache.org/jira/browse/CASSANDRA-9988 > Project: Cassandra > Issue Type: Sub-task > Reporter: Benedict > Assignee: Jay Zhuang > Priority: Minor > Labels: patch > Fix For: 4.0 > > Attachments: 9988-trunk-new.txt, trunk-9988.txt > > > In many cases we have small btrees, small enough to fit in a single leaf > page. In this case it _may_ be more efficient to specialise our iterator. -- This message was sent by Atlassian JIRA (v6.3.4#6332)