Мы стремимся использовать HDF5 для нашего формата данных. HDF5 был выбран, потому что это иерархический кросс-платформенный формат данных, похожий на файловую систему и поддерживающий большие объемы данных.
Файл будет содержать массивы и некоторые параметры. Вопрос заключается в том, как хранить параметры (которые не состоят из большого количества данных), учитывая также проблемы с версиями файлов и усилия по созданию библиотеки. Параметры внутри HDF5 могут быть сохранены как (A) удобочитаемые пары атрибут / значение или (B) двоичные данные в форме составных типов данных HDF5.
В качестве примера рассмотрим в качестве параметра многоугольник с тремя вершинами. В случае А мы могли бы иметь переменную с именем Polygon
со строковым представлением ряда вершин, например, например (1, 2); (3, 4); (4, 1)
, В случае B мы могли бы вместо этого иметь переменную с именем Polygon
состоит из матрицы [2 x 3].
У нас есть некоторая идея, но было бы здорово получить отзывы от людей, которые уже работали с чем-то похожим. Точнее, не могли бы вы перечислить плюсы и минусы A и B, а также сказать, при каких обстоятельствах это было бы предпочтительным?
Говоря, как кто-то, кто должен был делать то, о чем вы говорите много раз, г-н понял это правильно, но я бы немного изменил акцент.
текстовые файлы для людей легче работать. Если вы хотите извлечь подмножество данных и манипулировать ими, вы можете сделать это с помощью многих программ на многих компьютерах. Если вы работаете с двоичными данными, вам понадобится программа, которая позволяет вам это делать. В зависимости от того, как вы видите людей, работающих с вашими данными, это может иметь огромное значение для доступности данных и затрат на обслуживание. Вы сможете sed, grep и даже редактировать данные в Excel.
ввод и вывод двоичных данных (для больших наборов данных) будет значительно быстрее, чем текст.
Так что, в конце концов, это немного зависит от вашего варианта использования. Имеет ли смысл просматривать данные в бесчисленных инструментах, которые обрабатывают простой текст? Имеет ли смысл смотреть на это с помощью просмотра больших данных hdf5? Будет ли писать простой текст обременительным для вас с точки зрения времени и пространства?
В общем, когда я сталкиваюсь с этой проблемой, я в основном всегда делаю одно и то же: я сохраняю данные в виде простого текста, пока не пойму, что проблемы со скоростью более раздражающие, чем работа с двоичным файлом, и затем я переключаюсь. Если вы не знаете заранее, пересекаете ли вы этот порог, начните с простого текста и запишите свой интерфейс на свой уровень персистентности таким образом, чтобы потом было легко переключаться. Это небольшая дополнительная работа, которую вы, вероятно, получите обратно благодаря простому тексту, который легче отлаживать.
Если вы планируете часто редактировать файл вручную (например, XML или JSON), используйте формат, понятный человеку.
В противном случае используйте двоичный код — гораздо проще создать для него парсер и он будет работать быстрее, чем любой грамматический парсер.
Также обратите внимание, что ничто не мешает вам позже создать конвертер между двоичной и читабельной формой.
Версирование файлов может звучать неплохо, но вы действительно собираетесь проверять различия в файлах, «содержащих большие массивы»?