25 lines
1023 B
SQL
25 lines
1023 B
SQL
|
|
-- Content-Defined Chunking (CDC) manifests for sub-file deduplication.
|
||
|
|
--
|
||
|
|
-- Each file uploaded via CDC is split into variable-size chunks (FastCDC).
|
||
|
|
-- The manifest records the ordered list of chunk hashes that compose the file.
|
||
|
|
-- Individual chunks are stored in storage.blobs (shared across manifests).
|
||
|
|
--
|
||
|
|
-- Legacy whole-file blobs (pre-CDC) remain in storage.blobs and are
|
||
|
|
-- accessed directly when no matching manifest row exists.
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS storage.chunk_manifests (
|
||
|
|
file_hash VARCHAR(64) PRIMARY KEY,
|
||
|
|
chunk_hashes TEXT[] NOT NULL,
|
||
|
|
chunk_sizes BIGINT[] NOT NULL,
|
||
|
|
total_size BIGINT NOT NULL,
|
||
|
|
chunk_count INTEGER NOT NULL,
|
||
|
|
content_type TEXT,
|
||
|
|
ref_count INTEGER NOT NULL DEFAULT 1 CHECK (ref_count >= 0),
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Index for GC: find manifests with no references.
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_chunk_manifests_ref_count_zero
|
||
|
|
ON storage.chunk_manifests (file_hash)
|
||
|
|
WHERE ref_count = 0;
|