Ищу хранилище данных
Ищу библиотеку (возможно, базу данных, или key-value storage, или HPC data storage?) для хранения данных, со следующими характеристиками:
- Данные представляют собой таблицы с очень большим числом колонок (десятки тысяч). Данные только одного типа (64-бит, с плавающей точкой). Потеря точности при хранении данных не допускается. Объем каждой таблицы может достигать десятков Gb.
- Для колонок, кроме данных и названия, хранятся атрибуты, например, единицы измерения. (Это можно решить сложносочиненным названием колонки, не не хотелось бы.)
- Писатели не редактируют записанныйе данные, а могут только создать таблицу, и добавлять строки. Все писатели знают структуру таблиц, и если таблицу (с одним именем) захотят создать несколько писателей, можно быть уверенным, что структура таблиц - одинакова.
- Один читатель, много писателей. Читатели/писатели - отдельные процессы, в пределах одной машины. (Если возможна работа в пределах одного MPI кластера, или в пределах одной файловой системы - будет большой плюс.)
- Писатели стартуют и завершаются не одновременно (это не обязательно MPI процессы).
- Читателя интересуют не все данные одновременно, а отдельный набор колонок или строк (несколько десятков). Также, иногда, интересует статистика по колонкам (минимальное/максимальное значение, сумма, число NaN-ов).
- Скорость записи имеет приоритет, перед скоростью чтения. (Т.е. GUI-читатель мог бы и подождать, а пистелей тормозить нежелательно.)
На первый взгляд, мне нужна база данных (на базе memory-mapped files, в случае работы на одной машине, и сетевая в случае MPI кластера). Но требование на бешеное число колонок - сбивает: в просмотренных мной движках оно ограничено, максимум тысячами.
Смотрел, также, в сторону HDF5, но там возможно только "один писатель-несколько читателей" (мне нужно наоборот).
Сейчас я использую велосипед, на базе множества бинарных файлов (каждый писатель пишет в ской файл, а читатель их "виртуально" склевает). Но это неудобно: приходится самому реализовать сбор статистики мо колонкам, мониторинг изменения файлов и т.д.
Что-то похоже должно быть в использовано кластерных счетных программах. Смотрел в сторону OpenFOAM, но там, похоже, все слишком завязано на 3d-геометрию.
Какое еще хранилище данных было бы здесь применимо?