MongoDB dispose de ce que l'on appelle capped collections
y tailable cursors
qui permet à MongoDB d'envoyer des données aux auditeurs.
A capped collection
est essentiellement une collection de taille fixe qui n'autorise que les insertions. Voici à quoi ressemblerait la création d'une telle collection :
db.createCollection("messages", { capped: true, size: 100000000 })
Rubis
coll = db.collection('my_collection')
cursor = Mongo::Cursor.new(coll, :tailable => true)
loop do
if doc = cursor.next_document
puts doc
else
sleep 1
end
end
PHP
$mongo = new Mongo();
$db = $mongo->selectDB('my_db')
$coll = $db->selectCollection('my_collection');
$cursor = $coll->find()->tailable(true);
while (true) {
if ($cursor->hasNext()) {
$doc = $cursor->getNext();
print_r($doc);
} else {
sleep(1);
}
}
Python (par Robert Stewart)
from pymongo import Connection
import time
db = Connection().my_db
coll = db.my_collection
cursor = coll.find(tailable=True)
while cursor.alive:
try:
doc = cursor.next()
print doc
except StopIteration:
time.sleep(1)
Perl (par Max )
use 5.010;
use strict;
use warnings;
use MongoDB;
my $db = MongoDB::Connection->new;
my $coll = $db->my_db->my_collection;
my $cursor = $coll->find->tailable(1);
for (;;)
{
if (defined(my $doc = $cursor->next))
{
say $doc;
}
else
{
sleep 1;
}
}
Ressources complémentaires :
Tutoriel Ruby/Node.js qui vous guide dans la création d'une application qui écoute les insertions dans une collection plafonnée de MongoDB.
Un article traitant plus en détail des curseurs disponibles.
Exemples d'utilisation de curseurs disponibles en PHP, Ruby, Python et Perl.
2 votes
Change Streams a été ajouté à MongoDB 3.6 pour répondre à votre scénario. docs.mongodb.com/manual/changeStreams De plus, si vous utilisez MongoDB Atlas, vous pouvez tirer parti des déclencheurs Stitch qui vous permettent d'exécuter des fonctions en réponse aux insertions/mises à jour/suppressions/etc. docs.mongodb.com/stitch/triggers/overview Il n'est plus nécessaire d'analyser l'oplog.