Почему только запись данных в базу данных Firebase стоит мне 12 Кб/минуту в загрузках?

# #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 байтам загруженных данных.