Буферщики протокола Google, HDF5, Numpy Shartison (передача данных)

StackOverflow https://stackoverflow.com/questions/4125855

  •  29-09-2019
  •  | 
  •  

Вопрос

Мне нужна помощь в принятии решения. Мне необходимо передать некоторые данные в моем заявлении и должны сделать выбор между этими 3 технологиями. Я немного читал обо всех технологиях (учебники, документирование), но все равно не можете решить ...

Как они сравнивают?

Мне нужна поддержка метаданных (возможность получить файл и прочитать его без каких-либо дополнительных информации / файлов), быструю операции чтения / записи, возможности для хранения динамических данных будут плюс (например, объекты Python)

Вещи, которые я уже знаю:

  • Воплощение довольно быстро, но не может хранить динамические данные (например, объекты Python). (Как насчет метаданных?)
  • HDF5. Очень быстро, поддерживает пользовательские атрибуты, просты в использовании, но не могут хранить объекты Python. Также HDF5 сериализует NUMPY DATA, так, IMHO, Numpy не имеет преимуществ по сравнению с HDF5
  • Буферы протокола Google Поддержка самоподписания тоже довольно быстрая (но поддержка Python бедна в настоящее время, медленно и багги). Может хранить динамические данные. Минусы - самоисполнение не работают от Python и сообщения, которые являются> = 1 МБ, сериализация / десериализация не очень быстро (читайте «медленные»).

PS: данные, которые мне нужно передавать, это «Результат работы» Numpy / Scipy (массивы, массивы сложных структур и т. Д.)

UPD: требуется перекрестный доступ (C / C ++ / Python)

Это было полезно?

Решение

В вашем вопросе, кажется, небольшое противоречие в вашем вопросе - вы хотите иметь возможность хранить объекты Python, но вы также хотите получить доступ C / C ++. Я думаю, что независимо от того, с какого выбора вы пойдете, вам нужно будет преобразовать ваши причудливые структуры данных Python в более статические структуры, такие как массивы.

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

Если вы решили пойти с HDF5, я бы также порекомендовал, чтобы вы использовали H5PY. вместо Pytables. Это связано с тем, что Pytables создает файлы HDF5 с помощью множества дополнительных метаданных Pythonic, что делает чтение данных в C / C ++ немного больше боли, тогда как H5PY не создает ни одного из этих дополнений. Вы можете найти сравнение здесь, И они также дают ссылку на FAQ Pybables для их представления по этому вопросу, чтобы вы могли решить, какие подходит для ваших нужд лучше всего.

Другой формат, который очень похоже на HDF5, Netcdf.. Отказ Это также имеет привязки Python, однако у меня нет опыта использования этого формата, поэтому я не могу на самом деле не прокомментировать, как указывает на то, что он существует и широко используется в научных вычислениях.

Другие советы

Я не знаю о HDF5, но вы могу Храните объекты Python в Numpy Archays, вы просто потеряете все важные функциональные возможности, запретивные операции C-уровня, которые будут выполняться на массиве.

In [17]: x = np.zeros(10, dtype=np.object)
In [18]: x[3] = {'pants', 10}
In [19]: x
Out[19]: array([0, 0, 0, set([10, 'pants']), 0, 0, 0, 0, 0, 0], dtype=object)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top