X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=schema.sql;h=850e6a9ace316196a494d7a91b77a95f7c21ceb0;hb=5b346a4689ac2c8458e30fd8752abd6e2f207c56;hp=6d89b4b2cd7fd55f5ae551116bbedbb823548d7e;hpb=def20364a3596d7b1fa4a07f3d3ee056cfff2d1e;p=cumulus.git diff --git a/schema.sql b/schema.sql index 6d89b4b..850e6a9 100644 --- a/schema.sql +++ b/schema.sql @@ -8,16 +8,22 @@ create table snapshots ( snapshotid integer primary key, name text not null, scheme text, - timestamp real + timestamp real, + intent 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, + mtime real, + size integer, + expire_time integer -- snapshotid of latest snapshot when expired ); --- Index of all blocks which have been stored in a snapshot, by checksum. +-- Index of all blocks which have been stored, by checksum. create table block_index ( blockid integer primary key, segmentid integer not null, @@ -30,28 +36,20 @@ create table block_index ( create index block_content_index on block_index(checksum); create unique index block_name_index on block_index(segmentid, object); --- Index tracking which blocks are used by which snapshots. -create table snapshot_contents ( - blockid integer, - snapshotid integer +-- Summary of segment utilization for each snapshots. +create table segments_used ( + snapshotid integer not null, + segmentid integer not null, + utilization real ); -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 natural join segments 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); +create unique index segments_used_index + on segments_used(snapshotid, 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; +-- Overall estimate of segment utilization, for all snapshots combined. +create view segment_info as +select segmentid, mtime, size, expire_time, + cast(size * utilization as integer) as used, utilization +from segments join + (select segmentid, max(utilization) as utilization + from segments_used group by segmentid) +using (segmentid);