Ищу хранилище данных

Ищу библиотеку (возможно, базу данных, или key-value storage, или HPC data storage?) для хранения данных, со следующими характеристиками:

  1. Данные представляют собой таблицы с очень большим числом колонок (десятки тысяч). Данные только одного типа (64-бит, с плавающей точкой). Потеря точности при хранении данных не допускается. Объем каждой таблицы может достигать десятков Gb.
  2. Для колонок, кроме данных и названия, хранятся атрибуты, например, единицы измерения. (Это можно решить сложносочиненным названием колонки, не не хотелось бы.)
  3. Писатели не редактируют записанныйе данные, а могут только создать таблицу, и добавлять строки. Все писатели знают структуру таблиц, и если таблицу (с одним именем) захотят создать несколько писателей, можно быть уверенным, что структура таблиц - одинакова.
  4. Один читатель, много писателей. Читатели/писатели - отдельные процессы, в пределах одной машины. (Если возможна работа в пределах одного MPI кластера, или в пределах одной файловой системы - будет большой плюс.)
  5. Писатели стартуют и завершаются не одновременно (это не обязательно MPI процессы).
  6. Читателя интересуют не все данные одновременно, а отдельный набор колонок или строк (несколько десятков). Также, иногда, интересует статистика по колонкам (минимальное/максимальное значение, сумма, число NaN-ов).
  7. Скорость записи имеет приоритет, перед скоростью чтения. (Т.е. GUI-читатель мог бы и подождать, а пистелей тормозить нежелательно.)

На первый взгляд, мне нужна база данных (на базе memory-mapped files, в случае работы на одной машине, и сетевая в случае MPI кластера). Но требование на бешеное число колонок - сбивает: в просмотренных мной движках оно ограничено, максимум тысячами.

Смотрел, также, в сторону HDF5, но там возможно только "один писатель-несколько читателей" (мне нужно наоборот).

Сейчас я использую велосипед, на базе множества бинарных файлов (каждый писатель пишет в ской файл, а читатель их "виртуально" склевает). Но это неудобно: приходится самому реализовать сбор статистики мо колонкам, мониторинг изменения файлов и т.д.

Что-то похоже должно быть в использовано кластерных счетных программах. Смотрел в сторону OpenFOAM, но там, похоже, все слишком завязано на 3d-геометрию.

Какое еще хранилище данных было бы здесь применимо?


Ответы (0 шт):