# Poe asukohaandmed ![Selle õppetunni visandmärkmete ülevaade](../../../../../translated_images/et/lesson-12.ca7f53039712a3ec.webp) > Visandmärkmed: [Nitya Narasimhan](https://github.com/nitya). Klõpsake pildil, et näha suuremat versiooni. ## Eelloengu viktoriin [Eelloengu viktoriin](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/23) ## Sissejuhatus Eelmises õppetunnis õppisite, kuidas kasutada GPS-andurit asukohaandmete kogumiseks. Selleks, et visualiseerida toiduga koormatud veoauto asukohta ja selle teekonda, tuleb andmed saata pilves asuvasse IoT-teenusesse ja seejärel kusagil salvestada. Selles õppetunnis õpite erinevaid viise IoT-andmete salvestamiseks ning kuidas salvestada andmeid oma IoT-teenusest serverivaba koodi abil. Selles õppetunnis käsitleme: * [Struktureeritud ja struktureerimata andmed](../../../../../3-transport/lessons/2-store-location-data) * [GPS-andmete saatmine IoT Hubi](../../../../../3-transport/lessons/2-store-location-data) * [Kuumad, soojad ja külmad teed](../../../../../3-transport/lessons/2-store-location-data) * [GPS-sündmuste käsitlemine serverivaba koodi abil](../../../../../3-transport/lessons/2-store-location-data) * [Azure Storage Accounts](../../../../../3-transport/lessons/2-store-location-data) * [Serverivaba koodi ühendamine salvestusega](../../../../../3-transport/lessons/2-store-location-data) ## Struktureeritud ja struktureerimata andmed Arvutisüsteemid töötlevad andmeid, mis võivad olla väga erineva kuju ja suurusega. Need võivad ulatuda üksikutest numbritest suurte tekstimahudeni, videote ja piltideni ning IoT-andmeteni. Andmed jagunevad tavaliselt kahte kategooriasse - *struktureeritud* andmed ja *struktureerimata* andmed. * **Struktureeritud andmed** on hästi määratletud, jäiga struktuuriga andmed, mis tavaliselt vastavad tabelitele ja nendevahelistele seostele. Näiteks inimese andmed, sealhulgas nimi, sünniaeg ja aadress. * **Struktureerimata andmed** on andmed, millel puudub hästi määratletud, jäik struktuur ja mis võivad sageli struktuuri muuta. Näiteks dokumendid, nagu kirjutatud tekstid või arvutustabelid. ✅ Uurige: Kas oskate mõelda veel mõnele näitele struktureeritud ja struktureerimata andmetest? > 💁 On olemas ka poolstruktureeritud andmed, mis on struktureeritud, kuid ei sobi fikseeritud tabelitesse. IoT-andmeid peetakse tavaliselt struktureerimata andmeteks. Kujutage ette, et lisate IoT-seadmeid suure kommertsfarmi sõidukiparki. Võiksite kasutada erinevaid seadmeid erinevat tüüpi sõidukite jaoks. Näiteks: * Põllutöömasinate, nagu traktorite puhul, soovite GPS-andmeid, et tagada nende töö õigetel põldudel. * Toiduainete ladudesse transportivate veokite puhul soovite GPS-andmeid, samuti kiiruse ja kiirenduse andmeid, et tagada ohutu sõitmine, ning juhi identiteedi ja tööaja andmeid, et järgida kohalikke tööseadusi. * Külmutusveokite puhul soovite ka temperatuuriandmeid, et tagada toiduainete säilimine õiges temperatuuris. Need andmed võivad pidevalt muutuda. Näiteks, kui IoT-seade asub veoki kabiinis, võivad saadetavad andmed muutuda vastavalt haagise tüübile, näiteks saates temperatuuriandmeid ainult külmutushaagise kasutamisel. ✅ Milliseid muid IoT-andmeid võiks koguda? Mõelge veokite koormatele ja hooldusandmetele. Need andmed varieeruvad sõidukiti, kuid kõik saadetakse samasse IoT-teenusesse töötlemiseks. IoT-teenus peab suutma töödelda neid struktureerimata andmeid, salvestades neid viisil, mis võimaldab otsingut või analüüsi, kuid töötab erinevate andmestruktuuridega. ### SQL vs NoSQL salvestus Andmebaasid on teenused, mis võimaldavad andmeid salvestada ja päringuid teha. Andmebaasid jagunevad kahte tüüpi - SQL ja NoSQL. #### SQL andmebaasid Esimesed andmebaasid olid relatsioonilised andmebaasid (RDBMS), mida tuntakse ka SQL-andmebaasidena, kuna need kasutavad struktureeritud päringukeelt (SQL) andmete lisamiseks, eemaldamiseks, uuendamiseks või pärimiseks. Need andmebaasid koosnevad skeemist - hästi määratletud tabelite kogumist, mis sarnanevad arvutustabelitega. Iga tabel sisaldab mitmeid nimega veerge. Andmete sisestamisel lisate tabelisse rea, pannes väärtused veergudesse. See hoiab andmed väga jäigas struktuuris - kuigi veerge võib jätta tühjaks, tuleb uue veeru lisamiseks andmebaasi muuta, täites olemasolevate ridade väärtused. Need andmebaasid on relatsioonilised - üks tabel võib olla seotud teisega. ![Relatsiooniline andmebaas, kus kasutajate tabeli ID on seotud ostude tabeli kasutaja ID veeruga ja toodete tabeli ID on seotud ostude tabeli toote ID veeruga](../../../../../translated_images/et/sql-database.be160f12bfccefd3.webp) Näiteks, kui salvestate kasutaja isiklikke andmeid tabelisse, oleks igal kasutajal mingi sisemine unikaalne ID, mida kasutatakse tabelis, mis sisaldab kasutaja nime ja aadressi. Kui soovite salvestada selle kasutaja kohta muid andmeid, näiteks tema oste, teises tabelis, oleks uues tabelis üks veerg selle kasutaja ID jaoks. Kui otsite kasutajat, saate tema ID abil hankida isiklikud andmed ühest tabelist ja ostud teisest. SQL-andmebaasid sobivad ideaalselt struktureeritud andmete salvestamiseks ja tagamiseks, et andmed vastavad skeemile. ✅ Kui te pole varem SQL-i kasutanud, võtke hetk, et lugeda selle kohta [SQL-i lehelt Wikipedias](https://wikipedia.org/wiki/SQL). Mõned tuntud SQL-andmebaasid on Microsoft SQL Server, MySQL ja PostgreSQL. ✅ Uurige: Lugege mõne neist SQL-andmebaasidest ja nende võimalustest. #### NoSQL andmebaasid NoSQL-andmebaasid on nimetatud NoSQL-iks, kuna neil puudub SQL-andmebaaside jäik struktuur. Neid tuntakse ka dokumentide andmebaasidena, kuna need suudavad salvestada struktureerimata andmeid, näiteks dokumente. > 💁 Hoolimata nende nimest, võimaldavad mõned NoSQL-andmebaasid kasutada SQL-i andmete pärimiseks. ![Dokumendid kaustades NoSQL-andmebaasis](../../../../../translated_images/et/noqsl-database.62d24ccf5b73f60d.webp) NoSQL-andmebaasidel puudub eelnevalt määratletud skeem, mis piiraks andmete salvestamist; selle asemel saate sisestada mis tahes struktureerimata andmeid, tavaliselt JSON-dokumentidena. Need dokumendid saab korraldada kaustadesse, sarnaselt failidele teie arvutis. Iga dokument võib sisaldada erinevaid välju võrreldes teiste dokumentidega - näiteks kui salvestate IoT-andmeid oma farmisõidukitest, võivad mõned sisaldada kiirendus- ja kiirusandmeid, teised aga haagise temperatuuriandmeid. Kui lisate uue veokitüübi, näiteks sisseehitatud kaaludega veoki, mis jälgib veetava toodangu kaalu, võib teie IoT-seade lisada selle uue välja ja see salvestatakse ilma andmebaasi muutmata. Mõned tuntud NoSQL-andmebaasid on Azure CosmosDB, MongoDB ja CouchDB. ✅ Uurige: Lugege mõne neist NoSQL-andmebaasidest ja nende võimalustest. Selles õppetunnis kasutate NoSQL-salvestust IoT-andmete salvestamiseks. ## GPS-andmete saatmine IoT Hubi Eelmises õppetunnis kogusite GPS-andmeid GPS-andurilt, mis oli ühendatud teie IoT-seadmega. IoT-andmete pilves salvestamiseks peate need saatma IoT-teenusesse. Jällegi kasutate Azure IoT Hubi, sama IoT-pilveteenust, mida kasutasite eelmises projektis. ![GPS-telemeetria saatmine IoT-seadmest IoT Hubi](../../../../../translated_images/et/gps-telemetry-iot-hub.8115335d51cd2c12.webp) ### Ülesanne - GPS-andmete saatmine IoT Hubi 1. Looge uus IoT Hub, kasutades tasuta taset. > ⚠️ Vajadusel saate viidata [juhistele IoT Hubi loomiseks projektist 2, õppetund 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#create-an-iot-service-in-the-cloud). Looge uus ressursigrupp. Nimetage uus ressursigrupp `gps-sensor` ja uus IoT Hub unikaalse nimega, mis põhineb `gps-sensor`-il, näiteks `gps-sensor-`. > 💁 Kui teil on endiselt IoT Hub eelmisest projektist, saate seda uuesti kasutada. Pidage meeles kasutada selle IoT Hubi nime ja ressursigrupi nime, milles see asub, kui loote muid teenuseid. 1. Lisage IoT Hubi uus seade. Nimetage see seade `gps-sensor`. Hankige seadme ühenduse string. 1. Uuendage oma seadme koodi, et saata GPS-andmed uude IoT Hubi, kasutades eelmises etapis saadud seadme ühenduse stringi. > ⚠️ Vajadusel saate viidata [juhistele seadme ühendamiseks IoT-teenusega projektist 2, õppetund 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#connect-your-device-to-the-iot-service). 1. Saatke GPS-andmed JSON-vormingus järgmiselt: ```json { "gps" : { "lat" : , "lon" : } } ``` 1. Saatke GPS-andmeid iga minut, et mitte ületada oma igapäevast sõnumite limiiti. Kui kasutate Wio Terminali, pidage meeles lisada kõik vajalikud teegid ja seadistada aeg NTP-serveri abil. Teie kood peab samuti tagama, et see on lugenud kõik andmed jadapordist enne GPS-asukoha saatmist, kasutades eelmise õppetunni olemasolevat koodi. Kasutage JSON-dokumendi koostamiseks järgmist koodi: ```cpp DynamicJsonDocument doc(1024); doc["gps"]["lat"] = gps.location.lat(); doc["gps"]["lon"] = gps.location.lng(); ``` Kui kasutate virtuaalset IoT-seadet, pidage meeles installida kõik vajalikud teegid virtuaalse keskkonna abil. Nii Raspberry Pi kui ka virtuaalse IoT-seadme puhul kasutage eelmise õppetunni olemasolevat koodi, et saada laius- ja pikkuskraadi väärtused, ning saatke need õiges JSON-vormingus järgmise koodiga: ```python message_json = { "gps" : { "lat":lat, "lon":lon } } print("Sending telemetry", message_json) message = Message(json.dumps(message_json)) ``` > 💁 Selle koodi leiate kaustast [code/wio-terminal](../../../../../3-transport/lessons/2-store-location-data/code/wio-terminal), [code/pi](../../../../../3-transport/lessons/2-store-location-data/code/pi) või [code/virtual-device](../../../../../3-transport/lessons/2-store-location-data/code/virtual-device). Käivitage oma seadme kood ja veenduge, et sõnumid voolavad IoT Hubi, kasutades CLI käsku `az iot hub monitor-events`. ## Kuumad, soojad ja külmad teed IoT-seadmest pilve voolavaid andmeid ei töödelda alati reaalajas. Mõned andmed vajavad reaalajas töötlemist, teised andmed võivad olla töödeldud lühikese aja jooksul ja teised andmed võivad olla töödeldud palju hiljem. Andmete voolu erinevatesse teenustesse, mis töötlevad andmeid erinevatel aegadel, nimetatakse kuumadeks, soojadeks ja külmadeks teedeks. ### Kuum tee Kuum tee viitab andmetele, mida tuleb töödelda reaalajas või peaaegu reaalajas. Kuuma tee andmeid kasutaksite hoiatuste jaoks, näiteks teavitused, et sõiduk läheneb depoole või et külmutusveoki temperatuur on liiga kõrge. Kuuma tee andmete kasutamiseks reageeriks teie kood sündmustele kohe, kui need teie pilveteenustesse jõuavad. ### Soe tee Soe tee viitab andmetele, mida saab töödelda lühikese aja jooksul pärast vastuvõtmist, näiteks aruandluseks või lühiajalisteks analüüsideks. Sooja tee andmeid kasutaksite igapäevaste aruannete jaoks sõiduki läbisõidu kohta, kasutades eelmise päeva andmeid. Sooja tee andmed salvestatakse kohe pärast pilveteenusesse jõudmist mingisugusesse kiiresti ligipääsetavasse salvestusse. ### Külm tee Külm tee viitab ajaloolistele andmetele, mis salvestatakse pikaajaliselt ja mida saab töödelda vajadusel. Näiteks võiksite kasutada külma tee andmeid, et saada aastaaruandeid sõidukite läbisõidu kohta või analüüsida marsruute, et leida kõige optimaalsem marsruut kütusekulude vähendamiseks. Külma tee andmed salvestatakse andmeladudesse - andmebaasidesse, mis on mõeldud suurte muutumatute andmemahtude salvestamiseks ja mida saab kiiresti ja lihtsalt pärida. Tavaliselt oleks teie pilverakenduses regulaarne töö, mis käivituks iga päev, nädal või kuu, et liigutada andmeid sooja tee salvestusest andmelattu. ✅ Mõelge andmetele, mida olete seni nendes õppetundides kogunud. Kas need on kuuma, sooja või külma tee andmed? ## GPS-sündmuste käsitlemine serverivaba koodi abil Kui andmed voolavad teie IoT Hubi, saate kirjutada serverivaba koodi, et kuulata sündmusi, mis avaldatakse Event-Hubiga ühilduval lõpp-punktil. See on soe tee - need andmed salvestatakse ja neid kasutatakse järgmises õppetunnis teekonna aruandluseks. ![GPS-telemeetria saatmine IoT-seadmest IoT Hubi, seejärel Azure Functionsisse sündmuste huba päästiku kaudu](../../../../../translated_images/et/gps-telemetry-iot-hub-functions.24d3fa5592455e9f.webp) ### Ülesanne - GPS-sündmuste käsitlemine serverivaba koodi abil 1. Looge Azure Functions rakendus, kasutades Azure Functions CLI-d. Kasutage Python runtime'i ja looge see kausta nimega `gps-trigger`, kasutades sama nime ka Functions App projekti nimeks. Veenduge, et loote selle jaoks virtuaalse keskkonna. > ⚠️ Vajadusel saate viidata [juhistele Azure Functions projekti loomiseks projektist 2, õppetund 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-a-serverless-application). 1. Lisage IoT Hubi sündmuste päästik, mis kasutab IoT Hubi Event Hubiga ühilduvat lõpp-punkti. > ⚠️ Võid vajadusel viidata [juhistele IoT Hubi sündmuse käivitaja loomiseks projektist 2, õppetund 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger). 1. Määra Event Hubi ühilduva lõpp-punkti ühenduse string `local.settings.json` failis ja kasuta selle kirje võtit `function.json` failis. 1. Kasuta Azurite rakendust kohaliku salvestuse emulaatorina. 1. Käivita oma funktsioonirakendus, et veenduda, et see saab sündmusi sinu GPS-seadmest. Veendu, et sinu IoT-seade töötab ja saadab GPS-andmeid. ```output Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}} ``` ## Azure'i salvestuskontod ![Azure Storage logo](../../../../../translated_images/et/azure-storage-logo.605c0f602c640d48.webp) Azure'i salvestuskontod on üldotstarbeline salvestusteenus, mis võimaldab andmeid salvestada mitmel erineval viisil. Sa saad andmeid salvestada blobidena, järjekordades, tabelites või failidena – ja seda kõike samaaegselt. ### Blob-salvestus Sõna *Blob* tähendab binaarseid suuri objekte, kuid on muutunud terminiks igasuguse struktureerimata andmete kohta. Blob-salvestusse saab salvestada igasuguseid andmeid, alates IoT-andmeid sisaldavatest JSON-dokumentidest kuni piltide ja filmifailideni. Blob-salvestusel on *konteinerite* kontseptsioon – nimelised "ämbrid", kuhu saab andmeid salvestada, sarnaselt relatsioonilise andmebaasi tabelitele. Need konteinerid võivad sisaldada ühte või mitut kausta blobide salvestamiseks ning iga kaust võib sisaldada teisi kaustu, sarnaselt failide salvestamisele arvuti kõvakettal. Selles õppetunnis kasutad blob-salvestust IoT-andmete salvestamiseks. ✅ Tee veidi uurimistööd: Loe [Azure Blob Storage](https://docs.microsoft.com/azure/storage/blobs/storage-blobs-overview?WT.mc_id=academic-17441-jabenn) kohta. ### Tabelisalvestus Tabelisalvestus võimaldab salvestada poolstruktureeritud andmeid. Tabelisalvestus on tegelikult NoSQL-andmebaas, mis ei nõua ette määratud tabelite komplekti, kuid on mõeldud andmete salvestamiseks ühes või mitmes tabelis, kus iga rida määratletakse unikaalsete võtmetega. ✅ Tee veidi uurimistööd: Loe [Azure Table Storage](https://docs.microsoft.com/azure/storage/tables/table-storage-overview?WT.mc_id=academic-17441-jabenn) kohta. ### Järjekordade salvestus Järjekordade salvestus võimaldab salvestada kuni 64KB suuruseid sõnumeid järjekorda. Sa saad lisada sõnumeid järjekorra lõppu ja lugeda neid järjekorra algusest. Järjekorrad salvestavad sõnumeid määramata ajaks, kuni salvestusruumi jätkub, võimaldades sõnumeid pikaajaliselt säilitada ja lugeda neid vajadusel. Näiteks, kui soovid igakuist tööülesannet GPS-andmete töötlemiseks, võid lisada andmeid järjekorda iga päev kuu jooksul ja seejärel kuu lõpus kõik sõnumid korraga töödelda. ✅ Tee veidi uurimistööd: Loe [Azure Queue Storage](https://docs.microsoft.com/azure/storage/queues/storage-queues-introduction?WT.mc_id=academic-17441-jabenn) kohta. ### Failisalvestus Failisalvestus tähendab failide salvestamist pilves, kus rakendused või seadmed saavad ühenduda tööstusstandardite protokollide abil. Sa saad kirjutada faile failisalvestusse ja seejärel monteerida selle draivina oma arvutis või Macis. ✅ Tee veidi uurimistööd: Loe [Azure File Storage](https://docs.microsoft.com/azure/storage/files/storage-files-introduction?WT.mc_id=academic-17441-jabenn) kohta. ## Ühenda oma serverivaba kood salvestusega Sinu funktsioonirakendus peab nüüd ühenduma blob-salvestusega, et salvestada IoT Hubi sõnumeid. Selleks on kaks võimalust: * Funktsiooni koodi sees, ühenduda blob-salvestusega kasutades blob-salvestuse Python SDK-d ja kirjutada andmed blobidena. * Kasutada väljundfunktsiooni sidumist, et siduda funktsiooni tagastusväärtus blob-salvestusega ja salvestada blob automaatselt. Selles õppetunnis kasutad Python SDK-d, et näha, kuidas blob-salvestusega suhelda. ![GPS-telemeetria saatmine IoT-seadmest IoT Hubi, seejärel Azure Functionsisse sündmuse käivitaja kaudu ja lõpuks salvestamine blob-salvestusse](../../../../../translated_images/et/save-telemetry-to-storage-from-functions.ed3b1820980097f1.webp) Andmed salvestatakse JSON-blobina järgmises formaadis: ```json { "device_id": , "timestamp" :