Мониторинг Mongo для изменений с помощью Node.js
Я использую Node.js для какой-либо работы над проектом, и я хотел бы отслеживать мою базу данных Mongo (сбор) для изменений, в основном запускайте событие, если что-то добавляется.
Кто-нибудь знает, возможно ли это? Я использую драйверы node-mongodb-native.
Если это не так, мне бы хотелось, чтобы любые доступные указатели нажимали данные с сервера (запустите с node
) в клиентский браузер.
Ответы
Ответ 1
Вопрос в том, что все данные добавляются в вашу базу данных через ваше приложение node.js. Если это так, вы можете использовать класс EventEmitter node.js для запуска события (http://nodejs.org/api.html#eventemitter-14).
Если база данных заполнена каким-либо другим приложением, все становится сложнее. В этом случае вам понадобится нечто вроде триггера базы данных, который AFAIK еще не доступен в MongoDB.
Нажатие событий клиенту (aka Comet) будет возможно после того, как API веб-интерфейсов HTML 5 войдет во все основные браузеры.
Тем временем вы можете только попытаться подражать этому поведению, используя такие методы, как (долгосрочный) опрос AJAX, вечный кадр и т.д., но каждый из них имеет свои недостатки.
Ответ 2
Я бы включил репликацию в вашем mongodb. Есть репликация? базы данных, содержащей список изменений, аналогичный журналу репликации mysql. Вы можете контролировать это.
-daniel
Ответ 3
Почти 3y со времени последнего ответа. Я бы предложил посмотреть:
npm install mubsub
должен попасть туда
Ответ 4
collection.insert({ "key1": val1, "key2": "val2" }, function (err, info) {
если (ERR) { // обрабатываем это } еще { если (информация) {
вы вызываете функцию fireandforget (info); Вот
которые могут писать в журналы или отправлять в SQS или делать какие-то другие порождения ребенка или в процессе. Это может быть даже обратным вызовом, но я думаю, что пожар и забыть могут сделать в большинстве случаев. Я говорю огонь и забываю, потому что полагаю, что вам не нужно держать чтобы вы могли вернуть все, что вам нужно для клиента. И частично ответьте на другой вопрос, вы можете вернуть JSON, как это
db.close();
var myJSON =[];
sys.puts("Cool info stored and did a non blocking fire and forget for some other mongo monitoring stuff/process and sending control back to the browser");
sys.puts(sys.inspect(info));//remove later
myJSON.push({"status":"success"});
myJSON.push({"key1":val1,"key2":val2});//or whatev you want to send
res.writeHead(200, { "Content-Type" : "text/plain" });
res.write(JSON.stringify(myJSON));
res.end();
}
}