1 -- We maintain a local index of data blocks that have been previously stored
2 -- for constructing incremental snapshots.
4 -- The index is stored in an SQLite3 database. This is its schema.
6 -- List of snapshots which have been created.
7 create table snapshots (
8 snapshotid integer primary key,
15 -- List of segments which have been created.
16 create table segments (
17 segmentid integer primary key,
18 segment text unique not null,
23 expire_time integer -- snapshotid of latest snapshot when expired
26 -- Index of all blocks which have been stored, by checksum.
27 create table block_index (
28 blockid integer primary key,
29 segmentid integer not null,
36 create index block_content_index on block_index(checksum);
37 create unique index block_name_index on block_index(segmentid, object);
39 -- Summary of segment utilization for each snapshots.
40 create table segments_used (
41 snapshotid integer not null,
42 segmentid integer not null,
45 create unique index segments_used_index
46 on segments_used(snapshotid, segmentid);
48 -- Overall estimate of segment utilization, for all snapshots combined.
49 create view segment_info as
50 select segmentid, mtime, size, expire_time,
51 cast(size * utilization as integer) as used, utilization
53 (select segmentid, max(utilization) as utilization
54 from segments_used group by segmentid)