Использование последовательного файла базы данных / индекса независимо от дистрибутива Unix - PullRequest
0 голосов
/ 24 марта 2010

Что я планирую сделать, так это а) разобрать файл на наличие строк, соответствующих регулярному выражению б) сохранить совпадение в какой-либо базе данных / файле, чтобы мне не приходилось делать разбор снова и снова в) вызвать другую программу, передавая совпадения в качестве аргументов

Хотя я могу представить, как это сделать а) и в), я немного не уверен насчет б). Спички имеют вид

ключ: attribute1: attribute2: attribute3

, где атрибут 2 может быть необязательным. Я думаю о сохранении результатов в простой базе данных, но проблема в том, что база данных должна быть доступна на нескольких платформах Unix для работы программы. Существуют ли (простые) базы данных, которые можно найти на любых платформах Unix? Или я должен использовать какой-то индексно-последовательный файл?

Ответы [ 2 ]

3 голосов
/ 25 марта 2010

Если вам не нужен SQL, посмотрите на семейство инструментов * DBM. Sleepycat (теперь часть Oracle) имеет BerkeleyDB; У GNU есть GDBM. Вы также можете найти NDBM. Будьте осторожны с использованием простого DBM; Ходят слухи (по крайней мере), что он довольно глючный.

Это все системы, которые предоставляют хешированный поиск на основе ключа и произвольно связанных данных, именно то, что вы, похоже, используете.

Обратите внимание, что хешированный поиск отлично подходит для поиска «именно этого ключа», но отвратителен для «всех ключей между этим значением и этим значением». Если вам нужно выполнить последние запросы, внимательно посмотрите на предлагаемые схемы индексации: возможно, в этих пакетах есть то, что вам нужно, или вам лучше посмотреть на что-то еще - механизм индексированного последовательного доступа (ISAM) с B-Tree или аналогичная поддержка. Пакеты * DBM довольно распространены (поскольку для значительного числа систем требуется только поиск точных значений). Например, они используются для таких вещей, как почтовые файлы псевдонимов (где вы действительно делаете точный поиск для расширения определенного псевдонима).

1 голос
/ 24 марта 2010

Я рекомендую sqlite . Это очень портативный и, следовательно, доступен для широкого спектра операционных систем. Он также легкий и имеет очень хорошие привязки языка программирования (C API).

Другим подходом может быть хранилище значений ключей («NoSQL DB»), такое как Redis , которое также переносимо. Вы также можете использовать его на локальной машине, и это будет довольно быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...