Преимущества Pytables/баз данных по сравнению с файловой системой для организации данных?

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

Дата\Ячейка #\Развертка #

где на определенную дату обычно существует несколько папок ячеек, а в этих папках ячеек есть несколько файлов развертки (это относительно простые файлы .csv, в которых параметры записи сохраняются отдельно в файлах .xml). Таким образом, в любой папке Date может быть от нескольких десятков до нескольких сотен файлов для записей за этот день, организованных в нескольких подкаталогах Cell.

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

Это относительно просто сделать с Pandas и Numpy, хотя при удаленном доступе к папкам, сохраненным на лабораторном сервере, возникает определенное «ручное» ощущение. Мы также иногда сталкиваемся с проблемами, потому что нам часто приходится извлекать данные из многих из этих файлов одновременно. Хотя обычно это не проблема, размер файлов может варьироваться от нескольких МБ до 1000 МБ. В последнем случае мы должны предпринять шаги, чтобы не загружать весь файл в память (или, по крайней мере, не загружать несколько файлов одновременно), чтобы избежать проблем с памятью.

В рамках этого редизайна я читал о Pytables для организации данных и для доступа к наборам данных, которые могут быть слишком большими для хранения в памяти. Итак, я думаю, что мои 2 основных вопроса:

  1. Если проблемы с нехваткой памяти несущественны (т. е. эта утилита не будет использоваться часто), есть ли какие-либо существенные преимущества в использовании чего-то вроде Pytables для организации данных по сравнению с простым обслуживанием файловой системы на сервере (или локально). ?
  2. Есть ли причина НЕ идти по маршруту базы данных Pytables? Мы перепроектируем наш сбор данных, а также наше хранилище, и один из вариантов — собирать данные непосредственно в фреймы данных Pandas и сохранять файлы в формате HDF5. В настоящее время я взвешиваю затраты и выгоды от этого по сравнению с текущей системой, когда данные хранятся в файлах csv, а затем загружаются в Pandas для последующего анализа.

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


person dan_g    schedule 03.08.2014    source источник


Ответы (1)


Прежде всего, я большой поклонник Pytables, потому что он помог мне управлять огромными файлами данных (20 ГБ или более на файл), и я думаю, что Pytables использует свои сильные стороны (быстрый доступ, встроенные запросы и т. д.) . Если система также используется для архивирования, возможности сжатия HDF5 сократят требования к пространству и снизят нагрузку на сеть при передаче. Я не думаю, что «воспроизведение» вашей файловой системы внутри файла HDF5 имеет преимущества (рад, что мне сказали, что я ошибаюсь). Я бы предложил гибридный подход: сохранить обычную структуру файловой системы и поместить экспериментальные данные в контейнеры hdf5 со всеми метаданными. Таким образом, вы сохраняете гибкость своей обычной файловой системы (права доступа, копирование и т. д.) и по-прежнему можете использовать возможности pytables, если у вас есть большие файлы, где память является проблемой. Извлечение данных из HDF5 в обычные панды или numpy очень дешево, поэтому ваш «нормальный» рабочий процесс не должен страдать.

person Ben K.    schedule 04.08.2014
comment
Я думаю, что это основа моей загадки здесь - есть ли реальная польза от воспроизведения моей текущей файловой системы в том виде, в каком она существует на нашем сервере с базой данных pytables. Я действительно думаю, что переход на HDF5 и объединение метаданных и необработанных чисел — лучший путь, независимо от того, используем ли мы какой-либо тип базы данных или нет. - person dan_g; 04.08.2014
comment
Я бы сказал нет на это заявление. Возможно, этот вопрос здесь поможет вам принять решение. - person Ben K.; 04.08.2014