O baza de date cu grafice in memorie pentru date JavaScript.
stare
Utilizat moderat in cel putin un produs real. Se asteapta sa se desfasoare pe scara mai larga si testarea luptei in curand.
Inspiratie
Cea mai directa inspiratie este DataScript, care este la randul sau inspirat de Datomic. La fel ca DataScript, dar spre deosebire de Datomic, aceasta „baza de date” nu ofera durabilitate de niciun fel.
O inspiratie suplimentara vine de la Relay-ul Facebook si Falcor-ul Netflix. Spre deosebire de oricare dintre acestea, acest proiect nu incearca sa abordeze provocarile legate de retea si servicii.
In cele din urma, acest proiect este inspirat de Om Next si de discutiile cu creatorul sau, David Nolen.
fundal
Avem deja un set tot mai mare de API-uri JSON / REST, deci nu putem trece cu usurinta totul la un punct final al serviciului de tip Relay sau Falcor peste noapte.
Frontend-ul nostru este deja scris in JavaScript, utilizand React.js; ClojureScript este un salt prea mare pentru echipa noastra in acest moment.
Avem nevoie de ceva care, mai presus de orice, este simplu, dar care actioneaza ca o piatra de temelie de-a lungul cararii catre nirvana frontend.
Obiective
- Partea client, numai in memorie.
- Sa presupunem ca setul de date este suficient de mic pentru a parcurge portiuni din acesta de multe ori.
- Obiecte JavaScript vechi.
- Turtirea ierarhica a graficului.
- Nu neaparat doar JSON (permite date, etc).
- Incurajeaza utilizarea prin destructurare.
- Toate instrumentele standard de depanare, imprimare etc. ar trebui sa functioneze.
- Model de informatii bazat pe grafice.
- Sprijin puternic pentru relatiile dintre entitati.
- Permiteti navigarea din orice nod ca radacina, in orice directie.
- Nicio actiune ciudata la distanta.
- Fiecare operatiune a bazei de date face o copie defensiva implicita.
- Destul de bun in comparatie cu imuabilitatea reala.
- Este sigur sa reveniti direct la apelantii API-ului magazinului dvs.
Non-obiective
- Fii singur un „magazin” Flux.
- Niciun model de informatii cu scop general nu poate raspunde tuturor nevoilor domeniului.
- Oricum aveti nevoie de un API pentru mutatii.
- Structura datelor persistente
- Nu avem nevoie de anulare sau ceva de genul acesta.
- Beneficiile de depanare sunt frumoase, dar doar sos.
- Serializabilitate
- Trebuie deja sa remodelam datele din API-urile noastre.
- Rezolvati durabilitatea, stocarea in cache si transmiterea la un alt strat.
- Interogare
- Deoarece setul de date este mic, presupuneti ca este OK sa suprasolicitati agresiv.
- Daca aveti nevoie de filtrare, utilizati o structura de date alternativa sau suplimentara in magazinul dvs.
jovencitasxxx ver pelis eroticas
porno español creampie maduras tocandose
me follo a abuela caliente
se folla a su hermana colegialas peludas
potro de bilbao porno interactivo gratis
xxx abuelas porno español de maduras
mamasxxx se corre en el coño de su hija
videos porno gratis caseros españolas follando en la playa
michelle jenner desnuda corridas anales
incestos gays superculos
recopilacion pajas videos porno para mujeres gratis
tetonas en español le pilla pajeandose
pornovideo super maduras
viendo como se follan a mi mujer joven folla por dinero
madresxxx inazuma eleven xxx
chupadas milf camara oculta
pelisxxx monica hoyos porno
presentadoras desnudas viejas cachondas
follando en español incesto en espanol
incesto subtitulado porno casadas españolas
- Notificari de modificare
- Infasurati-va cu API-ul magazinului la nivel de domeniu si implementati-va propriile notificari grosiere pentru entitatile cheie.
API
Este obligatoriu singurul camp furnizat de schema implicita, capac. Este scurt pentru „Local ID” si este denumit astfel pentru a-l diferentia de alti identificatori specifici aplicatiei. Numele recomandat pentru identificatorii specificati de server este „gid”, prescurtarea „Global ID”.
Vedeti mai jos metodele de detaliere a db-ului si schemei.
Consultati fisierul de testare pentru multe exemple concrete.
obtine (capac, optiuni)
Obtine un copac intreg de obiecte inrudite prin capac. Parametrul de optiuni poate fi omis.
Nu trece in cicluri. Daca este specificata optiunea maxDepth, nu va recurge mai mult de atatea nivele.
Valorile campului nul si colectiile goale sunt omise.
Returneaza intotdeauna un obiect, cu cel putin un camp de capac.
pune (entitate)
Pune un copac intreg de obiecte inrudite. Proprietatile sunt imbinate cu obiectele existente cu campuri de capac potrivite. Proprietatile colectiei sunt unite.
Campurile setate la nul sunt sterse din entitati.
cautare (camp, valoare, optiuni)
Obtine un obiect printr-o valoare unica de sir de camp. Vezi schema.
Parametrul de optiuni poate fi omis si este delegat pentru a obtine.
Returneaza nul daca nu exista nicio entitate.
distruge (capac)
Elimina un obiect din baza de date prin capac. Se repeta conform schemei.
elimina (parentLid, field, childLid)
Elimina un obiect asociat dintr-un camp de colectie de referinta.
Functioneaza si pe campuri de referinta care nu sunt colectate. Trata campul ca o colectie cu o dimensiune maxima de una. Echivalent cu setarea campului la nul.
capace ()
Returneaza o serie de toate capacele pentru toate obiectele din baza de date.
Schema
Doar o harta a campurilor numite de configurat.
Identitatea entitatii
Proprietatea capacului este necesara pentru toate operatiunile get / put. Este doar un sir.
Campuri scalare
In mod implicit, campurile pot contine valori scalare. Acestea sunt de obicei siruri si numere, dar este permis orice obiect JavaScript non-nul, nedefinit.
Cautare unica
unic: adevarat
Utilizati pe campurile sir pentru a activa indexarea O (1) pentru a fi utilizate de cautare.
Validare
Proprietatea de validare specifica o functie de validare si transformare a unei valori scalare. Aruncati o exceptie pentru a raporta o eroare de validare sau pentru a returna valoarea transformata.
Erorile de validare sunt inregistrate si campurile nevalide sunt eliminate.
Referinte entitati
ref: „invers”
Specifica campurile care sunt referinte la alte obiecte si numele campului relatiei inverse ale acelor obiecte. Nici unul, nici ambele capete ale relatiei nu pot fi colectii.
De exemplu:
Utilizati valoarea campului {lid: …} pentru obiectele conexe:
Colectii
O valoare camp matrice adauga entitati intr-un set. Comparatorul de sortare este optional. Pentru a elimina entitati, consultati eliminarea.
Pentru colectii fara referinta, pur si simplu puneti o matrice sau alta colectie intr-un camp scalar. Retineti ca campurile scalare efectueaza o inlocuire completa a valorii, nu unirea setata.
Stergere in cascada
distruge: adevarat
Utilizati in campurile ref pentru a apela recursiv distruge.








