# Data Lokasi Kedai ![Gambaran sketchnote untuk pelajaran ini](../../../../../translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.ms.jpg) > Sketchnote oleh [Nitya Narasimhan](https://github.com/nitya). Klik imej untuk versi yang lebih besar. ## Kuiz Pra-Kuliah [Kuiz Pra-Kuliah](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/23) ## Pengenalan Dalam pelajaran sebelumnya, anda telah belajar cara menggunakan sensor GPS untuk menangkap data lokasi. Untuk menggunakan data ini bagi memvisualisasikan lokasi trak yang membawa makanan dan perjalanannya, data tersebut perlu dihantar ke perkhidmatan IoT di awan dan disimpan di suatu tempat. Dalam pelajaran ini, anda akan mempelajari cara-cara berbeza untuk menyimpan data IoT dan belajar cara menyimpan data daripada perkhidmatan IoT anda menggunakan kod tanpa pelayan. Dalam pelajaran ini, kita akan membincangkan: * [Data berstruktur dan tidak berstruktur](../../../../../3-transport/lessons/2-store-location-data) * [Hantar data GPS ke IoT Hub](../../../../../3-transport/lessons/2-store-location-data) * [Laluan panas, suam, dan sejuk](../../../../../3-transport/lessons/2-store-location-data) * [Kendalikan acara GPS menggunakan kod tanpa pelayan](../../../../../3-transport/lessons/2-store-location-data) * [Akaun Penyimpanan Azure](../../../../../3-transport/lessons/2-store-location-data) * [Sambungkan kod tanpa pelayan anda ke penyimpanan](../../../../../3-transport/lessons/2-store-location-data) ## Data Berstruktur dan Tidak Berstruktur Sistem komputer berurusan dengan data, dan data ini datang dalam pelbagai bentuk dan saiz. Ia boleh terdiri daripada nombor tunggal, teks yang banyak, video dan imej, hingga data IoT. Data biasanya boleh dibahagikan kepada dua kategori - *data berstruktur* dan *data tidak berstruktur*. * **Data berstruktur** ialah data dengan struktur yang jelas dan tegar yang tidak berubah dan biasanya dipetakan kepada jadual data dengan hubungan. Contohnya ialah butiran seseorang termasuk nama, tarikh lahir, dan alamat mereka. * **Data tidak berstruktur** ialah data tanpa struktur yang jelas dan tegar, termasuk data yang boleh berubah struktur dengan kerap. Contohnya ialah dokumen seperti dokumen bertulis atau hamparan. ✅ Lakukan sedikit penyelidikan: Bolehkah anda memikirkan contoh lain untuk data berstruktur dan tidak berstruktur? > 💁 Terdapat juga data separa berstruktur yang berstruktur tetapi tidak sesuai dengan jadual data tetap. Data IoT biasanya dianggap sebagai data tidak berstruktur. Bayangkan anda menambah peranti IoT pada armada kenderaan untuk ladang komersial yang besar. Anda mungkin ingin menggunakan peranti yang berbeza untuk jenis kenderaan yang berbeza. Sebagai contoh: * Untuk kenderaan ladang seperti traktor, anda mahukan data GPS untuk memastikan mereka bekerja di ladang yang betul. * Untuk trak penghantaran yang membawa makanan ke gudang, anda mahukan data GPS serta data kelajuan dan pecutan untuk memastikan pemandu memandu dengan selamat, serta identiti pemandu dan data mula/berhenti untuk memastikan pematuhan pemandu terhadap undang-undang tempatan mengenai waktu bekerja. * Untuk trak berpendingin, anda juga mahukan data suhu untuk memastikan makanan tidak terlalu panas atau sejuk dan rosak semasa transit. Data ini boleh berubah secara berterusan. Sebagai contoh, jika peranti IoT berada di kabin trak, data yang dihantar mungkin berubah apabila treler berubah, contohnya hanya menghantar data suhu apabila treler berpendingin digunakan. ✅ Apakah data IoT lain yang mungkin ditangkap? Fikirkan tentang jenis muatan yang boleh dibawa oleh trak, serta data penyelenggaraan. Data ini berbeza dari kenderaan ke kenderaan, tetapi semuanya dihantar ke perkhidmatan IoT yang sama untuk diproses. Perkhidmatan IoT perlu dapat memproses data tidak berstruktur ini, menyimpannya dengan cara yang membolehkan ia dicari atau dianalisis, tetapi berfungsi dengan struktur yang berbeza untuk data ini. ### Penyimpanan SQL vs NoSQL Pangkalan data ialah perkhidmatan yang membolehkan anda menyimpan dan menyoal data. Pangkalan data datang dalam dua jenis - SQL dan NoSQL. #### Pangkalan Data SQL Pangkalan data pertama ialah Sistem Pengurusan Pangkalan Data Relasi (RDBMS), atau pangkalan data relasi. Ini juga dikenali sebagai pangkalan data SQL kerana Bahasa Pertanyaan Berstruktur (SQL) digunakan untuk berinteraksi dengannya untuk menambah, menghapus, mengemas kini atau menyoal data. Pangkalan data ini terdiri daripada skema - satu set jadual data yang jelas, serupa dengan hamparan. Setiap jadual mempunyai pelbagai lajur bernama. Apabila anda memasukkan data, anda menambah baris ke jadual, meletakkan nilai ke dalam setiap lajur. Ini mengekalkan data dalam struktur yang sangat tegar - walaupun anda boleh meninggalkan lajur kosong, jika anda ingin menambah lajur baru, anda perlu melakukannya pada pangkalan data, mengisi nilai untuk baris yang sedia ada. Pangkalan data ini adalah relasi - di mana satu jadual boleh mempunyai hubungan dengan yang lain. ![Pangkalan data relasi dengan ID jadual Pengguna berkaitan dengan lajur ID pengguna jadual pembelian, dan ID jadual produk berkaitan dengan ID produk jadual pembelian](../../../../../translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.ms.png) Sebagai contoh, jika anda menyimpan butiran peribadi pengguna dalam jadual, anda akan mempunyai beberapa jenis ID unik dalaman bagi setiap pengguna yang digunakan dalam baris dalam jadual yang mengandungi nama dan alamat pengguna. Jika anda kemudian ingin menyimpan butiran lain tentang pengguna itu, seperti pembelian mereka, dalam jadual lain, anda akan mempunyai satu lajur dalam jadual baru untuk ID pengguna tersebut. Apabila anda mencari pengguna, anda boleh menggunakan ID mereka untuk mendapatkan butiran peribadi mereka daripada satu jadual, dan pembelian mereka daripada yang lain. Pangkalan data SQL sangat sesuai untuk menyimpan data berstruktur, dan untuk memastikan data sesuai dengan skema anda. ✅ Jika anda belum pernah menggunakan SQL sebelum ini, luangkan masa untuk membaca tentangnya di [halaman SQL di Wikipedia](https://wikipedia.org/wiki/SQL). Beberapa pangkalan data SQL yang terkenal ialah Microsoft SQL Server, MySQL, dan PostgreSQL. ✅ Lakukan sedikit penyelidikan: Baca tentang beberapa pangkalan data SQL ini dan keupayaannya. #### Pangkalan Data NoSQL Pangkalan data NoSQL dinamakan NoSQL kerana ia tidak mempunyai struktur tegar yang sama seperti pangkalan data SQL. Ia juga dikenali sebagai pangkalan data dokumen kerana ia boleh menyimpan data tidak berstruktur seperti dokumen. > 💁 Walaupun namanya, beberapa pangkalan data NoSQL membolehkan anda menggunakan SQL untuk menyoal data. ![Dokumen dalam folder dalam pangkalan data NoSQL](../../../../../translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.ms.png) Pangkalan data NoSQL tidak mempunyai skema yang telah ditetapkan yang mengehadkan cara data disimpan, sebaliknya anda boleh memasukkan sebarang data tidak berstruktur, biasanya menggunakan dokumen JSON. Dokumen ini boleh diatur dalam folder, serupa dengan fail pada komputer anda. Setiap dokumen boleh mempunyai medan yang berbeza daripada dokumen lain - contohnya jika anda menyimpan data IoT daripada kenderaan ladang anda, sesetengahnya mungkin mempunyai medan untuk data pecutan dan kelajuan, yang lain mungkin mempunyai medan untuk suhu dalam treler. Jika anda ingin menambah jenis trak baru, seperti yang mempunyai skala terbina dalam untuk menjejaki berat hasil yang dibawa, maka peranti IoT anda boleh menambah medan baru ini dan ia boleh disimpan tanpa sebarang perubahan pada pangkalan data. Beberapa pangkalan data NoSQL yang terkenal termasuk Azure CosmosDB, MongoDB, dan CouchDB. ✅ Lakukan sedikit penyelidikan: Baca tentang beberapa pangkalan data NoSQL ini dan keupayaannya. Dalam pelajaran ini, anda akan menggunakan penyimpanan NoSQL untuk menyimpan data IoT. ## Hantar Data GPS ke IoT Hub Dalam pelajaran sebelumnya, anda telah menangkap data GPS daripada sensor GPS yang disambungkan ke peranti IoT anda. Untuk menyimpan data IoT ini di awan, anda perlu menghantarnya ke perkhidmatan IoT. Sekali lagi, anda akan menggunakan Azure IoT Hub, perkhidmatan awan IoT yang sama yang anda gunakan dalam projek sebelumnya. ![Menghantar telemetri GPS daripada peranti IoT ke IoT Hub](../../../../../translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.ms.png) ### Tugas - Hantar Data GPS ke IoT Hub 1. Buat IoT Hub baru menggunakan tier percuma. > ⚠️ Anda boleh merujuk kepada [arahan untuk membuat IoT Hub daripada projek 2, pelajaran 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#create-an-iot-service-in-the-cloud) jika diperlukan. Ingat untuk membuat Kumpulan Sumber baru. Namakan Kumpulan Sumber baru `gps-sensor`, dan IoT Hub baru dengan nama unik berdasarkan `gps-sensor`, seperti `gps-sensor-`. > 💁 Jika anda masih mempunyai IoT Hub daripada projek sebelumnya, anda boleh menggunakannya semula. Ingat untuk menggunakan nama IoT Hub ini dan Kumpulan Sumber di mana ia berada semasa membuat perkhidmatan lain. 1. Tambahkan peranti baru ke IoT Hub. Namakan peranti ini `gps-sensor`. Ambil string sambungan untuk peranti tersebut. 1. Kemas kini kod peranti anda untuk menghantar data GPS ke IoT Hub baru menggunakan string sambungan peranti daripada langkah sebelumnya. > ⚠️ Anda boleh merujuk kepada [arahan untuk menyambungkan peranti anda ke IoT daripada projek 2, pelajaran 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#connect-your-device-to-the-iot-service) jika diperlukan. 1. Apabila anda menghantar data GPS, lakukan dalam format JSON berikut: ```json { "gps" : { "lat" : , "lon" : } } ``` 1. Hantar data GPS setiap minit supaya anda tidak menggunakan kuota mesej harian anda. Jika anda menggunakan Wio Terminal, ingat untuk menambah semua perpustakaan yang diperlukan, dan tetapkan masa menggunakan pelayan NTP. Kod anda juga perlu memastikan bahawa ia telah membaca semua data daripada port serial sebelum menghantar lokasi GPS, menggunakan kod sedia ada daripada pelajaran sebelumnya. Gunakan kod berikut untuk membina dokumen JSON: ```cpp DynamicJsonDocument doc(1024); doc["gps"]["lat"] = gps.location.lat(); doc["gps"]["lon"] = gps.location.lng(); ``` Jika anda menggunakan Peranti IoT Maya, ingat untuk memasang semua perpustakaan yang diperlukan menggunakan persekitaran maya. Untuk kedua-dua Raspberry Pi dan Peranti IoT Maya, gunakan kod sedia ada daripada pelajaran sebelumnya untuk mendapatkan nilai latitud dan longitud, kemudian hantar dalam format JSON yang betul dengan kod berikut: ```python message_json = { "gps" : { "lat":lat, "lon":lon } } print("Sending telemetry", message_json) message = Message(json.dumps(message_json)) ``` > 💁 Anda boleh menemui kod ini dalam folder [code/wio-terminal](../../../../../3-transport/lessons/2-store-location-data/code/wio-terminal), [code/pi](../../../../../3-transport/lessons/2-store-location-data/code/pi) atau [code/virtual-device](../../../../../3-transport/lessons/2-store-location-data/code/virtual-device). Jalankan kod peranti anda dan pastikan mesej mengalir ke IoT Hub menggunakan perintah CLI `az iot hub monitor-events`. ## Laluan Panas, Suam, dan Sejuk Data yang mengalir daripada peranti IoT ke awan tidak selalu diproses secara masa nyata. Sesetengah data memerlukan pemprosesan masa nyata, data lain boleh diproses sedikit kemudian, dan data lain boleh diproses jauh lebih lewat. Aliran data ke perkhidmatan yang berbeza yang memproses data pada masa yang berbeza dirujuk sebagai laluan panas, suam, dan sejuk. ### Laluan Panas Laluan panas merujuk kepada data yang perlu diproses secara masa nyata atau hampir masa nyata. Anda akan menggunakan data laluan panas untuk amaran, seperti mendapatkan amaran bahawa kenderaan menghampiri depot, atau bahawa suhu dalam trak berpendingin terlalu tinggi. Untuk menggunakan data laluan panas, kod anda akan bertindak balas terhadap acara sebaik sahaja ia diterima oleh perkhidmatan awan anda. ### Laluan Suam Laluan suam merujuk kepada data yang boleh diproses sedikit masa selepas diterima, contohnya untuk pelaporan atau analitik jangka pendek. Anda akan menggunakan data laluan suam untuk laporan harian tentang jarak perjalanan kenderaan, menggunakan data yang dikumpulkan pada hari sebelumnya. Data laluan suam disimpan sebaik sahaja ia diterima oleh perkhidmatan awan di dalam beberapa jenis penyimpanan yang boleh diakses dengan cepat. ### Laluan Sejuk Laluan sejuk merujuk kepada data sejarah, menyimpan data untuk jangka masa panjang untuk diproses bila-bila masa diperlukan. Sebagai contoh, anda boleh menggunakan laluan sejuk untuk mendapatkan laporan jarak perjalanan tahunan untuk kenderaan, atau menjalankan analitik pada laluan untuk mencari laluan paling optimum bagi mengurangkan kos bahan api. Data laluan sejuk disimpan dalam gudang data - pangkalan data yang direka untuk menyimpan sejumlah besar data yang tidak akan berubah dan boleh disoal dengan cepat dan mudah. Anda biasanya akan mempunyai tugas tetap dalam aplikasi awan anda yang akan dijalankan pada masa tetap setiap hari, minggu, atau bulan untuk memindahkan data daripada penyimpanan laluan suam ke dalam gudang data. ✅ Fikirkan tentang data yang telah anda tangkap setakat ini dalam pelajaran ini. Adakah ia data laluan panas, suam, atau sejuk? ## Kendalikan Acara GPS Menggunakan Kod Tanpa Pelayan Setelah data mengalir ke IoT Hub anda, anda boleh menulis kod tanpa pelayan untuk mendengar acara yang diterbitkan ke titik akhir yang serasi dengan Event-Hub. Ini adalah laluan suam - data ini akan disimpan dan digunakan dalam pelajaran seterusnya untuk pelaporan perjalanan. ![Menghantar telemetri GPS daripada peranti IoT ke IoT Hub, kemudian ke Azure Functions melalui pencetus event hub](../../../../../translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.ms.png) ### Tugas - Kendalikan Acara GPS Menggunakan Kod Tanpa Pelayan 1. Buat aplikasi Azure Functions menggunakan CLI Azure Functions. Gunakan runtime Python, dan buatnya dalam folder bernama `gps-trigger`, dan gunakan nama yang sama untuk nama projek Aplikasi Functions. Pastikan anda membuat persekitaran maya untuk ini. > ⚠️ Anda boleh merujuk kepada [arahan untuk mencipta Projek Azure Functions dari projek 2, pelajaran 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-a-serverless-application) jika diperlukan. 1. Tambahkan pencetus acara IoT Hub yang menggunakan titik akhir serasi Event Hub dari IoT Hub. > ⚠️ Anda boleh merujuk kepada [arahan untuk mencipta pencetus acara IoT Hub dari projek 2, pelajaran 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger) jika diperlukan. 1. Tetapkan rentetan sambungan titik akhir serasi Event Hub dalam fail `local.settings.json`, dan gunakan kunci untuk entri tersebut dalam fail `function.json`. 1. Gunakan aplikasi Azurite sebagai emulator storan tempatan. 1. Jalankan aplikasi fungsi anda untuk memastikan ia menerima acara daripada peranti GPS anda. Pastikan peranti IoT anda juga berjalan dan menghantar data GPS. ```output Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}} ``` ## Akaun Storan Azure ![Logo Storan Azure](../../../../../translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.ms.png) Akaun Storan Azure adalah perkhidmatan storan serba guna yang boleh menyimpan data dalam pelbagai cara. Anda boleh menyimpan data sebagai blob, dalam barisan, dalam jadual, atau sebagai fail, dan semuanya pada masa yang sama. ### Storan Blob Perkataan *Blob* bermaksud objek binari besar, tetapi telah menjadi istilah untuk sebarang data tidak berstruktur. Anda boleh menyimpan sebarang data dalam storan blob, daripada dokumen JSON yang mengandungi data IoT, kepada fail imej dan filem. Storan blob mempunyai konsep *kontena*, iaitu baldi bernama yang anda boleh simpan data di dalamnya, serupa dengan jadual dalam pangkalan data relasi. Kontena ini boleh mempunyai satu atau lebih folder untuk menyimpan blob, dan setiap folder boleh mengandungi folder lain, serupa dengan cara fail disimpan pada cakera keras komputer anda. Anda akan menggunakan storan blob dalam pelajaran ini untuk menyimpan data IoT. ✅ Lakukan penyelidikan: Baca tentang [Storan Blob Azure](https://docs.microsoft.com/azure/storage/blobs/storage-blobs-overview?WT.mc_id=academic-17441-jabenn) ### Storan Jadual Storan jadual membolehkan anda menyimpan data separa berstruktur. Storan jadual sebenarnya adalah pangkalan data NoSQL, jadi tidak memerlukan set jadual yang ditakrifkan terlebih dahulu, tetapi ia direka untuk menyimpan data dalam satu atau lebih jadual, dengan kunci unik untuk mentakrifkan setiap baris. ✅ Lakukan penyelidikan: Baca tentang [Storan Jadual Azure](https://docs.microsoft.com/azure/storage/tables/table-storage-overview?WT.mc_id=academic-17441-jabenn) ### Storan Barisan Storan barisan membolehkan anda menyimpan mesej sehingga 64KB dalam saiz dalam barisan. Anda boleh menambah mesej di belakang barisan, dan membacanya dari depan. Barisan menyimpan mesej tanpa had selagi masih ada ruang storan, jadi ia membolehkan mesej disimpan untuk jangka masa panjang, kemudian dibaca apabila diperlukan. Sebagai contoh, jika anda ingin menjalankan tugas bulanan untuk memproses data GPS, anda boleh menambahnya ke barisan setiap hari selama sebulan, kemudian pada akhir bulan memproses semua mesej dari barisan. ✅ Lakukan penyelidikan: Baca tentang [Storan Barisan Azure](https://docs.microsoft.com/azure/storage/queues/storage-queues-introduction?WT.mc_id=academic-17441-jabenn) ### Storan Fail Storan fail adalah storan fail di awan, dan sebarang aplikasi atau peranti boleh menyambung menggunakan protokol standard industri. Anda boleh menulis fail ke storan fail, kemudian memasangnya sebagai pemacu pada PC atau Mac anda. ✅ Lakukan penyelidikan: Baca tentang [Storan Fail Azure](https://docs.microsoft.com/azure/storage/files/storage-files-introduction?WT.mc_id=academic-17441-jabenn) ## Sambungkan kod tanpa pelayan anda ke storan Aplikasi fungsi anda kini perlu disambungkan ke storan blob untuk menyimpan mesej daripada IoT Hub. Terdapat 2 cara untuk melakukan ini: * Di dalam kod fungsi, sambungkan ke storan blob menggunakan SDK Python storan blob dan tulis data sebagai blob. * Gunakan pengikatan fungsi output untuk mengikat nilai pulangan fungsi ke storan blob dan membolehkan blob disimpan secara automatik. Dalam pelajaran ini, anda akan menggunakan SDK Python untuk melihat cara berinteraksi dengan storan blob. ![Menghantar telemetri GPS dari peranti IoT ke IoT Hub, kemudian ke Azure Functions melalui pencetus Event Hub, kemudian menyimpannya ke storan blob](../../../../../translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.ms.png) Data akan disimpan sebagai blob JSON dengan format berikut: ```json { "device_id": , "timestamp" :