Оптимизация чтения документов Firebase

Я использую firebase firestore для своего собственного приложения, я создаю приложение, которое будет отправлять геолокацию пользователя в firestore и генерировать тепловую карту, и приложение будет отправлять местоположение пользователя каждые 5 минут, мои данные выглядят так

Оптимизация чтения документов Firebase

Сейчас у меня около 1000 документов, каждый раз, когда я обновляю приложение, оно пытается получить все координаты для создания тепловой карты.

Проблема, с которой я сталкиваюсь, заключается в том, что когда он генерирует тепловую карту, ему нужно будет прочитать все 1000 документов, что, если у меня есть 5000 координат/документов, и у меня есть 10 пользователей, чтобы использовать его, он достигнет предела чтения документов в firebase бесплатно тариф 50к/день.

Я знаю, что могу заплатить немного денег, чтобы увеличить лимит чтения, но мне просто интересно, столкнется ли кто-нибудь с этим и найдет ли оптимальный способ решить эту проблему. Спасибо!

Разве вас не интересуют только координаты, которые изменились с момента последнего обновления тепловой карты? Кроме того, почему вы принудительно обновляете свои данные ... что, если они статичны в течение нескольких часов? Не лучше ли просто наблюдать за измененными узлами и обновлять данные только при необходимости?

Jay 29.03.2019 18:45

Да, это то, что я хочу сделать, я нашел это сегодня firebase.google.com/docs/firestore/query-data/…, даже думаю, что следует добавить это в облачную функцию, это еще больше уменьшит чтение.

Yi Zhou 30.03.2019 09:08

@YiZhou На самом деле не рекомендуется использовать прослушиватель (например, onSnapshot) в облачной функции, поскольку срок его службы обычно очень короткий.

Renaud Tarnec 31.03.2019 15:24

Я использую это прямо сейчас firebase.google.com/docs/firestore/…

Yi Zhou 31.03.2019 18:25
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
1
4
710
1

Ответы 1

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

Если я правильно сделал математику, основываясь на этой странице документации https://firebase.google.com/docs/firestore/размер хранилища, которая объясняет расчеты размера хранилища, вы можете рассчитать, что документ с 3 массивами с именами lat, long и ts в вашей коллекции coords, в которой хранятся данные для 288 * 31 триплетных значений ( 288 = каждые 5 минут в течение одного дня) будет иметь максимальный размер 857 088 байт, что меньше максимально возможного размера документа (т. е. 1 048 576 байт), как показано здесь: https://firebase.google.com/docs/firestore/quotas

Конечно, вам придется иметь дело с полями массива, но для этого вы можете использовать firebase.firestore.FieldValue.arrayUnion();, см. https://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array

@Yi Zhou Привет, у тебя было время посмотреть на предложенное решение?

Renaud Tarnec 02.04.2019 21:20

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