Управление pushtokens в базе данных Firebase в реальном времени - PullRequest
0 голосов
/ 02 февраля 2019

Нашим приложением пользуются люди порядка 1М, и оно не требует какого-либо входа в систему и т. Д. Мы используем firebase sdk с ionic для получения push-токенов для устройств.Вопрос в том, как их эффективно хранить.Если мы используем

const itemsRef = db.list('tokens');
itemsRef.push({ token:"tokenValue" });

Выше будет продолжать добавлять новый узел каждый раз, когда устройство открывает приложение.Моя проблема здесь состоит в том, чтобы избежать добавления того же pushToken снова.Как и в приведенном выше запросе структуры к миллиону узлов, выяснить, существует ли push-токен, может быть огромная проблема с производительностью (я так не уверен).

Какова рекомендация для решения этой проблемы?Я чувствую запрос на pushtoken, если он существует, может быть дорогим.

1 Ответ

0 голосов
/ 02 февраля 2019

Как правило, вы можете хранить много ключей под одним узлом.На самом деле, я не думаю, что есть задокументированный лимит .Хотя я совершенно уверен, что есть теоретическая ценность, при которой он перестает работать, вы вряд ли достигнете его в реальном приложении.Он просто хранит некоторые данные, поэтому ничто не мешает вам хранить миллионы значений здесь.

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

Это только когда вы хотите прочитать/ запросить список ключей, с которыми вы сталкиваетесь в ограничениях.Общий совет здесь заключается в том, что вам не следует запрашивать более нескольких сотен тысяч дочерних узлов, хотя в последние несколько лет это число, похоже, увеличилось.Но запрос (или чтение) миллионов узлов будет проблемой производительности.

Моя задача - не добавлять снова тот же pushToken.

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

const itemsRef = db.list('tokens');
itemsRef.child("tokenvalue").set(true);

Ключи по определению уникальны в своем родительском узле, поэтому использование push-токенов в качестве ключей автоматически гарантирует, что у вас будет только один дочерний узел для каждого push-токена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...