Filme porno

Categorii

Advertising

Cum am construit rearanjarea Pinilor

Samuel Hsiung si Alice Chang | Ingineri Pinterest, produse emergente

Ascultarea feedback-ului utilizatorilor este esentiala pentru crearea unui produs Pinners isi place si foloseste pentru a descoperi si a salva idei in fiecare zi. Adesea, solicitarile lor de caracteristici prezinta provocari tehnice interesante pentru inginerii nostri. De exemplu, astazi am lansat posibilitatea de a reordona Pin-urile pe placi, una dintre cele mai frecvente caracteristici solicitate. Pe masura ce ne-am propus sa construim serviciul sau de backend, am abordat noile probleme de scalare a bazelor de date pe care le vom acoperi in acest post.

Array

Rearanjarea pinilor pe iOS

Cerinte

In faza de planificare, stabilim urmatoarele cerinte pentru serviciul de backend de reordonare:

  • Pinii pot fi glisati intre alti doi Pin pe aceeasi placa
  • Reordonarea pinului se poate intampla in aceeasi placa in mod repetat intr-un interval de cateva secunde
  • Solutia ar trebui sa se extinda pe placi cu mai multi pini

Pentru a indeplini prima cerinta, am creat urmatoarea interfata pentru API-ul de reordonare:

reorder_board_pin (board_id, pin_id, before_pin_id, after_pin_id)

pin_id corespunde Pinului care este glisat, iar before_pin_id si after_pin_id corespund vecinilor pozitiei sale scazute.

Stocare a datelor

Relatia dintre placi si pinii lor copii este stocata intr-un tabel MySQL fragmentat. Inainte de a fi implementata reordonarea pinilor, pinii au fost aranjati prin recenta printr-un sortiment descendent pe coloana de ordine a tabelului.

Secventa fiecarui Pin este initializata la marcajul temporal al epocii in secunde corespunzatoare momentului de creatie.

Explorari

O abordare naiva a reordonarii pe care am considerat-o pe scurt a fost ajustarea valorilor secventei fiecarui Pin consecutiv intre pozitia initiala si finala a Pinului reordonat. Diagrama de mai jos prezinta pasii pentru aceasta abordare, in care fiecare cerc reprezinta un Pin, iar numarul reprezinta secventa sa.

Aceasta solutie necesita cateva interogari SQL care arata astfel:

Un dezavantaj al acestei abordari este ca unii Pinners au placi cu zeci de milioane de pini. Acest lucru ar putea duce la multe actualizari de randuri pentru o singura reordonare Pin daca distanta de tragere este departe (asa este cazul in care API-ul de reordonare este apelat manual), punand astfel o incarcare greoaie in baza de date.

Bisectia decalajului

Pentru a reduce numarul de scrieri, am luat in considerare divizarea decalajelor intre secventele vecine ale Pinului scazut. In figura de mai jos, Pinul reordonat preia valoarea punctului de mijloc 9 al vecinilor sai 8 si 10:

Cu bisectia spatiala, trebuie sa actualizam un singur rand in tabel dupa fiecare reordonare:

Cu toate acestea, dupa cum probabil ati observat rapid, secventele se vor ciocni dupa suficiente reordonari, deoarece secventa bazata pe un numar intreg nu va avea suficienta rezolutie pentru a capta golurile. Luati urmatorul exemplu in care Pinul cu secventa 7 se ciocneste cu secventa vecinului sau drept 9 dupa ce punctul mediu este rotunjit in jos la cel mai apropiat numar intreg:

In cazul nostru, tipul de coloana de secventa este INT (11), ceea ce inseamna ca secventele sunt reprezentate ca numere intregi de zece cifre de 4 octeti, ceea ce inseamna ca Pinii salvati la opt secunde distanta ar putea suporta doar jurnal (8) = 3 * bisectii inainte de o coliziune.

Imbunatatiri

Pentru a solutiona acest lucru, am crescut rezolutia marcajelor de timp utilizate pentru initializarea valorilor secventei de la secunde la milisecunde. De asemenea, am marit cifrele coloanei secventei de la zece la 38 (valoarea maxima permisa de tabelele noastre de rezerva Hive).

Pentru a utiliza pe deplin dimensiunea coloanei, am completat marcajul de timp de 13 cifre dat de generatorul de timestamp de epoca Java System.currentTimeMillis () cu douazeci si cinci de zerouri finale . Iata un exemplu de secventa inainte si dupa conversie:

Inainte de:

Dupa:

Cu noul tip, putem suporta acum pana la log (10²⁵) ≈ 84 * bisectii inainte ca doua secvente sa se ciocneasca, presupunand un scenariu cel mai rau caz in care Pinii sunt salvati la o milisecunda.

Legand capetele libere

Desi cresterea rezolutiei secventei ne permite sa sustinem cele mai multe cazuri de reordonare a utilizarii facand improbabile coliziunile secventei, nu garanteaza ca acestea nu se vor intampla. Pentru a ne asigura ca golurile de secventa au intotdeauna spatiu la dispozitia lor, am creat o lucrare offline care a fost stinsa atunci cand golul de secventa dintre oricare doi pini vecini scade vreodata sub un prag ales dupa o reordonare. Lucrarea redeschide secventele pinilor vecini pana cand fiecare spatiu este garantat pentru a sustine cel putin un numar configurat de bisectii.

Multumiri: Reordonarea pinului a fost construita in colaborare cu Brian Donohue, Eric Sung, Ernie Souhrada, Kapil Bajaj, Kelei Xu, Purajit Malalur si Steven Ramkumar.

* logaritmii sunt baza 2

Video Description:

Samuel Hsiung si Alice Chang | Ingineri Pinterest, produse emergenteAscultarea feedback-ului utilizatorilor este esentiala pentru crearea unui produs Pinners isi place si foloseste pentru a descoperi si a salva idei in fiecare zi. Adesea, solicitarile lor de caracteristici prezinta provocari tehnice interesante pentru inginerii nostri. De exemplu, astazi am lansat posibilitatea de a reordona Pin-urile pe placi, una dintre cele mai frecvente caracteristici solicitate. Pe masura ce ne-am propus sa construim serviciul sau de backend, am abordat noile probleme de scalare a bazelor de date pe care le vom acoperi in acest post. Array Rearanjarea pinilor pe iOSCerinteIn faza de planificare, stabilim urmatoarele cerinte pentru serviciul de backend de reordonare:Pinii pot fi glisati intre alti doi Pin pe aceeasi placaReordonarea pinului se poate intampla in aceeasi placa in mod repetat intr-un interval de cateva secundeSolutia ar trebui sa se extinda pe placi cu mai multi piniPentru a indeplini prima cerinta, am creat urmatoarea interfata pentru API-ul de reordonare:reorder_board_pin (board_id, pin_id, before_pin_id, after_pin_id)pin_id corespunde Pinului care este glisat, iar before_pin_id si after_pin_id corespund vecinilor pozitiei sale scazute.Stocare a datelorRelatia dintre placi si pinii lor copii este stocata intr-un tabel MySQL fragmentat. Inainte de a fi implementata reordonarea pinilor, pinii au fost aranjati prin recenta printr-un sortiment descendent pe coloana de ordine a tabelului.Secventa fiecarui Pin este initializata la marcajul temporal al epocii in secunde corespunzatoare momentului de creatie. porno francais gay www.eichenbaum.com papa porno integraluniversity.ac.in porno gay français leedsdesign.com discord porno covers.asktlc.com porno gay viol www.tiernan.biz video porno gay francais www.searchpoint.net film porno zoophile java-jumpstart.biz porno japonais non censure craneco.us porno ancien leewaytransportation.com blog porno beautifulword.org porno webchoc sofortindenurlaub.de magazine porno vcd1.com porno ejac interne baystreetdirect.net porno perfect girls www.hhnmag.com thai porno e-mail.co.de nabilla porno kino-film.tv lupo porno www.byrank.org perfect porno tracewap.com porno vor thalesfund.com porno gabon thepratt.net ExplorariO abordare naiva a reordonarii pe care am considerat-o pe scurt a fost ajustarea valorilor secventei fiecarui Pin consecutiv intre pozitia initiala si finala a Pinului reordonat. Diagrama de mai jos prezinta pasii pentru aceasta abordare, in care fiecare cerc reprezinta un Pin, iar numarul reprezinta secventa sa.Aceasta solutie necesita cateva interogari SQL care arata astfel:Un dezavantaj al acestei abordari este ca unii Pinners au placi cu zeci de milioane de pini. Acest lucru ar putea duce la multe actualizari de randuri pentru o singura reordonare Pin daca distanta de tragere este departe (asa este cazul in care API-ul de reordonare este apelat manual), punand astfel o incarcare greoaie in baza de date.Bisectia decalajuluiPentru a reduce numarul de scrieri, am luat in considerare divizarea decalajelor intre secventele vecine ale Pinului scazut. In figura de mai jos, Pinul reordonat preia valoarea punctului de mijloc 9 al vecinilor sai 8 si 10:Cu bisectia spatiala, trebuie sa actualizam un singur rand in tabel dupa fiecare reordonare:Cu toate acestea, dupa cum probabil ati observat rapid, secventele se vor ciocni dupa suficiente reordonari, deoarece secventa bazata pe un numar intreg nu va avea suficienta rezolutie pentru a capta golurile. Luati urmatorul exemplu in care Pinul cu secventa 7 se ciocneste cu secventa vecinului sau drept 9 dupa ce punctul mediu este rotunjit in jos la cel mai apropiat numar intreg:In cazul nostru, tipul de coloana de secventa este INT (11), ceea ce inseamna ca secventele sunt reprezentate ca numere intregi de zece cifre de 4 octeti, ceea ce inseamna ca Pinii salvati la opt secunde distanta ar putea suporta doar jurnal (8) = 3 * bisectii inainte de o coliziune.ImbunatatiriPentru a solutiona acest lucru, am crescut rezolutia marcajelor de timp utilizate pentru initializarea valorilor secventei de la secunde la milisecunde. De asemenea, am marit cifrele coloanei secventei de la zece la 38 (valoarea maxima permisa de tabelele noastre de rezerva Hive).Pentru a utiliza pe deplin dimensiunea coloanei, am completat marcajul de timp de 13 cifre dat de generatorul de timestamp de epoca Java System.currentTimeMillis () cu douazeci si cinci de zerouri finale . Iata un exemplu de secventa inainte si dupa conversie:Inainte de:Dupa:Cu noul tip, putem suporta acum pana la log (10²⁵) ≈ 84 * bisectii inainte ca doua secvente sa se ciocneasca, presupunand un scenariu cel mai rau caz in care Pinii sunt salvati la o milisecunda.Legand capetele libereDesi cresterea rezolutiei secventei ne permite sa sustinem cele mai multe cazuri de reordonare a utilizarii facand improbabile coliziunile secventei, nu garanteaza ca acestea nu se vor intampla. Pentru a ne asigura ca golurile de secventa au intotdeauna spatiu la dispozitia lor, am creat o lucrare offline care a fost stinsa atunci cand golul de secventa dintre oricare doi pini vecini scade vreodata sub un prag ales dupa o reordonare. Lucrarea redeschide secventele pinilor vecini pana cand fiecare spatiu este garantat pentru a sustine cel putin un numar configurat de bisectii.Multumiri: Reordonarea pinului a fost construita in colaborare cu Brian Donohue, Eric Sung, Ernie Souhrada, Kapil Bajaj, Kelei Xu, Purajit Malalur si Steven Ramkumar.* logaritmii sunt baza 2

Categorie:
Taguri:
Data adaugarii: