public async Task <long> GetLastDocId() { if (_file.Length == 0) { return(0); } var initialPos = _file.Position; try { var compression = new CompressionUtils(); var segment = await compression.ReadWithDecompressionFromRightToLeft(_file); using (var ms = new MemoryStream(segment.Array, segment.Offset, segment.Count)) { var batch = await DocumentSerializer.DeserializeBatch(ms).ConfigureAwait(false); return(batch.Last().Id); } } finally { _file.Position = initialPos; } }
public async Task <List <Document> > GetChunk(long offset) { var compression = new CompressionUtils(); if (offset >= _file.Length) { // should NEVER happen throw new InvalidOperationException("Specified position doesn't exist in data file"); } using (var file = new FileStream(_filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { var segment = await compression.ReadWithDecompression(file, offset); using (var ms = new MemoryStream(segment.Array, segment.Offset, segment.Count)) { var batch = await DocumentSerializer.DeserializeBatch(ms).ConfigureAwait(false); return(batch); } } }