Большая часть зависит от вашего варианта использования.
У меня гораздо больше опыта работы с различными методами на основе HDF5, чем с традиционными реляционными базами данных, поэтому я не могу комментировать слишком много библиотек SQLite для python ...
По крайней мере, какЧто касается h5py
против pyTables
, они оба предлагают очень простой доступ через массивные массивы, но они ориентированы на очень разные варианты использования.
Если у вас есть n-мерные данные, к которым вы хотите быстро получить доступпроизвольный основанный на индексе фрагмент, тогда гораздо проще использовать h5py
.Если у вас есть данные, которые больше похожи на таблицы, и вы хотите запросить их, тогда pyTables
- гораздо лучший вариант.
h5py
- относительно «ванильная» оболочка для библиотек HDF5 по сравнению с pyTables
.Это очень хорошо, если вы собираетесь регулярно получать доступ к файлу HDF с другого языка (pyTables
добавляет дополнительные метаданные).h5py
может сделать лот , но для некоторых случаев использования (например, что делает pyTables
) вам придется потратить больше времени на настройку вещей.
pyTables
имеет некоторые действительно приятных функций.Однако, если ваши данные не очень похожи на таблицу, то это, вероятно, не лучший вариант.
Чтобы привести более конкретный пример, я много работаю с довольно большими (десятки ГБ) 3 и 4размерные массивы данных.Это однородные массивы чисел с плавающей точкой, целых, uint8 и т. Д. Я обычно хочу получить доступ к небольшому подмножеству всего набора данных.h5py
делает это очень простым и делает довольно хорошую работу по автоматическому угадыванию разумного размера фрагмента.Захват произвольного фрагмента или фрагмента с диска намного, намного быстрее, чем для простого файла memmapped.(Акцент на произвольном ... Очевидно, что если вы хотите получить весь слайс "X", то C-упорядоченный массив memmapped невозможно превзойти, так как все данные в слайсе "X" смежны на диске.)
В качестве встречного примера моя жена собирает данные с широкого спектра датчиков, которые производят выборку с интервалами от минуты до секунды в течение нескольких лет.Она должна хранить и выполнять произвольные запросы (и относительно простые вычисления) к своим данным.pyTables
делает этот вариант использования очень простым и быстрым, и все же имеет некоторые преимущества по сравнению с традиционными реляционными базами данных.(В частности, с точки зрения использования диска и скорости, с которой большой (на основе индекса) блок данных может быть считан в память)