2013-06-23 3 views
0

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

Я собираюсь использовать Mongodb, и я ищу лучшую модель данных. какая модель данных лучше?

1 есть коллекция для каждого веб-сайта и каждый запрос в качестве документа. (1000 коллекции)

или

2- есть коллекция для всех веб-сайтов и каждый веб-сайт в качестве документа и каждый запрос в поддокументу.

ответ

1

Оба раствора должны быть обращены в одном определенном ограничении MongoDB. С первым, что вы сказали каждому веб-сайту коллекцию, ограничение заключается в количестве коллекций, в то время как каждый из них будет иметь запись пространства имен, а размер пространства имен составляет 16 МБ, так что в нем может вместить около 16 000 записей (размер пространства имен может быть увеличено) По-моему, это гораздо лучшее решение, в то время как вы сказали, что ожидается 1000 коллекций, и это можно обработать. (Следует учитывать, что индексы имеют свои собственные записи пространства имен и считаются в 16 000). В этом случае вы можете хранить записи как документы, с которыми вы можете справиться, в основном намного проще, чем со встроенным массивом.

Вмешательство массива ограничение. Это ограничение во втором случае является трудным. Ваши документы не могут превышать 16 МБ. Это размер BSON, и он может хранить довольно много вещей внутри документов, но если вы используете огромные документы, которые различаются по размеру, и меняйте размер во времени, ваше хранилище будет фрагментировано. Причина в том, что будет ясно, если вы посмотрите на это webinar. В основном это то, что вы можете сделать с точки зрения использования хранилища.

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

+0

спасибо. Я буду использовать первое решение (каждый веб-сайт - сборник). когда коллекции достигают ограничения, я могу иметь другую базу данных. и если мои # сайты растут (я думаю, что это занимает год или два), я рассматриваю возможность использования Cassandra и Hadoop. –

1

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

Смежный вопрос - MongoDB performance with growing data structure, в частности, «Перетяжка Factor»

С первым подходом, существует верхний предел количество сайтов, которые вы можете хранить налагаемые максимальным числом коллекций. Вы можете делать вычисления на основе http://docs.mongodb.org/manual/reference/limits/.

Во втором подходе, в то время как коллекция # не имеет значения, но рост базы данных - это то, что вы захотите рассмотреть.

Один из подходов состоит в том, чтобы инициализировать его пустыми данными, поэтому до расширения требуется больше времени.

Например.

{ 
    website: name, 
    responses: [{ 
    time: Jan 1, 2013, 0:1, ... 
    }, 
    { 
    time: Jan 1, 2013, 0:2, ... 
    } 
    ... and so for each minute/interval you expect. 

] 
} 

Недостатком является то, что для инициализации может потребоваться больше времени, но вам придется беспокоиться об этом позже.

В любом случае, это стоимость, которую вам придется заплатить. Вопрос только в том, когда? Теперь? или позже?

Рассмотрим чтение их usecases, в частности - http://docs.mongodb.org/manual/use-cases/hierarchical-aggregation/

+0

Не удалось найти максимальное количество коллекций в документах. –

+0

Я собираюсь выбрать решение 2 –

+1

вам нужно рассчитать максимальную коллекцию, основанную на разных вещах (длина, число и nssize). Используйте раздел пространства имен. Этого достаточно для 1000, но если вы ожидаете большего, вам нужно будет знать, как это сделать. – Nasir