2016-04-07 2 views
0

Нам нужно выполнить некоторую операцию в нашей БД Firebase и манипулировать данными после того, как пользователь внесет изменения с помощью мобильного устройства, модифицирующего флаг.Firebase с тысячами прослушивателей событий() событий хорошего дизайна

В настоящее время мы используем on() для прослушивания определенного флага в каждом узле пользователя. Мы запускаем этот прослушиватель с сервера Nodejs, размещенного на Heruku.

Если у нас будет 100 тысяч пользователей, у нас будет 100 тысяч слушателей. Один прослушиватель для каждого пользовательского флага, который ожидает манипулирования пользователем на мобильном устройстве.

Это хороший дизайн с точки зрения Firebase?

В идеале мы можем создать REST API, который вызывается пользователями, а затем на узле JS-сервера мы можем манипулировать данными.

Каков наилучший способ запуска фоновой работы с данными на Firebase на основе ввода пользователем?

Раньше мы использовали Parse, и это было легко достичь с помощью кода Parse Cloud. Из-за этого у Firebase возникают проблемы.

+0

К широту вопроса. Разделите его, задайте здесь вопросы разработчика и, возможно, попробуйте http://programmers.stackexchange.com/ для концептуальных вопросов. –

ответ

2

Если у нас будет 100 тысяч пользователей, у нас будет 100 тысяч слушателей. Один прослушиватель для каждого пользовательского флага, который ожидает манипулирования пользователем на мобильном устройстве.

Это звучит как плохой дизайн данных. Хотя, безусловно, возможно слушать изменения сотен тысяч предметов, он не должен требовать от сотен тысяч слушателей.

Моя догадка (потому что вы не включили фрагмент вашего JSON) является то, что у вас есть структуру, подобную этой:

users 
    $uid 
    name: "user6155746" 
    flag: "no" 

И вы прикрепление слушателя просто flag каждого пользователя с чем-то вроде:

ref.child('users').on('child_added', function(userSnapshot) { 
    userSnapshot.ref().child('flag').on('value', function(flagSnapshot) { 
    console.log('the flag changed to '+flagSnapshot.val()); 
    }); 
}) 

В коде это просто, на практике вам будет трудно управлять «флаговыми слушателями». Когда вы их удалите? Вы сохраняете их список?

Все эти вещи становятся список проще, если вы выделить информацию, которая вас интересует в дереве JSON:

users 
    $uid 
    name: "user6155746" 
userFlags 
    $uid: "no" 

Теперь вы можете слушать на userFlags, чтобы увидеть, если флаг любого пользователя изменено:

ref.child('userFlags').on('child_changed', function(userSnapshot) { 
    console.log('Flag of user '+userSnapshot.key()+' changed to '+userSnapshot.val()); 
}); 

С этим у вас есть один слушатель, контролирующий флаг потенциально сотен тысяч пользователей.

Смежные вопросы