Мой веб-сервис пишет несколько тысяч транзакций в минуту, и мы сохраняем их на hd.Недостатки использования файлов с отображением памяти
Я тестировал различные способы сохранения этих файлов, и я провел несколько тестов со стандартным IO и с файлами MemoryMapped. В моих результатах запись файлов (20 k текстовых файлов) с файлами MemoryMapped примерно в 4 раза быстрее, чем стандартный IO, и я не смог найти никаких недостатков.
Поскольку у меня не так много опыта с этой технологией, вы думаете, что я могу столкнуться с любой проблемой, использующей их, или вы не видите недостатка?
Спасибо!
EDIT 1, здесь источник:
namespace FileWritingTests.Writers {
public class MappedFileWriter : ITestWriter {
public void Write(string content, string path,string id) {
Byte[] data = System.Text.Encoding.UTF8.GetBytes(content);
using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
using (MemoryMappedFile memoryMapped = MemoryMappedFile.CreateFromFile(fileStream, id, data.Count(),
MemoryMappedFileAccess.ReadWrite, new MemoryMappedFileSecurity(), HandleInheritability.Inheritable, true)) {
var viewStream = memoryMapped.CreateViewStream();
viewStream.Write(data, 0, data.Length);
}
}
}
}
и это тестер:
public TimeSpan Run(int iterations, Writers.ITestWriter tester, String subfolder) {
Console.WriteLine(" -- Starting test {0} with {1} file writings",subfolder, iterations.ToString());
Stopwatch stopWatch = new Stopwatch();
stopWatch.Reset();
stopWatch.Start();
for (int i = 1; i <= iterations; i++) {
tester.Write(transaction, this.path + "\\" + subfolder + "\\" + "file_" + i.ToString() + ".txt", i.ToString());
}
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Console.WriteLine(" -- finish test {0} with {1} file writings. Time Elapsed: {2}", subfolder, iterations.ToString(), ts.TotalMilliseconds);
return ts;
}
тестер называется несколько раз, и есть несколько типов тестера называются для сравнения.
Я буду беспокоиться о том, что происходит с содержимым файла, если программа или компьютер сбой. – AdrianHHH
Просто идея/намек/мысль: Недавно я провел несколько тестов на MMF, но помимо проблемы с отказом я не любил идею предварительной настройки размера файла вверх (Ханс писал, что это не требуется во всех отношениях - думаю, я никогда не приходил эта точка). В итоге я закончил использование PersistentDictionary, поддерживаемого базой данных ESENT, и быструю сериализацию (protobuf). Объединение двух приложений теперь позволяет обрабатывать 20000+ записей в секунду синхронно, а скорость приближается к MMF. – Linky
У меня уже возникла проблема с сбоем компьютера, и файл был незавершенным, это хуже в моем случае. Мне нужен хороший файл или файл. Без файла я могу откатить предыдущие транзакции с помощью db ... но сломанный файл для меня плох. – Rafa