protected override string WriteIndexObjectToFile(HyperLogLog indexObject) { var outputFileName = Path.Combine(CommonKeys.TEMP_FOLDER_NAME, Guid.NewGuid().ToString()); var outputStream = FileCreator.OpenFileWriteAndCreatePath(outputFileName); indexObject.SerializeToStream(outputStream); return(outputFileName); }
private static async Task WriteIndexRowsToFile(string outputFileName, IAsyncEnumerable <RootIndexRow> outputRows) { using var outputFile = FileCreator.OpenFileWriteAndCreatePath(outputFileName); using var outputStreamWriter = new StreamWriter(outputFile); await foreach (var outputRow in outputRows) { await outputStreamWriter.WriteObjectToLineAsync(outputRow); } }
private async Task <RootIndexRow> MergeIndexValuesToFile(IAsyncEnumerable <IndexValueModel> indexValues, string outputFilename) { using var outputFile = FileCreator.OpenFileWriteAndCreatePath(outputFilename); using var outputStreamWriter = new StreamWriter(outputFile); var rowsMetadata = await WriteIndexValuesToFile(indexValues, outputStreamWriter); await outputStreamWriter.FlushAsync(); var newMetadataOffset = outputFile.Position; var rootIndexRow = await AddUpdatedMetadataToFile(rowsMetadata, outputStreamWriter); rootIndexRow.FileName = outputFilename; await outputStreamWriter.FlushAsync(); var bloomOffset = outputFile.Position; await AddBloomFilterToIndex(rowsMetadata, outputFile); await outputFile.FlushAsync(); outputFile.WriteBinaryLongsToStream(new[] { newMetadataOffset, bloomOffset }); return(rootIndexRow); }