MongoDb: Как создать систему уведомлений в режиме реального времени на основе подписки

0

проблема

Я создаю систему на основе подписки, которая предоставляет канал уведомлений на основе предоставленного запроса, когда результаты запроса изменяются из-за документов, измененных с помощью добавления/удаления/обновления. Например,

  1. подписываться

    void mySystem.subscribe(collection, QUERY("name" << "abc"), callBack);
    

    где обратный вызов определяется как:

    void Client::Callback(ChangedDocuments, Operation)
    {
        // handle the change
    }
    
  2. если кто-то mySystem.Add(collection, documentsNameIsAbc), будет вызван обратный вызов, чтобы подписывающие клиенты уведомлялись об изменениях.

Это нужно сделать как можно быстрее, поэтому что-то вроде сканирования журнала повтора не будет работать для меня.

Возможности

a) Наивный способ будет помнить результаты всех запросов, после каждого добавления/удаления/обновления, запускать все запросы снова, а затем отправлять diffs как уведомление.

b) Немного более разумный способ - взять изменяющийся документ (перед любой операцией db), проверить, соответствует ли он любому запросу. Если да, отправьте уведомление. Тем не менее, звучит как такой "матч", не поддерживается.

c) Использовать запрос в формате regex, сериализовать изменяющийся документ в формате json и выполнить регулярное выражение.

Я использую C++, хотя проблема звучит на языке нейтрально.

Любые входы приветствуются.

Теги:
push-notification

1 ответ

0

Если вы язык-агностик, вы можете взглянуть на структуру . Он реализует хвостовое оперение, и по совпадению вчера была выпущена новая версия, которая фокусируется именно на этом:

Meteor 0.7.1: поддержка oplog для сложных запросов/масштабирования Meteor с использованием хвостовика oplog

  • 0
    Спасибо Дэн. Взглянул на видео, звучит довольно круто. Копать дальше.
  • 0
    «Внедрение Meteor DDP обрабатывает все остальное. Интеллектуально опрашивает вашу базу данных, чтобы получить изменения и передать их клиенту». Похоже, они приняли) подход. от: meteor.com/#blog/2012/03/21/introduction-ddp

Ещё вопросы

Сообщество Overcoder
Наверх
Меню