2016-03-07 3 views
4

На википедии можно прочитать следующую критику о hdf5:HDF5 возможное повреждение или потеря данных?

Критика hdf5 вытекает из его монолитной конструкции и длительный спецификации. Несмотря на 150-страничный открытый стандарт, существует только одна реализация 0xC HDF5, что означает, что все привязки делятся своими ошибками и проблемами производительности. Составленный с отсутствием журнальной, документально ошибок втекущего стабильного выпуска являются способны разлагающих целых hdf5 баз данных. Хотя 1.10-alpha добавляет журналирование, это назад - несовместимо с предыдущими версиями. HDF5 также не поддерживает UTF-8, что требует ASCII в большинстве мест. Кроме того, даже в последнем черновике данные массива никогда не могут быть удалены.

Мне интересно, применимо ли это только к реализации С HDF5 или если это общий недостаток HDF5?

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

Мои скрипты всегда имеют Python API, поэтому я использую h5py (версия 2.5.0).

Итак, эта критика имеет отношение ко мне, и я должен беспокоиться о поврежденных данных?

+2

Во-первых, все другие реализации полагаются на библиотеку C, так что это проблемы во всем мире. Для потери данных я считаю, что критическая точка - это добавление данных в уже существующий файл. Но если вы пишете только один файл за раз, то, очевидно, вы можете проверить, успешна ли запись, прежде чем удалять данные, и это не должно быть проблемой. Но я не эксперт и также хотел бы видеть другие мнения. – kakk11

+1

Критика исходит из обсуждения [hackernews] (https://news.ycombinator.com/item?id=10858189) [skynetv2] (https://news.ycombinator.com/item?id=10860496) баллов что «авария может привести к коррупции, но нет высокого риска коррупции» _ – schoetbi

ответ

1

Декларация фронт: Я помочь сохранить h5py, так что я, вероятно, смещение и т.д.

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

Критика

Критика HDF5 следует из ее монолитного дизайна и длительной спецификации.

  • Несмотря на 150-страничный открытый стандарт, единственная реализация C HDF5 - это всего лишь считыватель HDF5.
  • HDF5 не предусматривает использование UTF-8, поэтому клиентские приложения могут ожидать ASCII в большинстве мест.
  • Данные набора данных не могут быть освобождены в файле без генерации копии файла с использованием внешнего инструмента (h5repack).

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

Я выбрал HDF5 для своих исследований из-за имеющихся возможностей, у него была достойная поддержка метаданных (HDF5 по крайней мере позволяет UTF-8, форматы, такие как FITS, даже не имеют этого), поддержка многомерных массивов (которые форматы, такие как протокол Буферы на самом деле не поддерживают), и он поддерживает больше, чем просто 64-битные поплавки (что очень редко).

Я не могу комментировать известные ошибки, но я видел коррупцию (это произошло, когда я писал файл и linux OOM'd мой скрипт). Однако это не должно вызывать беспокойства, если у вас есть правильная практика гигиены данных (как указано в ссылке hackernews), которая в вашем случае будет заключаться не в том, чтобы постоянно писать в один и тот же файл, но для каждого запуска создайте новый файл , Вы также не должны изменять файл, вместо этого любое сокращение данных должно создавать новые файлы, и вы всегда должны делать резервную копию оригиналов.

Наконец, стоит отметить, что существуют альтернативы HDF5, в зависимости от ваших требований: базы данных SQL могут поместиться вам лучше (и sqlite по умолчанию работает с Python, поэтому легко экспериментировать), поскольку мог бы просто csv-файл. Я бы рекомендовал использовать нестандартные/непереносимые форматы (например, pickle и т.п.), поскольку они не являются более надежными, чем HDF5, и сложнее, чем файл csv.