Elastična pretraga

Elasticsearch Najbolji primjeri iz prakse i povećanje performansi

Elasticsearch Najbolji primjeri iz prakse i povećanje performansi
U ovom ćemo postu pokušati prikupiti najbolje prakse i također stvari koje treba izbjegavati kada radimo s Elasticsearchom i unosimo podatke u njega. Na taj ćemo način znati na što sve moramo paziti prije nego što uopće započnemo raditi s ovom izvrsnom tražilicom.

Elasticsearch Najbolji primjeri iz prakse

Počet ćemo raditi s najboljim praksama koje ćemo slijediti s Elasticsearchom i koje probleme može stvoriti kada izbjegnemo ove točke. Započnimo.

Uvijek definirajte ES preslikavanja

Jedna stvar koju ES sigurno može učiniti jest raditi bez preslikavanja. Dakle, kada započnete s dodavanjem JSON podataka vašem ES indeksu, on će se prevlačiti po poljima podataka i stvoriti prikladno mapiranje. To se čini izravno i jednostavno jer ES sam odabire vrstu podataka. Na temelju vaših podataka možda će vam trebati polje da bude određenog tipa podataka.

Na primjer, pretpostavimo da indeksirate sljedeći dokument:


"id": 1,
"title": "Instalirajte ElasticSearch na Ubuntu",
"link": "https: // linuxhint.com / install-elasticsearch-ubuntu / ",
"date": "25.03.2018."

Na taj će način Elasticsearch označiti polje "datum" kao tip "datum". Ali kada indeksirate sljedeći dokument:


"id": 1,
"title": "Najbolji primjeri iz prakse i izvedbe",
"date": "Na čekanju"

Ovaj put, vrsta polja s datumom promijenjena je i ES će izbaciti pogrešku i neće dopustiti indeksiranje vašeg dokumenta. Da biste olakšali stvari, možete indeksirati nekoliko dokumenata, vidjeti koja polja indeksira ES i dohvatiti mapiranje s ovog URL-a:

GET / index_name / doc_type / _mapping

Na ovaj način nećete morati konstruirati i kompletno mapiranje.

Zastave za proizvodnju

Zove se zadano ime klastera koje ES pokreće elastično pretraživanje. Kada u klasteru imate puno čvorova, dobra je ideja zadržati oznake imenovanja što konzistentnijima, poput:

Klastera.naziv: app_es_production
čvor.ime: app_es_node_001

Osim toga, postavke oporavka za čvorove su također važne. Pretpostavimo da su se neki čvorovi u klasteru ponovno pokrenuli zbog kvara, a neki čvorovi pokreću malo nakon drugih čvorova. Da bi podaci bili konzistentni između svih ovih čvorova, morat ćemo pokrenuti program dosljednosti koji će sve klastere održavati u dosljednom stanju.

gateway.oporavak_nazad_uzlova: 10

Također je korisno kada klasteru unaprijed kažete koliko će čvorova biti prisutno u klasteru i koliko će im vremena trebati oporavak:

gateway.očekivani_čvorovi: 20
gateway.oporavak_nazad: 7m

S ispravnom konfiguracijom, oporavak koji bi trajao satima može potrajati samo minutu i može uštedjeti puno novca bilo kojoj tvrtki.

Osiguranje kapaciteta

Važno je znati koliko će prostora zauzeti vaši podaci i brzinom kojom se ulijevaju u Elasticsearch, jer će to odlučiti o količini RAM-a koja će vam trebati na svakom čvoru klastera i glavnom čvoru.

Naravno, ne postoje posebne smjernice za postizanje potrebnih brojeva, ali možemo poduzeti neke korake koji nam pružaju dobru ideju. Jedan od koraka bit će simulirati slučaj upotrebe. Napravite ES klaster i hranite ga s gotovo jednakom brzinom podataka kao što biste očekivali u svojoj proizvodnoj postavci. Koncept započnite s velikim i smanjite također vam može pomoći da budete dosljedni oko toga koliko je prostora potrebno.

Veliki predlošci

Kada definirate indeksirane velike predloške, uvijek ćete se suočiti s problemima povezanim sa sinkronizacijom predloška na različitim čvorovima klastera. Uvijek imajte na umu da će se predložak morati ponovno definirati kad god se dogodi promjena modela podataka. Mnogo je bolja ideja neka predlošci budu dinamični. Dinamički predlošci automatski ažuriraju mapiranja polja na temelju mapiranja koja smo prethodno definirali i novih polja. Imajte na umu da ne postoji zamjena za držanje predložaka što je moguće manjim.

2Upotreba mlockall-a na Ubuntu poslužiteljima

Linux koristi postupak zamjene kada mu treba memorija za nove stranice. Zamjena stvari usporava jer su diskovi sporiji od memorije. The mlockall svojstvo u ES konfiguraciji govori ES-u da ne mijenja svoje stranice iz memorije čak i ako za sada nisu potrebne. Ovo se svojstvo može postaviti u YAML datoteku:

bootstrap.mlockall: istina

U ES v5.x + inačica, ovo je svojstvo promijenjeno u:

bootstrap.lock_lock: istina

Ako koristite ovo svojstvo, samo osigurajte da ES-u pružite dovoljno veliku hrpu memorije pomoću -DXmx opcija ili ES_HEAP_SIZE.

Minimizirajte ažuriranja mapiranja

Na izvedbu klastera malo utječe svaki put kada na svom ES klasteru podnesete zahtjeve za ažuriranje mapiranja. Ako to ne možete kontrolirati i dalje želite ažurirati preslikavanja, možete koristiti svojstvo u ES YAML konfiguracijskoj datoteci:

indeksi.Klastera.send_refresh_mapping: netačno

Kada je zahtjev za ažuriranje modela u redu na čekanju za glavni čvor i on pošalje podatke sa starim mapiranjem na čvorove, on također mora poslati zahtjev za ažuriranjem kasnije svim čvorovima. To može usporiti stvari. Kada gornje svojstvo postavimo na false, ovo glavno misli da je izvršeno ažuriranje mapiranja i da neće poslati zahtjev za ažuriranjem čvorovima. Imajte na umu da je ovo korisno samo ako redovito unosite puno izmjena u svoje mapiranje.

Optimizirano spremište niti

ES čvorovi imaju mnoštvo spremišta niti kako bi se poboljšalo upravljanje nitima unutar čvora. No, postoje ograničenja o tome koliko podataka svaka nit može voditi računa. Da bismo pratili ovu vrijednost, možemo koristiti ES svojstvo:

navojnica.rasuti.veličina_reda: 2000

To ES obavještava o broju zahtjeva u krhotini koji se mogu staviti u red za izvršenje u čvoru kada ne postoji nit za obradu zahtjeva. Ako broj zadataka prijeđe ovu vrijednost, dobit ćete RemoteTransportException. Što je veća ova vrijednost, veća količina prostora za hrpu bit će potrebna na vašem čvornom stroju, a potrošit će se i JVM hrpa. Također, trebali biste držati svoj kod spreman u slučaju da se izuzetak izbaci.

Zaključak

U ovoj smo lekciji pogledali kako možemo poboljšati izvedbu Elasticsearch-a izbjegavajući uobičajene i ne tako česte pogreške koje ljudi čine. Pročitajte više članaka Elasticsearch o LinuxHintu.

Vodič za bitku za Wesnoth
Bitka za Wesnoth jedna je od najpopularnijih strateških igara otvorenog koda koje trenutno možete igrati. Ne samo da se ova igra razvija već jako dugo...
0 A.D. Vodič
Od mnogih strateških igara tamo, 0 A.D. uspijeva se istaknuti kao sveobuhvatan naslov i vrlo duboka, taktička igra unatoč tome što je otvoren izvor. R...
Vodič za Unity3D
Uvod u Unity 3D Unity 3D moćan je motor za razvoj igara. Cross platforma je to što vam omogućuje stvaranje igara za mobilne uređaje, web, stolne račun...