Programmēšana

Veidojiet ģeotelpiskās lietotnes, izmantojot Redis

Lai palielinātu lietojumprogrammu skaitu, atrašanās vietas izsekošana ir būtiska. Sociālā lietojumprogramma var savienot lietotājus, pamatojoties uz atrašanās vietu. Viesmīlības vai ceļojumu programma var izmantot lietotāja atrašanās vietu, lai norādītu uz interesantām apskates vietām vai sniegtu pielāgotus maršrutus. Sensora lietojumprogramma var uzglabāt un analizēt datus, kas ir gan ģeotelpiski, gan laika rindas, lai aktivizētu tādu darbību kā modeļu, nepieļaujamo vērtību un anomāliju noteikšana.

Turklāt, attīstoties ģeotelpiskajām tehnoloģijām, uz atrašanās vietu balstītas lietojumprogrammas no lietojumprogrammu kartēšanas galvenokārt pārvēršas par sarežģītām, visprogresīvākajām programmām, kas apstrādā un analizē miljoniem mobilo lietotāju, sensoru tīklu, IoT ierīču un citu avotu datu punktu. Pasaule ir nepārtrauktā kustībā, un mūsu lietotnes sāk piesaistīties.

Atrašanās vietas dati rada interesantu izaicinājumu izstrādātājam, jo, vaicājot tos vai veicot pozīcijas un attāluma aprēķinus, jāņem vērā garums (x), platums (y) un dažreiz pat augstums (z). Atrašanās vietas datu daudzdimensionālajam raksturam ir nepieciešami optimizēti mehānismi, lai tos apstrādātu - izturēties pret tiem tikai ar veseliem skaitļiem ir ļoti neefektīva. Ja datu bāzē, neatkarīgi no tā, vai tā ir RDBMS vai NoSQL krātuve, trūkst iespēju apstrādāt ģeotelpiskos datus, lietojumprogrammu programmētājiem ir jāveic papildu darbs, apstrādājot datus, vai arī viņiem jāveido loģika, kas datus uzskata par ģeotelpiskiem.

Ģeotelpisko datu apstrāde ir arī reālā laika, lielu datu izaicinājums. Lietojumprogrammām, kas izmanto un pārvalda ģeotelpiskos datus, ar minimālu aizkavēšanos jāapkalpo liels skaits pieprasījumu pēc atrašanās vietas (“Kur tu esi?”), Atrašanās vietas atjauninājumi (“Es esmu šeit”) un dati jāmeklē pēc atrašanās vietas (“Kas vai kas atrodas tuvumā? ”).

Vienkārša lasīšana (atrašanās vietas atrašana) un rakstīšana (atjaunināšanas vieta) ir sarežģīta mērogā. Meklējot citus savienojumus, izaicinājums. Iepriekšminēto prasību izpildes atslēga ir efektīvu datu indeksu uzturēšana. Efektīvs indekss ir tāds, kas var atvieglot ātru meklēšanu un kura uzturēšana nav dārga (atmiņas un skaitļošanas jaudas ziņā).

Redis īpašības un veiktspēja padara to lieliski piemērotu lietojumam, kas balstīts uz atrašanās vietu. Pietrūka tikai vietējā atbalsta ģeogrāfiskās atrašanās vietas datiem. Sākot ar versiju 3.2, Redis ir aprīkots ar iebūvētu ģeotelpisko indeksēšanu. Lietojumprogrammu izstrādātāji, kas paļaujas uz ģeotelpiskajiem datiem, tagad var lūgt Redis to uzglabāt, apstrādāt un analizēt - ar visu sasniegto ātrumu un vienkāršību. gaidīt no Redisa citās lietojumprogrammās.

Īss ievads Redisam

Redis ir atmiņas datu struktūras krājums, ko parasti izmanto kā datu bāzi, kešatmiņu un ziņojumu starpnieku. Redis datu struktūras ir kā Lego veidojošie elementi, kas palīdz izstrādātājiem sasniegt minimālu sarežģītību. Redis arī samazina tīkla piesārņojumu un latentumu, jo operācijas tiek veiktas ārkārtīgi efektīvi atmiņā tieši blakus datu glabāšanas vietai.

Redis datu struktūras ietver Hashes, Sets, Sorted Sets, Lists, Strings, Bitmaps un HyperLogLogs. Tās ir ļoti optimizētas, un katra no tām nodrošina īpašas komandas, kas palīdz izpildīt sarežģītu funkcionalitāti ar ļoti mazu kodu. Šīs datu struktūras padara Redis ārkārtīgi spēcīgu un ļauj uz Redis balstītām lietojumprogrammām apstrādāt ārkārtas operāciju apjomus ar ļoti zemu latentumu.

Šķirotie komplekti ir īpaši nozīmīgi. Unikāli Redis, viņi pievieno dalībniekiem sakārtotu skatu, kas sakārtots pēc rezultātiem. Kārtotie komplekti ir ārkārtīgi izdevīgi, lai apstrādātu tādus datus kā cenas, rangi, lietotāju punkti un laika zīmogi - ļaujot veikt analīzi pāris pakāpes ātrāk, salīdzinot ar parastajiem atslēgu / vērtību vai NoSQL veikaliem.

Ģeotelpiskā indeksēšana tiek ieviesta Redis, izmantojot sakārtotās kopas kā pamata datu struktūru, bet ar atrašanās vietas datu un jaunu API kodēšanu un dekodēšanu. Tas nozīmē, ka visu atrašanās vietu raksturojošo indeksēšanu, meklēšanu un kārtošanu var izkraut no Redis ar ļoti nelielu koda rindiņu un ļoti mazu piepūli, izmantojot iebūvētās komandas, piemēram, GEOADD, ĢEODISTS, GEORADIUS, un GEORADIUSBYMBER.

Apvienojot šo ģeotelpisko atbalstu ar citām Redis iespējām, dažas interesantas funkcionalitātes ieviešana kļūst ārkārtīgi vienkārša. Piemēram, apvienojot jaunos Geo Sets un PubSub, ir gandrīz mazsvarīgi izveidot reāllaika izsekošanas sistēmu, kurā ikviens dalībnieka stāvokļa atjauninājums tiek nosūtīts visām ieinteresētajām pusēm (domājiet par skriešanas vai riteņbraukšanas grupu, kur vēlaties) reāllaikā izsekot grupas dalībnieku atrašanās vietas).

Ģeogrāfiskā kopa

Ģeo kopa ir pamats darbam ar ģeotelpiskajiem datiem Redisā - tā ir datu struktūra, kas ir specializēta ģeotelpisko indeksu pārvaldīšanai. Katru ģeogrāfisko kopu veido viens vai vairāki dalībnieki, un katrs dalībnieks sastāv no unikāla identifikatora un garuma / platuma pāra. Līdzīgi kā visās Redis datu struktūrās, arī Geo kopas tiek apstrādātas un pieprasītas, izmantojot vienkārši lietojamu un vienlaikus ļoti optimālu komandu apakškopu.

Iekšpusē ģeogrāfiskās kopas tiek realizētas ar sakārtotu kopu. Kārtotie komplekti parāda labu laika un laika līdzsvaru, patērējot lineāru RAM daudzumu, vienlaikus nodrošinot logaritmisko skaitļošanas sarežģītību lielākajai daļai darbību.

Indeksa izveide un pievienošana

Tiek izsaukta komanda Redis dalībnieku pievienošanai ģeotelpiskajam indeksam GEOADD. Šo komandu izmanto gan jaunu kopu izveidošanai, gan dalībnieku pievienošanai. Šis piemērs, kas ilustrēts no komandrindas un Node Redis klienta, parāda tā izmantošanu.

Redis komandas piemērs:

GEOADD atrašanās vietas 10.9971645 45.4435245 Romeo

Mezgls Redis piemērs:

redis.geoadd (‘atrašanās vietas’, ‘10 .9971645 ’, ‘45 .4435245’, ‘Romeo’);

Iepriekš minēts Redisam jāizmanto ģeogrāfiskā kopa, ko sauc par atrašanās vietām, lai saglabātu locekļa ar nosaukumu Romeo koordinātas. Ja atrašanās vietu datu struktūra nepastāv, to vispirms izveidos Redis. Jaunais dalībnieks tiks pievienots indeksam tikai tad, ja tā nav komplektā.

Ir arī iespējams indeksam pievienot vairākus locekļus ar vienu zvanu uz GEOADD. Izmantojot vairākas komandas vienā komandā, šī izsaukuma forma samazina datu bāzes un tīkla slodzi.

Redis komandas piemērs:

GEOADD atrašanās vietas 10.9971645 45.4435245 Mercutio 10.9962165 45.4419226 Džuljeta

Mezgls Redis piemērs:

redis.geoadd (‘atrašanās vietas’, ‘10 .9971645 ’, ’45 .4435245’, ‘Mercutio’, ‘10 .9962165 ’, ’45 .4419226’, ‘Džuljeta’);

Indeksa atjaunināšana

Kad biedrs un tā koordinātas ir ierakstītas rādītājā, Redis ļauj atjaunināt šī dalībnieka atrašanās vietu. Geo kopas dalībnieku atjaunināšana tiek veikta, izsaucot to pašu komandu, kas izmantota viņu pievienošanai, proti GEOADD. Kad tiek pieaicināts ar esošajiem dalībniekiem, GEOADD vienkārši atjaunina telpiskos datus, kas ir saistīti ar katru dalībnieku, ar jaunajām vērtībām. Tāpēc, tiklīdz Romeo iziet no mājas, lai sāktu vakara pastaigu, viņa atjaunināto atrašanās vietu var ierakstīt šādi.

Redis komandas piemērs:

GEOADD atrašanās vietas 10.999216 45.4432923 Romeo

Mezgls Redis piemērs:

redis.geoadd (‘atrašanās vietas’, ‘10 .999216 ’, ‘45 .4432923’, ‘Romeo’);

Dalībnieku noņemšana no rādītāja

Pēc pievienošanas indeksam dalībniekus, iespējams, vajadzēs vēlāk no tā izdzēst. Lai atvieglotu dalībnieku dzēšanu no Geo Set, Redis nodrošina ZREM komandu. Lai izdzēstu dalībnieku (vai dalībniekus) no kopas, ZREM tiek izsaukts ar atbilstošo atslēgas vārdu, kam seko dalībnieki, kas no tā tiks izdzēsti.

Redis komandas piemērs:

ZREM atrašanās vietas Mercutio

Mezgls Redis piemērs:

redis.zrem (‘atrašanās vietas’, ‘Mercutio’);

Ģeotelpisko indeksu var pilnībā izdzēst. Tā kā indekss tiek saglabāts kā Redis atslēga, DEL komandu var izmantot, lai to izdzēstu.

Lasot no indeksa

Geo Set indeksa datus var nolasīt vairākos veidos. Pirmkārt, indeksu var izmantot, lai skenētu visus tajā esošos dalībniekus, vai nu vienā lielā partijā, vai vairākos mazākos gabalos. Redis nodrošina divas komandas, kuras var izmantot iterācijai caur visu indeksu: ZRANGE un ZSCAN. Tomēr, tā kā tos var izmantot, lai aptvertu visus indeksētos elementus, šāda veida piekļuve datiem galvenokārt tiek rezervēta bezsaistes, nekritiskām darbībām (piemēram, ETL un ziņošanas procesiem).

Otrais lasīšanas piekļuves veids indeksam ir paredzēts dalībnieku koordinātu iegūšanai, un, lai to panāktu, Redis nodrošina divas komandas. Pirmā no šīm komandām ir GEOPOS, kas atgriež konkrētā locekļa koordinātas ģeogrāfiskajā kopā. Pieņemot, ka Romeo ievēro savu staigāšanu, atbildi par viņa pašreizējo atrašanās vietu sniedz, izpildot sekojošo.

Redis komandas piemērs:

GEOPOS atrašanās vietas Romeo

1)     1) 10.999164

       2) 45.442681 

Mezgls Redis piemērs:

redis.geopos (‘atrašanās vietas’, ‘Romeo’, funkcija (kļūdīties, atbildēt) {

});

Iepriekš sniegtajā piemērā pirmā rindiņa ir vaicājums, savukārt nākamās rindas ir datu bāzes atbilde. Redis nodrošina vēl vienu komandu, ko sauc GEOHASH kas ziņo par locekļu atrašanās vietām. Lai gan abi praktiski veic vienu un to pašu funkciju, atšķirība starp tām ir tā, ka GEOHASH ir kodēts kā standarta ģeohash (sīkāk par geohashes skatiet zemāk).

Vēl viens indeksā saglabāto datu izmantojums ir attālumu aprēķināšana starp dalībniekiem. Jebkuriem diviem Geo Set dalībniekiem ĢEODISTS komanda aprēķinās un atgriezīs attālumu starp tiem.

Meklēt indeksā

Pēdējais un, iespējams, visnoderīgākais lasīšanas piekļuves veids, ko ļauj ģeotelpiskais indekss, ir datu meklēšana pēc to atrašanās vietas. Visizplatītākais šādu meklējumu piemērs ir indeksēto dalībnieku atrašana noteiktā attālumā no noteiktas atrašanās vietas. Šim nolūkam Redis nodrošina GEORADIUS komandu.

Kā norāda nosaukums, GEORADIUS veic meklēšanu lokā, ko piešķir tā centrs un rādiuss, un atdod locekļus, kas tajā iekrīt. Vēl viena Redis komanda, GEORADIUSBYMBER, kalpo tam pašam mērķim, bet vienu no indeksētajiem dalībniekiem pieņem kā apļa centru. Šis ir šādas meklēšanas piemērs.

Redis komandas piemērs:

GEORADIUSBYMEMBER vietas Romeo 100 m

1) “Džuljeta”

Mezgls Redis piemērs:

redis.georadiusbymember (‘atrašanās vietas’, ‘Romeo’, ‘100’, ‘m’, funkcija (kļūdīties, atbildēt) {

});

Meklēšanas komanda atbalsta arī atbilžu šķirošanu no vistuvāk (pēc noklusējuma) vai otrādi, kā arī atgriež katras atbildes atrašanās vietu un attālumu. Redis arī ļauj atbildi saglabāt citā komplektā tālākai apstrādei (piemēram, peidžeru un kopas darbību veikšanai).

Redis par ģeotelpiskajiem datiem

Uz atrašanās vietas balstītas funkcionalitātes ieviešanas vienkāršība Redis nozīmē, ka jūs varat ne tikai viegli tikt galā ar ģeodatu plūdiem, bet arī vienkāršas apstrādes laikā ieviest inteliģenci. Piemēram, iebūvētais rādiusa vaicājums var palīdzēt jums ieviest vienkāršu funkcionalitāti, piemēram, “interesējošie tuvumā esošie vienumi”, nepārblīvējot lietotāju vai lietojumprogrammu ar pārāk daudz izvēles iespējām. Krustošanās darbību iestatīšana var palīdzēt izolēt “interesējošos objektus”, pamatojoties uz vairākiem filtriem, piemēram, ģeogrāfisko atrašanās vietu, lietotāja īpašībām un preferencēm.

Vēl viens efektivitātes ieguvums ir Redis Geo komplektu ieviešanas veids. Ģeogrāfiskās kopas Redis ir vienkārši vēl viena jaudīgo šķiroto kopu versija, ar galveno atšķirību, ka ģeogrāfiskās kopas izmanto ģeohash atrašanās vietas garumu un platumu kā rezultātu (plus lietotājam pārredzama kodēšana un atkodēšana lidojuma laikā). Geohashing, sistēma, kuru izgudroja Gustavo Nīmejers, ļauj arī meklēt ārkārtīgi efektīvi. Katrs laika attālums netiek aprēķināts, salīdzinot visu atrašanās vietas koordinātu kopu; attēlojums nodrošina, ka meklējumus var viegli ierobežot un tādējādi tie kļūst efektīvi gan laikā, gan telpā.

Citas pieejamās bibliotēkas papildina interesantas iespējas, piemēram, aprēķinos iekļauj augstumu. Piemēram, jūs, iespējams, sekojat dronam vai bezpilota lidaparātu grupai dažādos augstumos, pārvadājot sensorus, kas mēra vēja apstākļus vai temperatūras atšķirības kādā vietā. Nepieciešamā komplektu un sakārtoto kopu kombinācija ir sniegta šajā xyzsets API Geo Lua bibliotēkā, kas pieejama vietnē GitHub.

Ceļa garuma aprēķinus, kas parasti nepieciešami, lai pārvietotos starp pieturas punktiem uz noteiktiem galamērķiem, var viegli veikt, izmantojot ģeopathlen API. Reāllaika izsekošana ir viegli ieviesta ar šīs atrašanās vietas atjaunināšanas API.

Ja jūsu lietojumprogramma jebkādā veidā izmanto atrašanās vietas datus, apsveriet iespēju daudz smagā darba izkraut Redis. Ļoti lielām datu kopām varētu būt rentablāk izmantot Redis Flash, kas izmanto RAM un zibatmiņas kombināciju, lai nodrošinātu Redis raksturīgo galējo caurlaidspēju un sekundes sekundes latentumu. Plašāku tehnisko informāciju par Redis izmantošanu ģeotelpiskajiem datiem, tostarp ģeohash meklēšanu un papildu iespējas ar Lua, skatiet Redis for Geospatial Data baltrakstā.

Itamārs Habers ir Redis Labs galvenais izstrādātāju aizstāvis.

Jauno tehnoloģiju forums nodrošina vietu, kur bezprecedenta dziļumā un plašumā izpētīt un pārrunāt topošās uzņēmuma tehnoloģijas. Izvēle ir subjektīva, balstoties uz mūsu izvēlētajām tehnoloģijām, kuras, mūsuprāt, ir svarīgas un interesē lasītājus. nepieņem mārketinga nodrošinājumu publicēšanai un patur tiesības rediģēt visu ieguldīto saturu. Nosūtiet visus jautājumus uz [email protected].

$config[zx-auto] not found$config[zx-overlay] not found