Recent am început un proiect personal în care voiam să folosesc o bază de date în cloud. Sunt destul de puține dintre care să alegi. Principalul meu criteriu a fost ca acesta să fie ceva scăzut sau fără costuri.

Până la urmă m-am hotărât Firestore, folosind Plan Scânteie. Acest plan îmi oferă 5 GB spațiu de stocare, cu 50K de citiri și 20K de scrieri pe zi gratuit, ceea ce în acel moment părea o mulțime. Am aflat curând că o mică neglijență poate trece destul de repede peste aceste limite de tranzacție.

Firestore este o bază de date de stocare a documentelor NoSQL. Fiecare bază de date NoSQL este diferită și curba mea de învățare a fost mai abruptă decât se aștepta. După cum știți, cel mai bun profesor este adversitatea și mi-am făcut din greșeli din timp. Unul prea multe, totuși, și aș atinge limita de citire sau scriere a planului, ceea ce uneori s-ar putea întâmpla într-o oră sau două. Atunci a venit timpul să-i spunem o zi.

Lucrurile sunt mai bune acum, așa că ofer aceste lecții învățate:

* Nu * începeți cu planul gratuit

Firestore Cum sa ramaneti in limitele nivelului gratuit al
Fotografie de Frank McKenna / Unsplash

Da, este ușor să depășești limitele planului, dar aceste evenimente te vor obliga să înveți să fii eficient cu citirile și scrierile tale. Veți deveni mai conștienți de costuri pentru a secvenționa mai multe operațiuni de baze de date într-un mod eficient.

Începeți cu un set de date mic

1611493866 960 Firestore Cum sa ramaneti in limitele nivelului gratuit al
Fotografie de Ray Hennessy / Unsplash

Acest lucru poate părea evident, dar până la urmă mic Adică mai puțin de 100 de documente în total. În proiectul meu, am creat mai întâi o colecție cu documente de 10K. Ulterior mi-am dat seama că am făcut o greșeală în datele pe care le-am încărcat, am remediat asta, am găsit altul, am mers să repar asta, dar … TRANSACTION_RESOURCE_LIMIT_EXCEEDED. Welp, gata pentru ziua aceea.

Alocați-vă timp în proiectarea modelului dvs. de date

Lucrări de proiectare
Fotografie de Kelly Sikkema / Unsplash

La fel ca axioma tâmplarului: „Măsurați de două ori, tăiați o dată”, nu doriți să vă ajustați câmpurile documentului JSON și structura pe bucăți. Oh tu voi desigur, dar vă veți economisi câteva tranzacții practicând o mică previziune. Scrieți mai întâi o schemă a documentelor, a câmpurilor și a relațiilor lor. Vizualizarea este cheia fericirii.

Testați și verificați scripturile de încărcare a datelor

1611493866 220 Firestore Cum sa ramaneti in limitele nivelului gratuit al
Fotografie de NASA / Unsplash

Veți avea nevoie de scripturi pentru a completa baza de date din alte surse. Acesta este momentul pentru:

  • verificați ce ați încărcat este ceea ce așteptați
  • gestionați corect cazul fără date pentru câmpuri

Am făcut greșeli în ambele cazuri. În primul rând, când am încărcat niște date de șir într-un câmp de document, nu observasem imediat că acele șiruri aveau deja ghilimele, așa că șirurile stocate aveau ghilimele încorporate. Nu mi s-a părut o problemă atât de gravă, dar a devenit o durere mai târziu când am scris și testat căutări în acel domeniu. Deoarece existau o mulțime de documente, am cheltuit o parte considerabilă din cota mea zilnică de scriere pentru a curăța asta.

În al doilea caz, am descoperit că Firestore nu are niciun mecanism pentru determinarea existența unei proprietăți într-un document (nu este nedefinit Verifica). Acolo este un există test pentru documente, dar nu pentru câmpurile documentului. Cea mai bună practică este de a completa câmpurile de date lipsă cu nul, și apoi faceți teste de echivalență nule într-o clauză unde pentru a găsi documente cu proprietăți „lipsă”.

Ce nu te va învăța un mic set de date

O ședință de absolvenți de facultate la ceremonia de începere.  Dacă utilizați această fotografie, vă rugăm să luați în considerare creditarea https://www.goodfreephotos.com, nu este necesară, dar întotdeauna apreciată.
Fotografie de Fotografii gratuite gratuite / Unsplash

Odată ce ați stabilit problemele pe setul mic de date, este timpul să treceți la unul mai mare. Cu mai multe documente de procesat, lucruri precum eficiența interogărilor, paginarea și solicitările de loturi devin importante.

Citește în bucăți, scrie în bucăți

Bucura-te de masa ta!  Mi-ar plăcea să vă aud comentariile!  Vedeți Instagram @picoftasty mai multă surpriză acolo!  Orice întrebare vă rugăm să nu ezitați să o adresați.
Fotografie de Mae Mu / Unsplash

Operațiuni în lot permite mai multe citiri / scrieri pe baza de date într-o singură tranzacție. Aceasta înseamnă că, dacă orice operație de scriere eșuează, atunci toate scrierile eșuează, iar datele bazei de date își păstrează starea inițială. Fiecare operație dintr-un lot contează pentru cotele totale de citire / scriere, astfel încât nu ajută la cotele de utilizare. De asemenea, atunci când scrieți prin operații de lot, rețineți că există o limită de 500 de operații pe lot.

Aveți grijă atunci când corelați două documente (adică, pentru fiecare document A, există o asociere prin referire la un document B). Nu preluați mai întâi toate, apoi repetați-le prin celălalt. Aceasta este o modalitate bună de a mesteca cota tranzacției la depanare.

Este mai bine să preluați un subset al primei colecții, apoi să iterați prin ea document cu document. Asociați aceste documente cu documentul din a doua colecție prin preluare unu care corespunde criteriilor. Continuați să faceți acest lucru până când a fost preluată întreaga primă colecție. Când depanați, puteți verifica dacă totul pare că funcționează corect și, dacă nu, puteți ucide procesul înainte de a rula o mulțime de tranzacții.

Cum să limitați rezultatele interogării

Semn de oprire imperfect
Fotografie de Will Porada / Unsplash

Limbajul de interogare Firestore nu este la fel de bogat de expresiv ca SQL, dar există încă o serie de moduri de a restricționa interogările dvs., astfel încât să nu preluați prea mult datele. Deși din punct de vedere tehnic nu există o limită de dimensiune pentru un corp de răspuns POST, în termeni practici există.

Unele mecanisme pentru limitarea rezultatelor interogării:

unde și compus unde

Puteți conecta mai multe clauze where împreună, similar cu adăugarea de expresii condiționale la o singură clauză where în SQL.

citiesRef.where('state', '==', 'CO').where('name', '==', 'Denver');

limită și intervale

Puteți limita numărul de documente returnate de o interogare folosind înlănțuirea unei clauze limită la sfârșitul obiectului de interogare.

let biggest = citiesRef.where('population', '>', 2500000)  .orderBy('population').limit(2);

De asemenea, puteți specifica o serie de înregistrări de recuperat prin constrângeri startAt / endAt sau startBefore / endBefore, care vă permite să efectuați paginarea bazată pe cursor.

let docRef = db.collection('cities').doc('SF');
return docRef.get().then(snapshot => {  let startAtSnapshot = db.collection('cities')    .orderBy('population')    .startAt(snapshot);  return startAtSnapshot.limit(10).get();});

în interogare matrice

Puteți căuta potriviri specifice într-o matrice. Acest lucru este bun pentru valorile enumerate.

const usaOrJapan = citiesRef.where('country', 'in', ['USA', 'Japan']);

După cum sa demonstrat, este posibil să lucrați în limitele Planului Spark pe măsură ce aflați despre Firestore. Este gratuit, ceea ce este întotdeauna un loc bun pentru a începe.