запрос большого текстового файла, содержащего объекты JSON - PullRequest
3 голосов
/ 28 мая 2010

У меня несколько гигабайт текстового файла в формате: {"user_ip": "x.x.x.x", "action_type": "xxx", "action_data": {"some_key": "some_value" ...}, ...}

каждая запись - одна строка.

Сначала я хотел бы легко найти записи для данного ip. Эта часть проста, потому что я могу использовать, например, grep. Однако даже для этого я хотел бы найти лучшее решение, потому что я хотел бы получить ответ как можно быстрее.

Следующая часть более сложная, потому что я хотел бы найти записи из выбранного ip и выбранного типа и с определенным значением some_key в action_data.

Вероятно, мне придется преобразовать этот файл в базу данных SQL (возможно, SQLite, потому что это будет приложение для ПК), но я бы спросил, существуют ли лучшие решения?

Ответы [ 4 ]

1 голос
/ 02 июня 2010

Хочется только отметить, что в Oracle Berkeley DB 11gR2 (выпущенной 1 апреля 2010 г.) появилась поддержка SQL API. Фактически SQL API является API sqlite3 (). Итак, как отметил Джейсон, если вы хотите простоту использования SQLite в сочетании с масштабируемостью и параллелизмом Berkeley DB, теперь вы можете получить обе вещи в одной библиотеке.

С уважением,

Dave

1 голос
/ 28 мая 2010

Вы можете взглянуть на MongoDB , базу данных на основе документов. С его помощью вы по существу сохраняете объекты JSON, которые затем можете индексировать и легко запрашивать эффективным способом. Вы можете найти информацию о том, как сделать запрос в документации: Запрос .

1 голос
/ 28 мая 2010

Да, поместите его в базу данных, любую базу данных. Тогда запросить его будет просто.

0 голосов
/ 28 мая 2010

Если вам нужны реляционные гарантии для баз данных на основе SQL, определенно продолжайте с SQLite .Это позволит выполнять быстрые запросы, объединения, агрегации, сортировки и общий поиск, который вы только можете себе представить.Похоже, это просто большой список действий, выполняемых пользователями на каком-то IP, поэтому вам, вероятно, захочется использовать какую-то последовательность в качестве первичного ключа, поскольку ни один из других атрибутов не выглядит подходящим кандидатом.

С другой стороны, если вам просто нужно выполнять очень простые запросы, например, просматривать записи по IP, искать записи по типу действия и т. Д., Вы можете обратиться к Oracle Berkeley DB .Пока вам не нужны поиски, которые являются слишком причудливыми, Berkeley DB позволит вам хранить терабайты данных и получать к ним доступ с рекордной скоростью.

Так что посмотрите на оба и посмотрите, что лучше для вашего варианта использования.Они хороши для разных вещей, поэтому, возможно, обе они доступны как системы хранения на Android, например.Я думаю, что SQLite, вероятно, победит, но, думая о встроенных локальных системах БД, вы всегда должны по крайней мере учитывать обе эти технологии.

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