-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Pbtree: MNode iterating with merge sort upon disk and buffer #12077
Merged
MarcosZyk
merged 21 commits into
apache:master
from
linxt20:PbtreeWork_MergeSortForDiskAndMemory
Feb 28, 2024
Merged
Pbtree: MNode iterating with merge sort upon disk and buffer #12077
MarcosZyk
merged 21 commits into
apache:master
from
linxt20:PbtreeWork_MergeSortForDiskAndMemory
Feb 28, 2024
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…the BufferIterator into CachedMNodeContainerIterator
MarcosZyk
changed the title
Pbtree work merge sort for disk and memory
Pbtree: MNode iterating with merge sort upon disk and buffer
Feb 25, 2024
linxt20
commented
Feb 26, 2024
...tdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/container/CachedMNodeContainer.java
Outdated
Show resolved
Hide resolved
….com/linxt20/iotdb into PbtreeWork_MergeSortForDiskAndMemory
MarcosZyk
reviewed
Feb 27, 2024
...n/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java
Outdated
Show resolved
Hide resolved
...tdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/container/CachedMNodeContainer.java
Outdated
Show resolved
Hide resolved
...n/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java
Outdated
Show resolved
Hide resolved
...n/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java
Outdated
Show resolved
Hide resolved
MarcosZyk
approved these changes
Feb 28, 2024
SzyWilliam
pushed a commit
to SzyWilliam/iotdb
that referenced
this pull request
Nov 26, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This work is part of Pbtree's internal and external memory collaborative concurrency control work. It mainly changes the original ChildrenIterator's traversal deduplication and disordered arrangement into merged deduplication and ordered arrangement. On the one hand, it reduces the complexity of deduplication processing, and on the other hand, it also provides an ordered sequence that is easier to process and optimizes the performance of the program.
Implementation idea: ChildrenIterator points to the union of the memory node sequence and the disk node sequence. In the original implementation, the sequence returned by the disk node is already in order. If the memory node sequence is in order, orderly deduplication can be achieved through merging and deduplication. The memory node sequence is composed of two sequences, newbuffer and updatebuffer. On the premise that the two sequences are in order, merging and deduplication also need to be implemented. Newbuffer and updatebuffer inherit from the same base class MNodeChildBuffer, including receivingbuffer and flushingbuffer. After sorting, they also need to be merged and deduplicated.
For three merges and de-reordering, I abstracted the MergeSortIterator class and implemented the overall logic of merge sorting in it. Then inherit the abstract class in the three classes CachedMNodeMergeIterator, BufferIterator, and MNodeChildBufferIterator, and overload the post-processing functions and deduplication logic for different conditions in the merge as needed.