lance-format / lance-format/lance

Tracking: Stability and Performance Optimization of Trillion-row Lance Tables

Open
#7,968 0 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

performance
Dominant language
Rust
Stars
7.1k
Forks
852
Avg merge
3d 18h
Merged PRs (30d)
272

Description

Background & Goals

Targeting tables at the scale of one trillion rows / millions of fragments, this effort profiles Lance's stability and performance across metadata / read / write / index, and drives the corresponding optimizations to land.

This issue serves as the umbrella entry point, tracking the known problems and optimization tasks per module.

Test Dataset

Item Value
Table shape 300-column wide table + source partition column
Fragments 1,000,000
Rows 1,000,000,000,000
Latest manifest ~1.6 GiB

Module 1: Lance-Core (Kernel)

Continuously being expanded.

Metadata
Write
Read
  • The Java blocking_dataset exposes more metadata information, such as Fragments statistics, to optimize the Read Plan process for engines like Spark. https://github.com/lance-format/lance/issues/8071
  • (TBD: profiling and optimization items for point lookups / range scans / projec reads at the hundred-billion scale)
Index
Compaction

Module 2: Lance-Spark (Connector)

  • Hot-read on the manifest during Append: the schema-fetch path triggers hot the large manifest.
  • Hot-read on the manifest during Update / Add Columns / Compaction: the data mechanism causes repeated reads of the large manifest (DatasetCache vs. Session Share design choice).
  • Driver OOM on Compaction commit: aggregating row id maps on the driver causes OOM.
  • Write task count is not controllable: RequiresDistributionAndOrdering doe implement requiredNumPartitions(), so write parallelism can only be worked around indirectly via AQE parameters and cannot be specified directly, which easily leads oversized per-task buffering → off-heap OOM.
  • The split plan takes more than two minutes under scenarios with large data volumes and zonemap indexes in Lance Spark.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

This is an umbrella issue covering Lance-Core metadata, read, write, index and compaction work plus Lance-Spark paths such as DatasetCache, Session Share, compaction commit and split planning. Start by selecting one unchecked item and reading its linked issue when available; done means the selected bottleneck is optimized and validated against the stated large-table scenario.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust, spark
Domain
data-engineering, distributed-systems, performance
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.