[Feature] Cut metadata round trips when planning a scan (known manifest sizes, listing probes, parallel manifest-list reads)
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 58/100
- Tipo de issue
- Funcionalidade
- Clareza
- Razoavelmente clara
- Status de atividade
- Ativa
- Domínio
- data-engineering
Direção de pesquisa
Comece por ObjectsFile::Read, ReadIfFileExist, ReadArrowBatches e ReadFileSegment; em seguida, rastreie os callers de ManifestFile, ManifestList, FileStoreScan e SnapshotFileCollector. Inspecione também FileUtils::ListVersionedFileStatus e JindoFileSystem::ListDir. Está concluído quando tamanhos conhecidos evitarem chamadas de status de metadados, as listagens de diretórios inexistentes continuarem funcionando e as leituras dos manifestos base/delta preservarem a ordem enquanto são executadas de forma concorrente.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Search before asking
- I searched in the issues and found nothing similar.
Motivation
Scan planning pays several object-store round trips that are avoidable, either because the answer is already in metadata it has read or because one call can answer what two are asking.
- Manifest reads re-resolve a length the metadata already carries. A manifest list records each manifest's
fileSize, and a snapshot records its base/delta/changelog manifest-list sizes. ButObjectsFile::Read*opened these files with a bareOpen(path), so on a remote store every manifest and manifest list paid agetFileStatus/HeadObjectround trip just to learn a length planning already had. This is the metadata-path counterpart of the data-file fast path inOpen(const FileStatus&). ListVersionedFileStatusprobes existence before listing. It calledExists(dir)thenListDir(dir). Every file system already lists a missing directory as an empty result rather than an error, so the probe only decided whether to make a call that answers the same question — an extra round trip on every schema/snapshot/versioned-file lookup.- Jindo
ListDirasks the store twice. It calledExists(dir)thenGetFileStatus(dir); a singleGetFileStatusanswers both "is it there" and "is it a directory". ScanMode::ALLreads the base and delta manifest lists serially. They are two independent files and neither read depends on the other, so the two metadata round trips are paid one after the other instead of together.
For scans over many manifests, or against a high-latency object store, these round trips are a measurable and entirely avoidable part of planning latency.
Solution
- Thread an optional known length through the metadata read path:
ObjectsFile::Read/ReadIfFileExist/ReadArrowBatches/ReadFileSegmentgain astd::optional<int64_t> file_size(defaultstd::nullopt), and a newOpenForReadhelper opens withOpen(FileStatus(path, size))when the length is known and falls back toOpen(path)when it is not.ManifestFile::ReadBucketEntriesforwards it,ManifestList::ReadBase/Delta/ChangelogManifestspass the sizes recorded on the snapshot, andFileStoreScan/SnapshotFileCollectorpass eachManifestFileMeta::FileSize(). - Drop the
Exists()probe inFileUtils::ListVersionedFileStatusand list directly. - Collapse Jindo
ListDirto a singleGetFileStatus, mapping the SDK not-found to an empty listing (as the other file systems do) and propagating any other error. - In
FileStoreScan::ReadManifestsWithSnapshot, read the base and delta manifest lists concurrently through the existingexecutor_(Via+CollectAll), preserving base-then-delta order.
The size fields stay optional, so a snapshot or manifest list written before they existed keeps reading through the Open(path) fallback — this is an optimization, not a new requirement on the metadata.
Anything else?
- The length handed to
Open(FileStatus)is trusted, not re-validated, so a stale or wrong size would surface as a short or failed read. Manifest and manifest-list files are write-once and never rewritten, and the size is recorded by the same commit that wrote the file, so it cannot go stale underneath the read; a negative length is rejected by the baseOpen(const FileStatus&). - The size fast path benefits stores that override
Open(const FileStatus&)(todayObjectStoreFileSystem;ResolvingFileSystemforwards it).JindoFileSystemcurrently only overridesOpen(path), so for Jindo the manifest-size threading is inert until it gains that override; the Jindo win here is the single-callListDir. - No storage format or protocol change, and no new public API: the changed signatures are internal
src/paimonhelpers and the new parameter is defaulted.
Are you willing to submit a PR?
- I'm willing to submit a PR!
- Linguagem predominante
- C++
- Estrelas
- 65
- Forks
- 29
- Merge médio
- 2d 6h
- PRs com merge (30d)
- 71
Preparar o ambiente
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de apache/paimon-cpp
-
enhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
apache/paimon-cpp#389 ·
Mantenedores costumam responder em até 1 dia
-
[Feature] dictionary encoded binary supportTalvez já em andamento @zhangweilst assumiu há 7 dias. Abertaenhancement
apache/paimon-cpp#381 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Feature] Bypass manifest lists on exact snapshot live-entry cache hitsTalvez já em andamento @wangyong9999 assumiu há 7 dias. Aberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 30/100
apache/paimon-cpp#375 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Feature] Support vector and full-text search in File IndexTalvez já em andamento @zjw1111 assumiu há 7 dias. Abertaenhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 45/100
apache/paimon-cpp#361 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Feature] Support 64-bit deletion vectors in Paimon C++Talvez já em andamento @lszskye assumiu há 7 dias. Abertaenhancement
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
apache/paimon-cpp#325 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
Todas as issues de apache/paimon-cpp
Issues semelhantes
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 92/100
sandialabs/seacas#945 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
ROCm/FastFlowLM#757 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 92/100
espressif/esp-matter#1867 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
mltframework/shotcut#1920 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia