Как хранить пользовательские журналы на большом сервере - PullRequest
2 голосов
/ 21 февраля 2012

Из моего опыта это то, что я придумал.

Сейчас я сохраняю классы Users и Statistic в MongoDb, и все работает отлично.

Но как мне сохранить журнал, который генерирует каждый пользователь?

Думал использовать LogBack SiftingAppender и передать информацию журнала
отделить MongoDb Collections. Как и у каждого MongoDb Collection, есть идентификатор пользователя.
Таким образом, мне не нужно создавать расширенный запрос mapreduce, так как журналы аккуратно сложены.

Или используйте SiftingAppender с FileAppender, чтобы у каждого пользователя был отдельный файл журнала.

У меня есть проблема с этим, если MongoDB имеет один миллион коллекций журналов, каждая из которых названа с идентификатором пользователя. (это возможно даже между прочим)

Если все хранится в MongoDb, репликация ведущий-ведомый MongoDb делает это легко, если главный узел умирает.

Как насчет подхода FileAppender. Чувствуется, что там будет много логов администрировать. Можно было бы сохранить их в папках в соответствии с алфавитом. Папка А для пользователя / id с именами / id, начинающимися с A.

Какие есть другие варианты, чтобы эта работа работала?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

В вашем qn из 1M коллекций файл пространства имен по умолчанию для БД составляет 16 МБ, что позволяет около 24000 пространств имен (12000 коллекций + их индексы _id). Подробнее на этом сайте

И вы можете установить максимальный размер файла .ns (пространство имен) в 2 ГБ с опцией --nssize, которая, вероятно, позволит использовать 3072000 пространств имен.

1 голос
/ 21 февраля 2012

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

...