2014-02-10 6 views
1

Мой проект - анализ журнала (разработка нового инструмента для анализа журналов, существующего инструмента, такого как средство просмотра журнала приложений) с использованием программирования C++ Qt. Существуют разные файлы журналов, каждый файл имеет разный формат . В моем проекте сначала извлекают разные поля из файла журнала и второго анализа. Я выбираю NoSQL databse MongoDB для этого приложения. У меня есть сомнения, что он подходит или нет для этого приложения? Я понятия не имею о MOngoDB.In Qt программирует любую проблему с MongoDB?MongoDB подходит для проекта анализа журналов

ответ

1

В вашем случае одним из преимуществ MongoDB и других хранилищ документов (например, простого хранилища ключей) является то, что он позволяет вам иметь структурированные данные в каждом документе журнала, обеспечивая мягкую схему сортировки, то есть схему, которую вы можете эффективно изменить после того, как у вас уже есть данные в вашем магазине, если некоторые новые поля станут доступными с помощью новых форматов входных журналов. Хранилища документов также позволяют эффективно запрашивать данные на основе отдельных полей, например, с помощью СУБД.

Однако ваши данные являются только добавлением (поскольку данные журнала, новые данные не деактивируют старые данные), что имеет последствия для производительности: теоретически, при записи новых данных не следует блокировать чтение существующих данных. Механизмы параллелизма MongoDB не поддерживают это поведение, поскольку блокировка выполняется для каждой базы данных: http://docs.mongodb.org/manual/faq/concurrency/ Теоретически, таким образом, другая система БД с более узким подходом к блокировке может быть более эффективной при обработке одновременных операций чтения и записи.

Полный анализ производительности зависит от намного большего, включая ваш набор данных и запросы, поэтому на практике это может быть неактуальным. В принципе, вам нужно будет проверить

Вопрос (к сожалению без ответов) подойти к этой теме можно найти здесь: Which NoSQL database best for append only audit logging use case?

1

Я думаю, это зависит от того, как вы собираетесь использовать эти журналы, и сколько журналы вы собираетесь хранить. Вы упомянули 2 цели вашей заявки:

  1. выписка и хранение данных журнала.
  2. анализировать журналы.

Для 1-го, все в порядке. По сравнению с традиционной СУБД преимущества MongoDB в хранении данных:

  1. Это быстро. MongoDB по умолчанию использует память для кэша записи (вы можете отключить ее).
  2. Это гибкий. Большинство СУБД обычно становятся медленными, когда достигает 10 миллионов записей. Однако MongoDB имеет возможность распространять данные без особых усилий. Это позволяет хранить и анализировать большое количество журналов.

Говоря об анализе, однако, не является сильной стороной MongoDB. Прочтите обсуждение here. MongoDB имеет возможность распространять данные и использует группу серверов для их анализа, что позволяет анализировать большой объем данных, который невозможно решить СУРБД. Но это не означает, что это будет быстрее. В настоящее время карта MongoDB Map/Reduce имеет свои собственные ограничения. И, конечно же, вы можете добавить дополнительные серверы, чтобы сделать их быстрее. Может быть дорого.

Другая проблема в настоящее время MongoDB не поддерживает полнотекстовый поиск (это new feature в следующей версии 2.6, но не сейчас). Затем, если вы хотите искать по ключевым словам, это будет медленным.

2 вопроса, о которых я говорил выше, основаны на том факте, что вы собираетесь использовать распространенные функции, предоставленные MongoDB. Если вы этого не сделаете, вы можете использовать C++ для перечисления журнала и анализа записей один за другим. В этом случае MongoDB предоставляет некоторые очень хорошие функции: capped collection и TTL index, что может сэкономить вам время на удаление истекших данных. Прочтите документы для получения дополнительной информации.

В заключение, ну, на самом деле нет вывода. То, что вы выбираете, зависит от того, что вы собираетесь делать и как вы собираетесь это делать. Разум предоставляет больше информации, чтобы мы могли идти дальше?

Смежные вопросы