亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何偵聽對MongoDB集合的更改?

如何偵聽對MongoDB集合的更改?

慕田峪7331174 2019-07-01 16:19:56
如何偵聽對MongoDB集合的更改?我正在創建一個以MongoDB為數據存儲區的后臺作業隊列系統。在生成工作人員處理作業之前,我如何“偵聽”對MongoDB集合的插入?我是否需要每隔幾秒鐘輪詢一次,看看上次是否有任何更改,還是我的腳本可以等待插入發生?這是一個PHP項目,我正在做,但請用Ruby或語言不可知論的語言回答。
查看完整描述

3 回答

?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

你所想的聽起來很像觸發器。MongoDB不支持任何觸發器,但是有些人使用一些技巧“滾動”自己的觸發器。這里的關鍵是橡皮筋。

當您在副本集中運行MongoDB時,所有MongoDB操作都會記錄到操作日志(稱為oplog)。oplog基本上只是對數據所做的修改的一個運行列表。復制通過監聽此oplog上的更改來設置功能,然后在本地應用這些更改。

這聽起來熟悉嗎?

我不能在這里詳細描述整個過程,它是幾頁文檔,但是您需要的工具是可用的。

首先,在Oplog上寫幾篇文章-簡要描述 - 的布局local收藏(其中包含oplog)

你也會想利用可裁剪游標..這些將為您提供一種偵聽更改而不是輪詢更改的方法。注意,復制使用可裁剪游標,因此這是一個受支持的特性。


查看完整回答
反對 回復 2019-07-01
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

因為MongoDB3.6將有一個名為ChangeStreams的新通知API,您可以使用它??匆?/trans>這篇博文是一個例子..例如:

cursor = client.my_db.my_collection.changes([
    {'$match': {
        'operationType': {'$in': ['insert', 'replace']}
    }},
    {'$match': {
        'newDocument.n': {'$gte': 1}
    }}])# Loops forever.for change in cursor:
    print(change['newDocument'])


查看完整回答
反對 回復 2019-07-01
  • 3 回答
  • 0 關注
  • 1478 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號