Как обрабатывать большие данные при использовании AngularFirestore? - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть приложение Angular, подключенное к базе данных Firebase. Приложение будет отображать маркер на картах Google, и цель состоит в том, чтобы оно работало как прогрессивное веб-приложение с автономными возможностями.

Я рассчитывал на AngularFirestore для обработки автономной части.

Первый тест прошел хорошо, но проблема в том, что когда я импортировал свои реальные данные, я получил chrome, Paused before potential out-of-memory crash.

Вот мой текущий Сервис, который получает Spots:

import { Injectable } from '@angular/core';
import * as fromSpots from './spots.reducer';
import { Store } from '@ngrx/store';
import { Subscription } from 'rxjs';
import { AngularFirestore } from '@angular/fire/firestore';
import { map, take } from 'rxjs/operators';
import { Spot } from './spot.model';
import { SetSpots } from './spots.actions';

@Injectable({
  providedIn: 'root'
})
export class SpotsService {
  private firebaseSubs: Subscription[] = [];

  constructor(
    private db: AngularFirestore,
    private store: Store<fromSpots.State>
  ) { }

  fetchSpots() {
    this.firebaseSubs.push(
      this.db
      .collection('spots')
      .snapshotChanges()
      .pipe(map(docArray=>{
        return docArray.map(doc=>{
          return {
            id: doc.payload.doc.id,
            ...doc.payload.doc.data()
          } as Spot;
        })
      })) .subscribe((spots: Spot[])=>{
        console.log(spots);
        this.store.dispatch(new SetSpots(spots))
      },
        error =>{
          //TODO
          console.error(error);
        }
      )
    );
  }
}

Я думаю, что во время выполнения карты происходит сбой (потому что я не получаю часть console.error).

Некоторые метрики: ~ 30'000 документов, для общего размера 185 МБ (я знаю, что это много, изначально не думал, что он будет таким большим).

Так что мой вопрос в том, как обрабатывать автономные данные, поступающие из большой базы данных, такой как firebase?

...