lance-format / lance-format/lance

Implement Blob v2 exact sharing for ingested blobs

Open
#7,274 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

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

Description

Problem

Blob v2 can already choose among inline, packed, dedicated, and external placement, but the write path still treats each ingested blob value as an independent physical object. This makes workloads with repeated source blobs store the same bytes multiple times even when the caller can identify that multiple rows refer to the exact same source value.

Discussion #7174 proposes an object-layer direction for Blob v2. This issue tracks the first narrow implementation step: exact sharing for ingested blobs.

Scope

Add write-time exact sharing for blob values that are ingested into Lance-managed storage.

The sharing identity should be provided as a write-time source identity, scoped to a single write / data file. It must not become a dataset-global object id, and it must not create cross-table blob ownership or lifecycle dependencies.

Out of scope for this issue:

  • delta blob encoding
  • chunked blob encoding
  • video or domain-specific blob packs
  • cross-table blob sharing
  • a public plugin system for blob object backends

Expected behavior

When multiple rows in the same write provide the same source identity for an ingested blob, Lance should store the physical bytes once and write descriptors that resolve to the same logical bytes.

Existing callers that do not provide a source identity should keep the current behavior.

Compatibility requirements

  • Existing Blob v2 datasets remain readable.
  • The default public read schema remains compatible with existing Blob v2 descriptor behavior.
  • Any helper fields used to carry the write-time source identity must not leak into ordinary read schemas or persisted logical schemas.
  • The implementation must fail clearly if exact sharing cannot be applied safely.

Acceptance criteria

  • Rust write path supports write-local exact sharing for ingested Blob v2 values.
  • Python write path can pass or infer the source identity for ingested external blob values.
  • Tests cover duplicate source identity, distinct source identity, missing source identity, and read-back correctness.
  • Tests cover that ordinary read schemas do not expose the write-time helper identity.
  • Documentation or examples explain the feature boundary and explicitly distinguish it from cross-table sharing.

Related

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

Start with the Rust write path for Blob v2 and the Python write path for ingested external blobs. Trace how source identity is carried during one write and verify it is absent from ordinary read and persisted logical schemas. Add coverage for duplicate, distinct, and missing identities plus read-back correctness, and document the write-local boundary versus cross-table sharing.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, rust
Domain
backend, data
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.