Каков оптимальный формат для сохранения больших объемов числовых данных (ГБ) из программы на Си? - PullRequest
5 голосов
/ 14 августа 2010

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

  1. Есть ли лучший формат, чем ASCII?Должен ли я использовать двоичные файлы или, возможно, какой-то другой формат какой-нибудь библиотеки?

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

Большое спасибо!

Ответы [ 4 ]

7 голосов
/ 14 августа 2010

На вашем месте я бы рассмотрел стандартные форматы научных данных, которые намного меньше занимают много места и времени, чем ASCII, но (хотя, может быть, не вполне столь же эффективны, как чистые, машинные). зависимые двоичные форматы) по-прежнему предлагают стандартные документированные и переносимые быстрые библиотеки для облегчения чтения и записи данных.

Если вы храните данные в чистом двоичном виде, метаданные имеют решающее значение для того, чтобы снова иметь какой-либо смысл в данных (это числа с одинарной или двойной точностью или целые числа и какой длины, каковы размеры массивов и т. Д., и т. д.), а проблемы с архивированием и извлечением парных пар данных / метаданных могут и на практике иногда приводят к невозможности использования совершенно хороших наборов данных - это очень жаль и трата.

CDF , в частности, это «формат данных с самоописанием для хранения и манипулирования скалярными и многомерными данными независимо от платформы и дисциплины» со многими библиотеками и утилитами Это. В качестве альтернативы вы могли бы также рассмотреть NetCDF и HDF - я менее знаком с ними (и такими компромиссами, как гибкость в зависимости от размера и скорость), но, видя, насколько широко они " Я подозреваю, что любой из трех форматов может дать вам очень приемлемые результаты.

3 голосов
/ 14 августа 2010
  1. Если вам нужны файлы в течение более длительного времени, это важные экспериментальные данные, которые вам что-то доказывают, не используйте двоичные форматы. Вы не сможете прочитать их, когда ваша архитектура изменится. опасно. придерживаться текстовых (да ascii) файлов.

  2. Выберите формат сжатия, который соответствует вашим потребностям. Является ли время сжатия проблемой? Обычно нет, но проверьте это сами. Является ли время декомпрессии проблемой? Обычно да, если вы хотите сделать анализ данных на нем. В этих условиях я бы пошел на bzip2. Это довольно распространено в наши дни, хорошо проверено, надежно. Я бы делал файлы индивидуально, так как чем больше ваш файл, тем больше вероятность потерь. (Биты и т.д.).

2 голосов
/ 14 августа 2010

Есть много информации, которую вы не включили, но должны подумать:

1.) Вы храните целые числа или числа с плавающей запятой? Каков типичный диапазон чисел? Например: для хранения небольших целых чисел, разделенных запятыми в ascii, таких как «1,2,4,2,1», потребуется в среднем 2 байта на элемент данных, но для их хранения в двоичном виде потребуется 4 байта на элемент.

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

С другой стороны, хранение значений типа double (8-байтовые значения) будет почти наверняка меньше в двоичном формате.

2.) Как вам нужен доступ к этим значениям? Если вас не интересует время доступа, сожмите! С другой стороны, если вам нужен быстрый произвольный доступ, сжатие, вероятно, помешает вам.

3.) Часто ли повторяются некоторые значения? Тогда вы можете рассмотреть кодировку Хаффмана или таблицу «сокращенных» значений.

2 голосов
/ 14 августа 2010

Терабайтный диск стоит сто баксов. Трудно выйти из космоса в эти дни. Конечно, хранение данных в двоичном виде экономит место. Но есть цена, у вас будет гораздо меньше вариантов, чтобы снова извлечь данные из файла.

Проверьте, что может делать ваша операционная система. Windows поддерживает автоматическое сжатие папок, например, содержимое файла архивируется файловой системой без каких-либо действий. Степени сжатия должны хорошо конкурировать с необработанными двоичными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...