NodeJS - MongoDB триггеры
Я пытаюсь разработать Log Viewer, используя DerbyJS, Racer и MongoDB. Журналы будут постоянно вставляться в базу данных MongoDB из другого источника, и моя программа просмотра журналов должна иметь возможность автоматически обновлять таблицу журналов в интерфейсе пользователя.
Мне было интересно, есть ли собственный способ прослушивания событий MongoDB, например:
- On update
- On delete
Они будут аналогичны, например, триггерам БД Oracle.
3 ответа
Вы можете слушать такие события, как insert
, update
и другие события данных в mongodb с использованием специальной коллекции с именем oplog
, Вам просто нужно включить репликацию на вашем экземпляре БД, используя mongod --master
или же mongod --replicaSet
,
Oplog - это ограниченная коллекция, которая используется mongodb для реализации репликации. Если вы используете репликацию master/slave, вы найдете коллекцию по имени oplog.$main
, если вы используете наборы реплик, он будет назван oplog.rs
,
Вы можете использовать настраиваемый курсор на oplog, который должен работать.
Оплог, по сути, сам логи. Таким образом, вам может не потребоваться хранить их отдельно для целей регистрации. Однако его размер является фиксированным. Это означает, что, когда его полные, старые данные будут удалены.
Также убедитесь, что вы смотрите в local
база данных, где хранятся оплоги
Вот рабочий пример со страницы wongoskin
skin = require "mongoskin"
db = skin.db "localhost:27017/local"
#//Cursor on oplog (a capped collection) which maintains a history for replication
#//oplog can be used only when replication is enabled
#//Use oplog.rs instead of oplog.$main if you are using replica set
oplog = db.collection "oplog.$main"
cursor = oplog.find({'ns': "icanvc.projects"},{tailable: yes, awaitData: yes})
#//Using cursor.nextObject will be slow
cursor.each (err, log)->
console.error err if err
console.log log if not err
Типичный подход к приложению просмотра журнала заключается в использовании настраиваемого курсора с ограниченным набором записей журнала.
Нет, https://jira.mongodb.org/browse/SERVER-124 это должно быть на стороне приложения.
Я не уверен, есть ли в node.js встроенные триггеры для MongoDB в его драйвере, но, скорее всего, нет, поэтому вам придется кодировать это в себе.