Cum se implementează o conexiune rapidă la bd pentru o căutare live a fluxului de stive în limba rusă

Voi face o căutare live pe site (ca în Google). A găsit o mulțime de materiale pe această temă. Numai din cauza unui moment nu pot continua. Nivelul meu de cunoștințe este destul de mic și nu înțeleg cum să rezolv următoarele probleme:







Aici de pe site, cu ajutorul lui Ajax vine o cerere pentru un script .php, care ar trebui să ia de la baza de date infu. Întrebare - cum pot să mă conectez rapid la baza de date sau să o fac în avans? Explicații, nu am găsit. Înțeleg că cel mai mult timp este cheltuit pentru conectarea la baza de date. Nu este posibil să vă conectați la el după introducerea fiecărui caracter. Totul va fi atârnat. În toate exemplele pe care le-am văzut, am scris doar $ mysqli-> query (.). Șirul de conectare nu era acolo, ca și cum ar exista deja ca atare.

Am încercat să intru în sistemul de "legături permanente", dar n-am înțeles ce a fost. În plus, există restricții privind numărul de conexiuni simultane de acolo.

Doresc foarte mult să vă ajut cu această întrebare. Din cauza lui, întregul proiect stă literalmente.

Despre modul de implementare a finalizării automate este cel mai optim.

Doar căuta în mod clar ineficiente: o intrare de utilizator poate veni la o duzină de cereri, fiecare dintre care ajunge în baza de date, care, teoretic, se poate afla chiar milioane de înregistrări și orice căutare wildcard pentru dragoste de a suferi. acestea ar trebui să fie monitorizate cu atenție, astfel încât acestea să utilizeze de fapt indicii; În plus, frontendul cipat, folosind umerii sub forma numărului care vine pe site, poate pune cu ușurință totul prin trimiterea la cerere a fiecărei litere și înmulțirea traficului de intrare în două până la trei până la cinci ori. În general, modul în care lucrează și, în plus, cu diligență, lucrează rapid, dar nu instantaneu și necesită sprijin; În plus, fiecare actualizare a insertului va înlătura indexul și viteza.

Cum se implementează o conexiune rapidă la bd pentru o căutare live a fluxului de stive în limba rusă

Trie este construită pentru câteva secvențe care trebuie căutate (în acest caz, șiruri sau secvențe de caractere). Un nod din Trie este structura în care sunt stocate valorile. care vor fi discutate mai târziu, și link-uri către nodurile copil sub formă de hartă (matrice asociativă) - fiecare nod copil este stocat cu o cheie entitate din secvență (în acest caz, cheia este un simbol). Sub formă de valori, sunt stocate valori direct căutate sau trimiteri la acestea (de exemplu idem-uri, deși dacă trebuie să urce din nou în baza de date, este absolut ineficientă).







Atunci când Trie este populat, secvențele sunt convertite în ramuri care provin din nodul inițial, iar valoarea corespunzătoare acestei secvențe este scrisă la nodul corespunzător ultimei entități din secvență. Dacă pun în aplicare o căutare de produse și primesc intrarea "lapte", atunci voi construi o ramură de șase noduri din ea (dacă nu există deja în acel moment) și voi scrie produsul la ultimul nod. Dacă după aceea obțin un "lapte", atunci voi construi o ramură de nouă noduri (primele șase dintre ele deja există), iar în "d" voi scrie direct producătorului de lapte.

Cum se implementează o conexiune rapidă la bd pentru o căutare live a fluxului de stive în limba rusă

De ce este necesar? În cazul în care a) toate se încarcă în memorie, b) să păstreze între ele cereri de a nu încărca de fiecare dată (aici cu PHP va avea probleme, da, dar nimeni nu a abrogat demonii) și c) să descarce toate toate informațiile pe care trebuie să se acorde în căutare (care este rareori mai mult de două sau trei linii), apoi căutați primele rezultate N ale unui astfel de copac va fi realizată pentru o milisecundă chiar glanda Khrenovoe. Pentru a căuta pur și simplu se descompun șirul într-o secvență de caractere, găsiți nodul corespunzător, și umple coșul de căutare curentă, apoi nodurile copil, atâta timp cât nodurile copil nu au nici un scop sau coș este plin la partea de sus. În medie, spitalul va fi complexitatea de a găsi undeva șaisprezece caractere care incredibil de incredibil de bine în comparație cu trecere totală întreaga matrice.

Singura problemă cu Trie este că efectuează o căutare prefixă și pentru a găsi subrecursul pe care trebuie să-l hrăniți sufixele unul câte unul (o căutare eficientă fuzzy este greu de imaginat deloc); De asemenea, pentru căutarea eficientă este de obicei necesar să păstrați în apropiere o hartă obișnuită de un fel . în cazul în care pentru a stoca datele în sine, dar numai în Trie id dorit de date. Despre utilizarea memoriei - dacă ne imaginăm că fiecare structură este consumată chiar și un kilobyte de memorie (care este de obicei nejustificată), atunci pentru fiecare o mie de articole vor fi consumate de un megabyte, că, în general, un ban pentru mașini moderne. Și, desigur, nu uitați să se plieze într-o secvență (string), cu avansat de conversie - Trie nu găsiți linia, în cazul în care sa dovedit a fi începutul spațiu suplimentar, dar pentru poika insensibile nevoie pentru a arunca totul si uita-te în același registru. Și, desigur, Trie ar trebui să fie actualizate în mod regulat pe măsură ce actualizăm entitățile într-o bază de date - cel mai bine este de a pune în aplicare atât funcționalitatea o resetare completă la fiecare N minute, și funcționalitate actualizează o entitate separată la adăugarea / eliminarea / apdeyte.

Pe pagina unde va fi efectuată căutarea live, trebuie să creați o conexiune permanentă folosind mysqli:

Pentru ca conexiunea să fie permanentă, trebuie să adăugați prefixul "p:". Știam despre asta.

După aceea, la începutul scriptului php, accesat de ajax, este necesar să scrieți aceeași linie. Dacă conexiunea există deja, atunci nu va avea loc nicio conexiune, dar veți avea deja obiectul de conectare.

O pagină pe care există un formular de căutare live - somepage.php

Cererea Ajax handler - handler.php







Articole similare

Trimiteți-le prietenilor: