# #javascript #node.js #firebase #firebase-realtime-database
Вопрос:
Я использую встроенное Firebase Javascript SDK's
устройство интернета вещей, работающее в среде Node-red.
- Мой код состоит только
WRITE
из иDELETE
операций с данными базы данных Firebase RealtimeDatabase. - Когда устройство интернета вещей включается, соединение также устанавливается.
- Но кроме этого я никогда
READ
не получал никаких данных из базы данных Firebase в реальном времени.
Несмотря на то, что у меня нет READ
никаких данных, когда я заглянул сегодня утром в консоль Firebase, я увидел график, который показывал мне постоянные 12kB/minute
загрузки и 1
пиковое подключение. Я подумал, что какой-то бот подключился к моей базе данных. Поэтому я выключил свое устройство интернета вещей и увидел на графике, что также произошло соединение с 1
0
(поэтому я уверен, что только мое устройство интернета вещей было подключено к базе данных).
Кроме того, загрузки перешли с 12kB/minute
0kB/minute
:
- Я добавлю свой код ниже, но я не понимаю , какие данные я загрузил, если я не использовал никаких
on
методов иonChildAdded
onValue
т. Д. - Я довольно новичок в базе данных Firebase, поэтому, если я совершаю какую-то ошибку новичка, просто укажи мне правильное направление.
Почему мое устройство интернета вещей загружает какие-либо данные, когда я использую только методы ЧТЕНИЯ?
Код, который запускается при включении устройства интернета вещей:
//Load data from Global contexta
const app = global.get('app');
const database = global.get('database');
const firestore = global.get('firestore');
const auth = global.get('auth');
const firebaseConfig = {
//my credentials
};
//Set up Firebase
const fb_app = app.initializeApp(firebaseConfig);
const fb_db = database.getDatabase(); //kdybychom měli vice projektu tak app dame do parametru
const fb_ft = firestore.getFirestore();
const fb_auth = auth.getAuth();
//Save the database reference to Global context
global.set('fb_app', fb_app);
global.set('fb_db', fb_db);
global.set('fb_ft', fb_ft);
global.set('fb_auth', fb_auth);
Код, который записывает данные каждые 1 секунду:
const fb = global.get('database');
const fb_db = global.get('fb_db');
var timestamp = Math.round(msg.payload / 1000);
var UID = 'uid1';
var a1 = 0 Math.floor(Math.random() * 100);
var p1 = 50 Math.floor(Math.random() * 20);
var t1 = 20 Math.floor(Math.random() * 20);
//Send data to Firebase
const ref = fb.ref(
fb_db,
'device_realtime/' UID '/' timestamp.toString()
);
fb.set(ref, {
a1: a1,
p1: p1,
t1: t1
});
Код, который удаляет данные старше 60 секунд:
const fb = global.get('database');
const fb_db = global.get('fb_db');
var timestamp1 = Math.round(msg.payload / 1000) - 60;
var timestamp2 = Math.round(msg.payload / 1000) - 61;
var UID = 'uid1';
//Delete old data from firebase
var reference1 = fb.ref(
fb_db,
'device_realtime/' UID '/' timestamp1.toString()
);
var reference2 = fb.ref(
fb_db,
'device_realtime/' UID '/' timestamp2.toString()
);
fb.remove(reference1)
fb.remove(reference2)
Код, который записывает данные каждые 1 минуту:
const fb = global.get('database');
const fb_db = global.get('fb_db');
var timestamp = Math.round(msg.payload / 1000);
var UID = 'uid1';
var a1 = 0 Math.floor(Math.random() * 100);
var p1 = 50 Math.floor(Math.random() * 20);
var t1 = 20 Math.floor(Math.random() * 20);
//Send data to Firebase
const ref = fb.ref(
fb_db,
'device_trends/' UID '/' timestamp.toString()
);
fb.set(ref, {
a1: a1,
p1: p1,
t1: t1
});
Скриншот всего потока:
Комментарии:
1. Возможно, ответы «ОК» на ваши записи составляют 200 байт каждый?
2. Могу ли я как-то отключить
OK
ответы? И если это правда — почему это не будет упомянуто в документах Firebase?3. Вероятно, потому, что это абсолютно ничтожно, когда вы получаете 10 гигабайт в месяц бесплатного выхода в сеть с Firebase, и сверх того, кажется, что это 0,12 доллара за гигабайт. 10 гигабайт дает вам, эм… 50 миллионов таких ответов в месяц.
4. В документах
1GB/month
за пределами10GB/month
бесплатной квоты это стоит 1 доллар, не так ли? Или я что-то упускаю? И да, я не боюсь, что не смогу за это заплатить — я просто любопытен и хочу узнать об этом поведении 😀5. Я бы, вероятно, навел курсор на маленькую (?) рядом с заголовком загрузки — это, скорее всего, скажет вам, что это за цифра на самом деле. Я смотрел только на исходящие цены; Я бы предположил, что «Загруженная база данных в реальном времени — ГБ» (1 доллар/дополнительный ГБ) предназначена для фактических данных результатов, загруженных из запросов…
Ответ №1:
Подробнее об обсуждении в комментариях:
Этот показатель загрузки учитывает весь исходящий трафик из базы данных, включая, например, любые возможные ответы OK на сделанные записи.
Основываясь на приведенных цифрах и некоторой математике салфеток, кажется, что каждая запись соответствует примерно 200 байтам загруженных данных.