Вход в MongoDB из python - PullRequest
       4

Вход в MongoDB из python

3 голосов
/ 12 ноября 2011

Я хочу записать некоторую информацию в mongodb, используя python.я нашел 2 библиотеки mongodblog и log4mongo для Python.Любая идея, какая из них лучше?или любая другая библиотека, которая лучше этих?

Ответы [ 4 ]

9 голосов
/ 17 ноября 2012

Когда вы используете MongoDB для ведения журнала, проблема заключается в конкуренции за блокировку из-за высокой пропускной способности записи.Хотя вставка MongoDB по умолчанию работает по принципу «забей и забывай», при вызове большого количества insert () возникает серьезный конфликт блокировки записи.Это может повлиять на производительность приложения и помешать читателям объединять / фильтровать сохраненные журналы.

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

Fluentd plus MongoDB

Они буферизируют журналы, а асинхронно записываетданные в другие системы, такие как MongoDB / PostgreSQL / и т. д. Запись выполняется пакетами , так что это намного эффективнее, чем запись непосредственно из приложений.Эта ссылка описывает, как поместить журналы в программу Fluentd из Python.

Вот несколько уроков по MongoDB+ Fluentd.

2 голосов
/ 12 ноября 2011
1 голос
/ 09 февраля 2014

Как уже упоминалось другими пользователями здесь, довольно просто напрямую войти в систему с помощью pymongo:

from pymongo import MongoClient
from pymongo import ASCENDING
import datetime

client = MongoClient()
db = client.my_logs
log_collection = db.log
log_collection.ensure_index([("timestamp", ASCENDING)])  


def log(msg):
    """Log `msg` to MongoDB log"""
    entry = {}
    entry['timestamp'] = datetime.datetime.utcnow()
    entry['msg'] = msg
    log_collection.insert(entry)

log('Log messages like this')

Возможно, вы захотите поэкспериментировать, заменив _id меткой времени, просто помните, что _id должно быть уникальным.

1 голос
/ 27 мая 2013

Нет необходимости использовать библиотеку журналов. Используйте pymongo и сделайте следующее:

  1. создайте базу данных, отличную от базы данных вашего приложения (она может быть на том же компьютере), чтобы избежать проблем с высокой пропускной способностью записи, блокирующих блокировку, которая может понадобиться остальной части вашего приложения.
  2. если необходимо выполнить тонну регистрации, рассмотрите возможность использования ограниченного набора
  3. если вам нужно анализировать журнал по мере его появления, напишите другой скрипт, который использует настраиваемый курсор: http://docs.mongodb.org/manual/tutorial/create-tailable-cursor/

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

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