# Локација продавнице података ![Преглед лекције у облику скице](../../../../../translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.sr.jpg) > Скица од [Nitya Narasimhan](https://github.com/nitya). Кликните на слику за већу верзију. ## Квиз пре предавања [Квиз пре предавања](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/23) ## Увод У претходној лекцији научили сте како да користите GPS сензор за прикупљање података о локацији. Да би се ти подаци користили за визуализацију локације камиона са храном и његовог путовања, потребно је да се пошаљу IoT услузи у облаку и затим негде складиште. У овој лекцији научићете о различитим начинима складиштења IoT података и како да складиштите податке из ваше IoT услуге користећи серверлес код. У овој лекцији обрадићемо: * [Структурирани и неструктурирани подаци](../../../../../3-transport/lessons/2-store-location-data) * [Слање GPS података у IoT Hub](../../../../../3-transport/lessons/2-store-location-data) * [Врући, топли и хладни путеви](../../../../../3-transport/lessons/2-store-location-data) * [Обрада GPS догађаја помоћу серверлес кода](../../../../../3-transport/lessons/2-store-location-data) * [Azure Storage налози](../../../../../3-transport/lessons/2-store-location-data) * [Повезивање серверлес кода са складиштем](../../../../../3-transport/lessons/2-store-location-data) ## Структурирани и неструктурирани подаци Рачунарски системи раде са подацима, а ти подаци долазе у различитим облицима и величинама. Могу варирати од једноставних бројева, до великих количина текста, видеа и слика, па до IoT података. Подаци се обично деле у две категорије - *структурирани* подаци и *неструктурирани* подаци. * **Структурирани подаци** су подаци са добро дефинисаном, крутом структуром која се не мења и обично се мапирају на табеле података са односима. Један пример су лични подаци особе, укључујући њено име, датум рођења и адресу. * **Неструктурирани подаци** су подаци без добро дефинисане, круте структуре, укључујући податке који могу често мењати структуру. Један пример су документи као што су писани документи или табеле. ✅ Урадите мало истраживања: Можете ли смислити неке друге примере структурираних и неструктурираних података? > 💁 Постоје и полуструктурирани подаци који су структурирани, али не одговарају фиксним табелама података. IoT подаци се обично сматрају неструктурираним подацима. Замислите да додајете IoT уређаје у флоту возила за велику комерцијалну фарму. Можда желите да користите различите уређаје за различите типове возила. На пример: * За фармска возила као што су трактори, желите GPS податке како бисте осигурали да раде на исправним њивама. * За камионе за доставу хране у складишта, желите GPS податке као и податке о брзини и убрзању како бисте осигурали да возач вози безбедно, као и податке о идентитету возача и почетку/завршетку рада како бисте осигурали усклађеност са локалним законима о радним часовима. * За камионе са хладњачама, такође желите податке о температури како бисте осигурали да храна не постане превише топла или хладна и поквари се током транспорта. Ови подаци могу се стално мењати. На пример, ако је IoT уређај у кабини камиона, подаци које шаље могу се мењати како се приколица мења, на пример, шаљући податке о температури само када се користи хладњача. ✅ Које друге IoT податке би могли бити прикупљени? Размислите о врстама терета које камиони могу носити, као и о подацима о одржавању. Ови подаци варирају од возила до возила, али сви се шаљу истој IoT услузи ради обраде. IoT услуга мора бити у стању да обради ове неструктуриране податке, складиштећи их на начин који омогућава претрагу или анализу, али функционише са различитим структурама ових података. ### SQL vs NoSQL складиштење Базе података су услуге које омогућавају складиштење и претрагу података. Базе података долазе у два типа - SQL и NoSQL. #### SQL базе података Прве базе података биле су Системи за управљање релационим базама података (RDBMS), или релационе базе података. Оне су такође познате као SQL базе података по Structured Query Language (SQL) који се користи за интеракцију са њима ради додавања, уклањања, ажурирања или претраге података. Ове базе података се састоје од шеме - добро дефинисаног скупа табела података, слично табели. Свака табела има више именованих колона. Када уносите податке, додајете ред у табелу, стављајући вредности у сваку од колона. Ово држи податке у веома крутој структури - иако можете оставити колоне празне, ако желите да додате нову колону, морате то урадити на бази података, попуњавајући вредности за постојеће редове. Ове базе података су релационе - у смислу да једна табела може имати однос са другом. ![Релациона база података са ID корисника у табели User који се односи на колону user ID у табели куповина, и ID производа у табели Products који се односи на product ID у табели куповина](../../../../../translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.sr.png) На пример, ако складиштите личне податке корисника у табели, имали бисте неку врсту интерног јединственог ID за сваког корисника који се користи у реду у табели која садржи име и адресу корисника. Ако затим желите да складиштите друге детаље о том кориснику, као што су његове куповине, у другој табели, имали бисте једну колону у новој табели за ID тог корисника. Када претражујете корисника, можете користити његов ID да добијете његове личне податке из једне табеле и његове куповине из друге. SQL базе података су идеалне за складиштење структурираних података и када желите да осигурате да подаци одговарају вашој шеми. ✅ Ако нисте користили SQL раније, одвојите тренутак да прочитате о њему на [SQL страници на Википедији](https://wikipedia.org/wiki/SQL). Неке познате SQL базе података су Microsoft SQL Server, MySQL и PostgreSQL. ✅ Урадите мало истраживања: Прочитајте о неким од ових SQL база података и њиховим могућностима. #### NoSQL базе података NoSQL базе података се називају NoSQL јер немају исту круту структуру као SQL базе података. Такође су познате као базе података докумената јер могу складиштити неструктуриране податке као што су документи. > 💁 Упркос њиховом имену, неке NoSQL базе података омогућавају вам да користите SQL за претрагу података. ![Документи у фасциклама у NoSQL бази података](../../../../../translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.sr.png) NoSQL базе података немају унапред дефинисану шему која ограничава начин складиштења података, уместо тога можете уносити било које неструктуриране податке, обично користећи JSON документе. Ови документи могу бити организовани у фасцикле, слично фајловима на вашем рачунару. Сваки документ може имати различита поља од других докумената - на пример, ако складиштите IoT податке са ваших фармских возила, неки могу имати поља за податке о акцелерометру и брзини, други могу имати поља за температуру у приколици. Ако бисте додали нови тип камиона, као што је онај са уграђеним вагама за праћење тежине носивости, ваш IoT уређај би могао додати ово ново поље и оно би могло бити складиштено без икаквих промена на бази података. Неке познате NoSQL базе података укључују Azure CosmosDB, MongoDB и CouchDB. ✅ Урадите мало истраживања: Прочитајте о неким од ових NoSQL база података и њиховим могућностима. У овој лекцији, користићете NoSQL складиштење за складиштење IoT података. ## Слање GPS података у IoT Hub У претходној лекцији прикупили сте GPS податке са GPS сензора повезаног са вашим IoT уређајем. Да бисте складиштили ове IoT податке у облаку, потребно је да их пошаљете IoT услузи. Поново ћете користити Azure IoT Hub, исту IoT услугу у облаку коју сте користили у претходном пројекту. ![Слање GPS телеметрије са IoT уређаја у IoT Hub](../../../../../translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.sr.png) ### Задатак - слање GPS података у IoT Hub 1. Направите нови IoT Hub користећи бесплатни ниво. > ⚠️ Можете се позвати на [упутства за креирање IoT Hub-а из пројекта 2, лекција 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#create-an-iot-service-in-the-cloud) ако је потребно. Запамтите да направите нову групу ресурса. Назовите нову групу ресурса `gps-sensor`, а нови IoT Hub јединственим именом заснованим на `gps-sensor`, као што је `gps-sensor-<ваше име>`. > 💁 Ако још увек имате свој IoT Hub из претходног пројекта, можете га поново користити. Запамтите да користите име овог IoT Hub-а и групу ресурса у којој се налази приликом креирања других услуга. 1. Додајте нови уређај у IoT Hub. Назовите овај уређај `gps-sensor`. Узмите конекциони стринг за уређај. 1. Ажурирајте код вашег уређаја да шаље GPS податке новом IoT Hub-у користећи конекциони стринг уређаја из претходног корака. > ⚠️ Можете се позвати на [упутства за повезивање вашег уређаја са IoT из пројекта 2, лекција 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#connect-your-device-to-the-iot-service) ако је потребно. 1. Када шаљете GPS податке, урадите то као JSON у следећем формату: ```json { "gps" : { "lat" : , "lon" : } } ``` 1. Шаљите GPS податке сваког минута како не бисте потрошили дневну квоту порука. Ако користите Wio Terminal, запамтите да додате све потребне библиотеке и подесите време користећи NTP сервер. Ваш код такође треба да осигура да је прочитао све податке са серијског порта пре слања GPS локације, користећи постојећи код из претходне лекције. Користите следећи код за конструисање JSON документа: ```cpp DynamicJsonDocument doc(1024); doc["gps"]["lat"] = gps.location.lat(); doc["gps"]["lon"] = gps.location.lng(); ``` Ако користите виртуелни IoT уређај, запамтите да инсталирате све потребне библиотеке користећи виртуелно окружење. За оба Raspberry Pi и виртуелни IoT уређај, користите постојећи код из претходне лекције за добијање вредности географске ширине и дужине, затим их пошаљите у исправном JSON формату са следећим кодом: ```python message_json = { "gps" : { "lat":lat, "lon":lon } } print("Sending telemetry", message_json) message = Message(json.dumps(message_json)) ``` > 💁 Овај код можете пронаћи у [code/wio-terminal](../../../../../3-transport/lessons/2-store-location-data/code/wio-terminal), [code/pi](../../../../../3-transport/lessons/2-store-location-data/code/pi) или [code/virtual-device](../../../../../3-transport/lessons/2-store-location-data/code/virtual-device) фасцикли. Покрените код вашег уређаја и осигурајте да поруке стижу у IoT Hub користећи CLI команду `az iot hub monitor-events`. ## Врући, топли и хладни путеви Подаци који стижу са IoT уређаја у облак не обрађују се увек у реалном времену. Неки подаци захтевају обраду у реалном времену, други могу бити обрађени мало касније, а трећи могу бити обрађени много касније. Проток података ка различитим услугама које обрађују податке у различитим временима назива се врући, топли и хладни путеви. ### Врући пут Врући пут се односи на податке који морају бити обрађени у реалном времену или скоро реалном времену. Користили бисте податке из врућег пута за упозорења, као што су добијање упозорења да се возило приближава депоу или да је температура у хладњачи превисока. Да бисте користили податке из врућег пута, ваш код би реаговао на догађаје чим их приме ваше услуге у облаку. ### Топли пут Топли пут се односи на податке који могу бити обрађени кратко време након што су примљени, на пример за извештавање или краткорочну аналитику. Користили бисте податке из топлог пута за дневне извештаје о пређеним километражама возила, користећи податке прикупљене претходног дана. Подаци из топлог пута се складиште чим их приме услуге у облаку у некој врсти складишта које може бити брзо приступљено. ### Хладни пут Хладни пут се односи на историјске податке, складиштење података на дугорочном нивоу који могу бити обрађени кад год је потребно. На пример, могли бисте користити хладни пут за добијање годишњих извештаја о километражи возила или за покретање аналитике на рутама како бисте пронашли најоптималнију руту за смањење трошкова горива. Подаци из хладног пута се складиште у складиштима података - базама података дизајнираним за складиштење великих количина података који се никада не мењају и могу бити брзо и лако претражени. Обично бисте имали редовни задатак у вашој апликацији у облаку који би се покретао у редовним интервалима сваког дана, недеље или месеца ради премештања података из складишта топлог пута у складиште података. ✅ Размислите о подацима које сте прикупили до сада у овим лекцијама. Да ли су то подаци из врућег, топлог или хладног пута? ## Обрада GPS догађаја помоћу серверлес кода Када подаци почну да стижу у ваш IoT Hub, можете написати серверлес код који ће слушати догађаје објављене на Event-Hub компатибилном крајњ > ⚠️ Можете се позвати на [упутства за креирање Azure Functions пројекта из пројекта 2, лекција 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-a-serverless-application) ако је потребно. 1. Додајте тригер за догађаје IoT Hub-а који користи компатибилну крајњу тачку Event Hub-а. > ⚠️ Можете се позвати на [упутства за креирање тригера за догађаје IoT Hub-а из пројекта 2, лекција 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger) ако је потребно. 1. Поставите стринг за повезивање компатибилне крајње тачке Event Hub-а у датотеку `local.settings.json`, и користите кључ за ту ставку у датотеци `function.json`. 1. Користите апликацију Azurite као локални емулатор за складиштење. 1. Покрените апликацију функција да бисте проверили да ли прима догађаје са вашег GPS уређаја. Уверите се да ваш IoT уређај такође ради и шаље GPS податке. ```output Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}} ``` ## Azure Storage налози ![Лого Azure Storage-а](../../../../../translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.sr.png) Azure Storage налози су услуга за складиштење опште намене која може чувати податке на различите начине. Можете чувати податке као блобове, у редовима, у табелама или као датотеке, и све то истовремено. ### Блоб складиштење Реч *Blob* означава велике бинарне објекте, али је постала термин за било које неструктуриране податке. Можете чувати било које податке у блоб складишту, од JSON докумената који садрже IoT податке, до слика и видео датотека. Блоб складиштење има концепт *контенера*, именованих "канти" у којима можете чувати податке, слично табелама у релационим базама података. Ови контенери могу имати један или више фолдера за чување блобова, а сваки фолдер може садржати друге фолдере, слично начину на који се датотеке чувају на вашем хард диску. У овој лекцији ћете користити блоб складиштење за чување IoT података. ✅ Урадите мало истраживања: Прочитајте о [Azure Blob Storage](https://docs.microsoft.com/azure/storage/blobs/storage-blobs-overview?WT.mc_id=academic-17441-jabenn) ### Табеларно складиштење Табеларно складиштење омогућава чување полу-структурираних података. Табеларно складиштење је заправо NoSQL база података, тако да не захтева унапред дефинисан скуп табела, али је дизајнирано за чување података у једној или више табела, са јединственим кључевима за дефинисање сваког реда. ✅ Урадите мало истраживања: Прочитајте о [Azure Table Storage](https://docs.microsoft.com/azure/storage/tables/table-storage-overview?WT.mc_id=academic-17441-jabenn) ### Редовно складиштење Редовно складиштење омогућава чување порука величине до 64KB у реду. Можете додати поруке на крај реда и читати их са почетка. Редови чувају поруке на неодређено време док год има простора за складиштење, што омогућава дугорочно чување порука, а затим њихово читање када је потребно. На пример, ако желите да покренете месечни задатак за обраду GPS података, можете их додавати у ред сваки дан током месеца, а затим на крају месеца обрадити све поруке из реда. ✅ Урадите мало истраживања: Прочитајте о [Azure Queue Storage](https://docs.microsoft.com/azure/storage/queues/storage-queues-introduction?WT.mc_id=academic-17441-jabenn) ### Складиштење датотека Складиштење датотека подразумева чување датотека у облаку, а било које апликације или уређаји могу се повезати користећи индустријске стандардне протоколе. Можете писати датотеке у складиштење датотека, а затим га монтирати као диск на вашем рачунару. ✅ Урадите мало истраживања: Прочитајте о [Azure File Storage](https://docs.microsoft.com/azure/storage/files/storage-files-introduction?WT.mc_id=academic-17441-jabenn) ## Повежите ваш серверлес код са складиштем Ваша апликација функција сада треба да се повеже са блоб складиштем како би чувала поруке са IoT Hub-а. Постоје два начина да се то уради: * Унутар кода функције, повежите се са блоб складиштем користећи Python SDK за блоб складиште и пишите податке као блобове. * Користите везу за излаз функције да бисте повезали повратну вредност функције са блоб складиштем и аутоматски сачували блоб. У овој лекцији ћете користити Python SDK да бисте видели како да интерагујете са блоб складиштем. ![Слање GPS телеметрије са IoT уређаја на IoT Hub, затим на Azure Functions преко тригера за догађаје Event Hub-а, а затим чување у блоб складиште](../../../../../translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.sr.png) Подаци ће бити сачувани као JSON блоб са следећим форматом: ```json { "device_id": , "timestamp" :