예제 #1
0
 public TableFileMergeWriter2(StorageLayer layer, BlockCache blockCache, bool loadNewFiles = true)
 {
     _loadNewFiles = loadNewFiles;
     //_database = database;
     _layer      = layer;
     _blockCache = blockCache;
 }
예제 #2
0
        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);
        }
예제 #3
0
        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
        }
예제 #4
0
        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);
        }
예제 #5
0
 public TableFileMergeWriter(TrimDatabase database, StorageLayer layer, BlockCache blockCache, int lowestLevel)
 {
     _database   = database;
     _layer      = layer;
     _blockCache = blockCache;
 }