lance-format / lance-format/lance
Bounded Compaction Planner To Limit the amount of data processed during a single compaction
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 7.1k
- Forks
- 852
- Avg merge
- 3d 18h
- Merged PRs (30d)
- 272
Description
Follow up work for https://github.com/lance-format/lance/issues/5186
During the Compaction process, it is necessary to traverse and calculate all fragments, determine which ones are suitable for Compaction, and split them into Compaction Tasks. However, in the scenario of large datasets, the following bottlenecks exist:
- The Compaction Plan itself takes a long time to generate. In a scenario we encountered with 300,000 fragments, it may takes 13min to generate plan or even led to an OOM error.
- A large number of Compaction Tasks are generated in the planning. Even in the case of concurrent execution, it still takes a long time to complete. Moreover, if a Task fails due to certain reasons (such as spark driver loss), the entire Compaction needs to be retried completely, which is a huge waste of resources.
In response to this, we can extend the existing design of the Compaction Planner to create a Planner that limits the computational load of Compaction (such as the total data throughput 100TB total?, the total number of fragments involved in the calculation, etc.), named BoundedCompactionPlanner. Its purpose is to reasonably split a large Compaction job into multiple sub-jobs and complete them smoothly.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the existing Compaction Planner design and the follow-up issue #5186. Determine how a bounded planner should limit data or fragment processing and split a large compaction into sub-jobs; done means large datasets can be planned and retried in bounded portions without processing the entire job at once.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- data-engineering, performance
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100