2015-12-06 2 views
0

У меня около 1,5 миллионов небольших файлов общим размером около 80 ГБ.Как объединить огромное количество небольших файлов в один файл

Я хочу объединить эти файлы в один файл, чтобы быстро копировать. Я пытался архивировать их в почтовый файл и читать файлы с этим кодом:

ZipFile zip = ZipFile.Read(Settings.Default.DataPath); 
ZipEntry entery = zip[MyFile]; 

Идея сработала, но это слишком медленно, она занимает около 30 секунд, чтобы загрузить один файл.

Есть ли еще более быстрая идея объединить файлы?

Благодаря

+0

Возможно, вам нужен SSD :) –

+0

Существует принцип разговора о энергии. В какой-то момент вы больше не сможете оптимизировать материал. Вы * можете * иметь возможность использовать лучшее оборудование или реорганизовать свою базу данных с небольшими файлами во что-то более управляемое (считаете ли вы, что распределите файлы в нескольких местах и ​​используете индексированный доступ для их извлечения?) –

+0

что вы хотите, объединить файл или создать архив файлов с несколькими файлами? какой тип файла? вы хотите скопировать, затем получить доступ? – cutzero

ответ

0

Один из способов заключается в использовании SQLite (вы можете добавить его через пакет NuGet) и создать файл базы данных, который содержит все эти отдельные биты данных.

Вы бы создать таблицу, которая содержит все файлы и сделать имя файла первичный ключ, который будет автоматически создавать индекс на нем:

CREATE TABLE files 
(
    filename TEXT NOT NULL PRIMARY KEY, 
    content BLOB 
) 

Вы бы затем вставить все файлы в нем, одна строка за файл.

Чтобы получить его, вы должны выполнить SQL так:

SELECT content FROM files WHERE filename = ? 

Я бы инкапсулировать все это в новый класс, чтобы вы отделить функциональность сохранения и использования этого файла от остальной части вашего заявление.