Мы пытаемся использовать firebase для передачи пакетов данных в реальном времени (используя firebase C ++ API). Эти всплески могут создавать 60 узлов в секунду в течение нескольких секунд. Если мы выполняем запись, не дожидаясь завершения, в конечном итоге все замедляется, и запись занимает несколько секунд для появления в БД. Если мы выполняем запись только после завершения предыдущей записи, мы получаем намного меньшую скорость записи, чем хотелось бы. Тестирование с использованием RunTransaction и UpdateChildren дает аналогичные результаты. Каждый узел имеет 5 дочерних элементов с короткими строковыми значениями. Эти цифры выглядят типично, или мы делаем что-то не так?
Existing nodes in BD nodes created/second
-------------------- --------------------
0 13.0
10 2.4
25 0.9
50 0.5
100 0.2
Общая версия нашего кода:
firebase::database::DatabaseReference new_node = dbroot_.Child(new_node_key);
firebase::Future<firebase::database::DataSnapshot> future;
future = new_node.RunTransaction([](firebase::database::MutableData* mutableData) {
std::map<std::string, firebase::Variant> children = {
{"field1", firebase::Variant("value1")},
{"field2", firebase::Variant("value2")},
{"field3", firebase::Variant("value3")},
{"field4", firebase::Variant("value4")},
{"field5", firebase::Variant("value5")}
};
mutableData->set_value(children);
return firebase::database::kTransactionResultSuccess;
});
future.OnCompletion(...
// call completion handler
);