Доступ к базе данных Firebase с использованием облачных функций - PullRequest
0 голосов
/ 22 сентября 2018

Я занимаюсь разработкой приложения, которое использует облачные функции Firebase (Node.js), и я хочу, чтобы оно вызывало функцию, когда дочерний элемент создавался в узле a, а затем читал другой узел b,переберите моментальный снимок данных и выберите одного дочернего элемента на основе фильтров:

{
    "a": {
        "id1": {
            "filters": {
                "field1": "value3"
            }
        }
    },
    "b": {
        "child1": {
            "field1": "value1",
            "field2": "value2"
        },
        "child2": {
            "field1": "value3",
            "field2": "value4"
        }
     ...
    }
}

с использованием orderByChild и equalTo недостаточно, потому что у меня более одного фильтра, а также у меня есть фильтр диапазона (возраст междуmin и max), поэтому мне нужно пройтись по узлу "b", чтобы выбрать дочерний элемент.

Мой вопрос: могу ли я сохранить узел "b" в глобальной переменной (массиве) вместо чтения всего узла b каждый раз (вместо этого я буду читать из переменной)?если да, есть ли ограничение на размер этой переменной?и будет ли это быстрее, чем чтение из базы данных каждый раз?

1 Ответ

0 голосов
/ 24 сентября 2018

Облачные функции используют параллелизм и не сохраняют состояние.
Из документации -

Чтобы позволить Google автоматически управлять и масштабировать функции, они должны быть без сохранения состояния - один вызов функции не должен полагаться насостояние памяти, установленное предыдущим вызовом

Однако, для целей оптимизации, существующее состояние может часто использоваться повторно.
Вот подсказка из Документация относительно использования глобальных переменных -

Нет гарантии, что состояние функции Cloud будет сохранено для будущих вызовов.Однако облачные функции часто перезаписывают среду выполнения предыдущего вызова.Если вы объявите переменную в глобальной области видимости, ее значение можно будет повторно использовать в последующих вызовах без необходимости повторного вычисления.

Глобальная переменная будет объявлена ​​(и может быть создана) при холодном запуске.
Однако, глядя на примерную структуру данных, если данные находятся в Firebase и могут изменяться / обновляться, будут дополнительные затраты на поддержание обновления вашей глобальной переменной.

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

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