Существуют ли какие-либо события «жизненного цикла» для базы данных Firebase Realtime?

При работе с Firebase (базой данных реального времени) я хотел бы знать следующее об объектах в базе данных:

  • Существует ли объект на пути
  • Когда объект создается на пути
  • Когда объект уничтожается на пути

Я могу придумать для этого несколько приемов. Например:

  • Подпишитесь на события on('value') и скачайте весь (часто огромный) объект.
  • Создайте отдельное значение «флага» для каждого объекта в базе данных, который изменяется при создании и уничтожении объектов.
  • Слушайте "child_added", "child_removed" и т. д. В определенном поле внутри объекта, время жизни которого совпадает с временем жизни объекта.

Они выполняют свою работу в определенных обстоятельствах, но являются довольно произвольными и плохо масштабируются.

Есть ли способ достичь вышеизложенного, не загружая весь объект или не создавая кучу «бухгалтерских» записей в базе данных?

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

Doug Stevenson 09.09.2018 21:25

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

Mattia 09.09.2018 21:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
266
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Если предположить, что веб-SDK (с точки зрения браузера), обновления в реальном времени (.on) являются правильным способом получения данных этого типа. Данные не должны быть огромными - они называются «базой данных в реальном времени», так как они не предназначены для хранения больших типов файлов, таких как изображения и видео.

Прислушивайтесь к ценностным событиям

var starCountRef = firebase.database().ref('posts/' + postId + '/starCount');
starCountRef.on('value', function(snapshot) {
  updateStarCount(postElement, snapshot.val());
});

Я ценю ответ, но есть много случаев использования, когда, даже если файл небольшой (например, ~ 20 КБ), вы не хотите перемещать весь файл. Например, представьте общий документ с> 30 пользователями (моя текущая ситуация). В этом сценарии вы не захотите передавать весь документ всем, когда кто-то его немного изменяет.

Mattia 11.09.2018 22:28

возможно, вы могли бы прослушивать более конкретный уровень, то есть дочерний узел этого документа?

Ronnie Royston 11.09.2018 22:36

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

Mattia 11.09.2018 22:46

Другие вопросы по теме