X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=schema.sql;h=2cca99a34d367888c0c36c41d5715dcd5114ad8b;hb=a855c59ca566ee7a55fc3dda56ab70943a85ef32;hp=d225ec1f1c0cc0be002fc31ca9a74bf8b6c1c9a2;hpb=6a181a1eb21ac5f9f4f742281b6de841dac9a3c8;p=cumulus.git diff --git a/schema.sql b/schema.sql index d225ec1..2cca99a 100644 --- a/schema.sql +++ b/schema.sql @@ -7,13 +7,16 @@ create table snapshots ( snapshotid integer primary key, name text not null, + scheme text, timestamp real ); -- List of segments which have been created. create table segments ( segmentid integer primary key, - segment text unique not null + segment text unique not null, + path text, + checksum text ); -- Index of all blocks which have been stored in a snapshot, by checksum. @@ -36,3 +39,21 @@ create table snapshot_contents ( ); create unique index snapshot_contents_unique on snapshot_contents(blockid, snapshotid); + +-- Summary statistics for each segment. +create view segment_info as select * from + (select segmentid, max(timestamp) as mtime, + sum(size) as size, count(*) as objects + from block_index join segments using (segmentid) group by segmentid) +natural join + (select segmentid, sum(size) as used, count(*) as objects_used + from block_index where blockid in + (select blockid from snapshot_contents) group by segmentid); + +-- Ranking of segments to be cleaned, using a benefit function of +-- (fraction free space)*(age of youngest object). +create view cleaning_order as select *, (1-u)*age/(u+0.1) as benefit from + (select segmentid, + cast(used as real) / size as u, julianday('now') - mtime as age + from segment_info) +where benefit > 0;