Сабж.
Есть некоторое кол-во бинарных файлов, каждый файл содержит некоторое кол-во записей. Каждая запись имеет заголовок длиной 32 байта + тело записи, длины записей разные, в заголовке в частности указана длина записи. Характерная длина записи 1Кб.
Общий объем данных сотни Гб, м.б. и неск Тб. Размер файла - ну какие то Гб (десятки Гб).
Каждую запись можно характеризовать четырьмя числами (float или int32_t). Одна из задач - за разумное время вынуть из файлов набор записей по некоторому критерию (скажем по набору 4рок чисел) и сложить кучкой в другой файл, при этом вынимать надо оптимальным образом (т.е. последовательно достать все нужные записи из одного файла, потом из другого и тд).
Понятно, что каждый раз бегать по всем файлам будет долго, поэтому просится для каждого файла строить индекс - ассоциативный массив, ключем является 4ка чисел, значением позиция записи в файле.
Вопрос - что лучше взять для этого? Индекс лежит на диске (в отдельном файле), в памяти его лучше держать в виде ассциативного массива. Если держать индекс на диске в виде обычного массива, то время загрузки будет довльно значительным, надо бы как то дампить/загружать дерево как есть?
Всякие реляционные СУБД не предлагать!