Быстрая библиотека C для прозрачного управления очень большими файлами - PullRequest
0 голосов
/ 19 января 2010

Мне нужно сохранить очень большие объемы данных (> 500 ГБ), которые передаются (800 Мбит / с) с другого устройства, подключенного к моему ПК. Скорость исключает использование базы данных, например MySQl / ISAM, и я ищу быструю, легкую библиотеку, которая находится над библиотекой 'C' stdio (т.е. fopen / fclose / fwrite), которая позволит мне записывать / читать очень большой файл (до доступного диска -пространство).

За кулисами большой файл можно разбить на более мелкие файлы, например, 1 ГБ, и я хочу, чтобы API позаботился об этих деталях.

Данные поступают на ПК в сжатом двоичном формате, и перед записью на жесткий диск дополнительная обработка не требуется.

Библиотека должна работать для Windows и Linux.

Ответы [ 2 ]

1 голос
/ 19 января 2010

если вам нужен произвольный доступ к данным, взгляните на отображенные в памяти файлы.

Позволяет вам прозрачно отобразить файл (или часть файла) в память без необходимости явного выделения памяти и чтения данных. Он работает на Windows / Linux (есть улучшенная библиотека, которая закрывает различия).

В Windows вы можете обрабатывать файлы >> 4 ГБ на 32-битной ОС, используя несколько окон в файл.

редактировать: Извините, 800 Мбит / с! Я не знаю дисков, которые могли бы справиться с этим. Вы можете взглянуть на рейдовый массив SSD-дисков.
Раньше были карты захвата изображений, которые использовали подключенный диск как простую серию байтов без файловой системы для получения очень высокой скорости устойчивой записи. Я не знаю, понадобится ли вам что-нибудь подобное.

0 голосов
/ 20 января 2010

Для максимальной скорости я советую ориентироваться на конкретную платформу.

Цель состоит в том, чтобы максимально приблизить устройство ввода непосредственно к жесткому диску. Одним из способов является написание драйвера для устройства ввода, которое пишет непосредственно на жесткий диск.

Общий алгоритм должен использовать либо очень большой кольцевой буфер байтов, либо использовать несколько буферов. Вам необходимо дополнительное пространство для компенсации разницы в скорости между устройством ввода и устройством вывода; при условии, что устройство ввода не остановлено.

Если вы можете приостановить устройство ввода, проблема станет проще.

...