lance-format / lance-format/lance
Improve version resolution performance for storage that does not support lexicographically sorted listing
@jackye1995 is already working on this.
Since Jul 24, 2025.
- Dominant language
- Rust
- Stars
- 7.1k
- Forks
- 852
- Avg merge
- 3d 18h
- Merged PRs (30d)
- 272
Description
Currently resolving the latest version of the table requires listing. With scheme v2, for storages that return results in lexicographically sorted order, we just request a reverse sort and list the first value to find the latest version. But when the storage does not support lexicographically sorted result (e.g. S3 express), we have to list everything and sort it to find the latest version, which becomes slow especially when there are a lot of versions accumulated.
There is one way we could evaluate if it could improve the situation:
instead of listing, we do HEAD. Basically you just continue to run HEAD with increasing version number until you cannot find the manifest of version k, then k-1 is the latest version. That would require some notion of the minimum version (like Delta's _last_checkpoint) and assume that file is always mostly up to date, but it would let us get away with discrepancy of listing behaviors across storage and perf concerns since HEAD is typically very fast and you can issue HEAD in parallel.
This might or might not be better, but just put it here so that at least we can track it and if anyone is interested to compare the 2 approaches, he/she can pick up.
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.
Assessment
This issue has not been assessed yet.