Shard Index
Shard index lets AIS locate and read archived files in TAR objects by offset, avoiding a sequential archive scan.
Use it when a bucket stores dataset TARs and clients repeatedly fetch individual archived files via archpath, for example training samples in GetBatch or regular object GET requests.
The same client request works with or without an index; the difference is the target-side read path:

Table of Contents
- Motivation
- Quick start
- How it works
- Build indexes
- Read indexed shards
- Summarize coverage
- Staleness and cleanup
Motivation
Without a shard index, reading samples/000123.jpg from shard-000042.tar requires archive traversal: AIS must sequentially scan through the TAR object until it finds the requested archived file.
With a shard index, AIS loads compact metadata for shard-000042.tar, finds the archived file’s offset and size, seeks directly to it, and reads only the requested bytes.
This matters most when:
- each TAR object contains many small files
- each request needs only a few files from each TAR object
- the same TAR objects are read repeatedly
- requests use regular object GET or GetBatch with
archpath
Quick start
Create or upload TAR objects, build indexes, check coverage, and read archived files normally:
How it works
A shard index is the associated metadata stored in the system bucket; it makes the source TAR searchable without changing the TAR itself. In summary output, only TAR objects with valid indexes are counted as shards.
For each indexed TAR object, AIS stores:
- archived file names
- byte offsets and sizes inside the TAR
- source object size
- source object checksum
Indexes are stored in the AIS system bucket:
The read path is transparent:
- A client requests an archived file using
archpath. - AIS checks whether the source TAR has a valid shard index.
- If the index is valid, AIS reads the archived file by direct offset lookup.
- If no valid index is available, AIS falls back to the normal archive traversal path.
The client request does not change when an index exists. The index is a performance feature, not a separate data-access API.
Build indexes
Use ais bucket shard-index build to build indexes for TAR objects in a bucket:
Common forms:
The build job:
- walks the selected bucket/prefix
- skips non-TAR objects
- builds one index per TAR object
- verifies existing indexes unless
--skip-verifyis used - rebuilds stale or invalid indexes
Monitor running and completed indexing jobs with:
Fast reruns
--skip-verify is a fast rerun mode:
When this option is set, AIS trusts source objects that already say they have a shard index and skips loading the stored index to verify staleness. Use it only when you know the indexed TAR objects have not changed.
Read indexed shards
Shard indexes are used automatically by regular GET and GetBatch when the request specifies archpath.
Regular GET
Use regular object GET with --archpath:
Or use the archive convenience form:
The equivalent HTTP request is a normal object GET with the archpath query parameter:
GetBatch
GetBatch uses the same archpath field per input object:
With valid shard indexes, each archived-file lookup becomes direct random access into its TAR object. Without indexes, the same request still works, but AIS must scan the archive to locate each archpath.
Summarize coverage
Use ais bucket shard-index summary to see how many local TAR objects are indexed:
Columns:
To print progress while the summary job is running:
To start the summary asynchronously and poll by job ID:
The summary command reports local in-cluster TAR objects. It is intended to answer: “How many TAR objects in this bucket/prefix are already usable as indexed shards?”
Staleness and cleanup
Each index records the source TAR object’s size and checksum at build time.
When AIS loads an index, it compares that recorded metadata with the current source object metadata:
- if size and checksum still match, the index is valid
- if either changed, the index is stale
- if the index object cannot be decoded, the index is invalid
Staleness most commonly happens when a TAR object is overwritten after its index was built.
The normal build path verifies existing indexes and rebuilds stale or invalid ones on a best-effort basis. If a TAR object is busy or cannot be read, AIS skips it and continues. The read path will not use a stale index; it falls back to archive traversal if a valid index is not available.
When a source object that has a shard index is removed, AIS removes the corresponding index object from .sys-shardidx as part of the same cleanup path. Space cleanup can also remove stale internal system-bucket entries.