Фон
У меня есть много (тысячи!) Файлов данных со стандартным форматом, основанным на полях (например, разделенные табуляцией, одни и те же поля в каждой строке, в каждом файле). Я обсуждаю различные способы сделать эти данные доступными для поиска. (Некоторые параметры включают RDBMS, NoSQL, использование grep / awk и друзей и т. Д.).
Предложение
В частности, одна идея, которая мне нравится, - это каким-то образом «проиндексировать» файлы. Поскольку эти файлы доступны только для чтения (и статические), я представлял себе некоторые постоянные файлы, содержащие двоичные деревья (по одному на каждое проиндексированное поле, как и в других хранилищах данных). Я открыт для идей о том, как это сделать, или слышать, что это просто безумие. В основном, мой любимый поисковик не дал мне никаких предварительных решений для этого.
Я понимаю, что это немного плохо, и решения приветствуются.
Дополнительные детали
- файлы длинные, не широкие
- миллионов строк в час, более 100 файлов в час
- табуляция разделена, не много столбцов (~ 10)
- поля короткие (скажем, <50 символов на поле) </li>
- запросы относятся к полям, комбинациям полей и могут быть историческими
Недостатки различных решений:
(Все они основаны на моих наблюдениях и тестах, но я открыт для исправления)
BDB
- имеет проблемы с масштабированием до больших размеров файлов (по моему опыту, когда они составляют 2 ГБ или около того, производительность может быть ужасной)
- один писатель (если возможно обойти это, я хочу увидеть код!)
- сложно выполнить множественную индексацию, то есть индексацию сразу по разным полям (вы можете сделать это, копируя данные снова и снова).
- , поскольку он хранит только строки, существует шаг сериализации / десериализации
RDBMSes
Победы:
- модель с плоским столом отлично подходит для запросов, индексации
Потери:
- По моему опыту, проблема связана с индексацией. Из того, что я видел (и, пожалуйста, исправьте меня, если я ошибаюсь), проблема с rdbmses, которую я знаю (sqlite, postgres), поддерживает либо пакетную загрузку (затем индексация идет медленно в конце), либо загрузку строк за строкой (что низкий). Может быть, мне нужно больше настройки производительности.