public TableFileMergeWriter2(StorageLayer layer, BlockCache blockCache, bool loadNewFiles = true) { _loadNewFiles = loadNewFiles; //_database = database; _layer = layer; _blockCache = blockCache; }
private bool DoesTableFitWithNoOverlap(TableFile table, StorageLayer nextLayer) { var tablesBelow = nextLayer.GetTables(); var noOverlap = true; var firstKey = table.FirstKey.Span; var lastKey = table.FirstKey.Span; foreach (var lowerTable in tablesBelow) { var compare = firstKey.SequenceCompareTo(lowerTable.LastKey.Span); if (compare > 0) { continue; } compare = lastKey.SequenceCompareTo(lowerTable.FirstKey.Span); if (compare < 0) { continue; } noOverlap = false; } return(noOverlap); }
private async Task MoveTableToLowerLevel(SortedStorageLayer sortedStorage, StorageLayer layerBelow, TableFile file) { var newFilename = layerBelow.GetNextFileName(); System.IO.File.Copy(file.FileName, newFilename); var tableFile = new TableFile(newFilename, _database.BlockCache); await tableFile.LoadAsync(); layerBelow.AddTableFile(tableFile); sortedStorage.RemoveTable(file); file.Dispose(); System.IO.File.Delete(file.FileName); Console.WriteLine("Moved table down with no merge"); // Move table down one level }
private List <TableFile> GetOverlappingTables(TableFile table, StorageLayer nextLayer) { var tablesBelow = nextLayer.GetTables(); var firstKey = table.FirstKey.Span; var lastKey = table.LastKey.Span; var overlapped = new List <TableFile>(); foreach (var lowerTable in tablesBelow) { var compare = firstKey.SequenceCompareTo(lowerTable.LastKey.Span); if (compare > 0) { continue; } compare = lastKey.SequenceCompareTo(lowerTable.FirstKey.Span); if (compare < 0) { continue; } overlapped.Add(lowerTable); } return(overlapped); }
public TableFileMergeWriter(TrimDatabase database, StorageLayer layer, BlockCache blockCache, int lowestLevel) { _database = database; _layer = layer; _blockCache = blockCache; }