Do not attempt to clean the same segment multiple times.
[cumulus.git] / schema.sql
1 -- We maintain a local index of data blocks that have been previously stored
2 -- for constructing incremental snapshots.
3 --
4 -- The index is stored in an SQLite3 database.  This is its schema.
5
6 -- List of snapshots which have been created.
7 create table snapshots (
8     snapshotid integer primary key,
9     name text not null,
10     scheme text,
11     timestamp real,
12     intent real
13 );
14
15 -- List of segments which have been created.
16 create table segments (
17     segmentid integer primary key,
18     segment text unique not null,
19     path text,
20     checksum text,
21     mtime real,
22     size integer,
23     expire_time integer         -- snapshotid of latest snapshot when expired
24 );
25
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,
30     object text not null,
31     checksum text,
32     size integer,
33     timestamp real,
34     expired integer
35 );
36 create index block_content_index on block_index(checksum);
37 create unique index block_name_index on block_index(segmentid, object);
38
39 -- Summary of segment utilization for each snapshots.
40 create table segments_used (
41     snapshotid integer not null,
42     segmentid integer not null,
43     utilization real
44 );
45 create unique index segments_used_index
46     on segments_used(snapshotid, segmentid);
47
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
52 from segments join
53      (select segmentid, max(utilization) as utilization
54       from segments_used group by segmentid)
55 using (segmentid);