Мне интересно, может ли кто-нибудь узнать, можно ли получать живые уведомления о любых изменениях в базе данных MongoDB через Reactive Extensions (RX) в С#?
Это означает, что любая сторонняя сторона может редактировать базу данных MongoDB, и служба может отслеживать изменения и мгновенно реагировать на них в режиме реального времени.
Что я пробовал
Я провел много времени, исследуя это как в Google, так и в других местах, и прошел через все пакеты NuGet, которые могут быть связаны. Единственный матч, который я смог найти, включал Java, и был на немецком языке.
Обновление 1
Глядя на хвостовые курсоры, здесь:
http://www.warski.org/blog/2012/11/event-streaming-with-mongodb/
Я не знаю о конкретной реализации Reactive Extensions, однако общий подход (как и в MongoDB 2.6) заключается в создании хвостового курсора на ограниченном наборе - тот же подход, который был сделан в немецком блоге, на который вы ссылались.
С помощью хвостового курсора на плагине репликации вы получите поток изменений во всех базах данных, которые вы можете фильтровать по пространству имен и операции (вставить, удалить, обновить) по мере необходимости.
Хотя oplog обычно создается только для целей репликации, если у вас есть автономный сервер MongoDB, вы также можете запустить его как набор реплик одного узла, единственным преимуществом которого является oplog.
По умолчанию размер oplog на 64-битных системах (кроме OS X) будет составлять 5% свободного места на диске. Вы можете использовать параметр конфигурации oplogSize
чтобы указать другой размер всплывающего окна. Если вы не собираетесь использовать репликацию, возможно, вы уменьшите размер oplog до более подходящего для вашего уведомления об изменении. Если вы не уверены в соответствующем размере, я бы ушел по умолчанию, а затем, следуя инструкциям, изменил размер Oplog, если это необходимо.
Чтобы преобразовать ваш автономный сервер в единую репликацию узлов, вам необходимо:
replSet
конфигурации replSet
с уникальным именем для вашего набора реплик (и, необязательно, oplogSize
если вы хотите, чтобы начальный размер отличался от значения по умолчанию)mongo
, запустите rs.initiate()
чтобы создать конфигурацию набора реплик и предустановить oplog
Observable.Create