Запрос иерархической структуры данных в Firebase
У меня есть приложение, которое хранит данные в древовидной структуре, которую я хотел бы сохранить в Firebase.
Каждый узел в дереве выглядит так:
node:
size: // the number of items
data: // array of items
0: // child node 0
1: // child node 1
2: // child node 2
3: // child node 3
Так что, в основном, это четырехугольное дерево. Проблема в том, что если я загружу корневой узел дерева, он будет огромным, потому что firebase создаст снимок, который включает в себя все дерево. Было бы хорошо, если бы я мог сначала прочитать древовидную структуру, но без поля «данные», а затем я мог бы выборочно загрузить поле «данные» в некоторых узлах.
В настоящее время, кажется, нет способа сделать это эффективно. Единственный способ, которым я могу придумать, это запросить узел дерева за узлом:
read /node/size
if (node has children)
for i=0:3
read /node/i/size
Тем не менее, этот подход будет использовать слишком много циклов, и нет никакого способа определить, есть ли у узла дочерние элементы, фактически не загружая дочерние элементы полностью (это можно сделать, если я добавлю поле 'hasChild' в узлы, но это кажется избыточным).
Я искренне предполагаю, что команда разработчиков Firebase может реализовать метод, позволяющий пользователю фильтровать поля в данных, которые возвращаются. Новый метод запроса будет лучшим.
var query = rootRef.filter("*/size");
query.on('value', function(snapshot) {
// snapshot contains only 'size' fields.
});
Аргумент фильтра может быть регулярным выражением, и запрос будет возвращать любой путь, соответствующий регулярному выражению. Я думаю, что без такого метода запроса важно использовать Firebase для хранения иерархической структуры данных. Все методы текущего запроса предполагают, что данные, хранящиеся в firebase, довольно «плоские», чтобы быть эффективными.
Вопрос:
Как мне сохранить древовидную структуру, используя существующую инфраструктуру Firebase, чтобы ее можно было эффективно запрашивать? Мне нужна способность ходить по дереву вниз и вверх и извлекать данные, связанные с конкретными узлами.
Подходит ли firebase для такой структуры данных? Какая альтернативная стратегия больше подходит?
Спасибо