# ذخیره داده‌های موقعیت مکانی ![نمای کلی درس به صورت اسکچ‌نوت](../../../../../translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.fa.jpg) > اسکچ‌نوت توسط [نیتیا ناراسیمهان](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](../../../../../3-transport/lessons/2-store-location-data) * [اتصال کد بدون سرور به ذخیره‌سازی](../../../../../3-transport/lessons/2-store-location-data) ## داده‌های ساختاریافته و غیرساختاریافته سیستم‌های کامپیوتری با داده‌ها سروکار دارند و این داده‌ها در اشکال و اندازه‌های مختلفی ظاهر می‌شوند. این داده‌ها می‌توانند از اعداد ساده تا متن‌های طولانی، ویدیوها، تصاویر و داده‌های IoT متغیر باشند. داده‌ها معمولاً به دو دسته تقسیم می‌شوند: *داده‌های ساختاریافته* و *داده‌های غیرساختاریافته*. * **داده‌های ساختاریافته** داده‌هایی هستند که ساختاری مشخص و ثابت دارند و معمولاً به جداول داده با روابط مشخص نگاشت می‌شوند. یک مثال از این نوع داده‌ها، اطلاعات شخصی افراد شامل نام، تاریخ تولد و آدرس است. * **داده‌های غیرساختاریافته** داده‌هایی هستند که ساختار مشخص و ثابتی ندارند و ممکن است ساختار آن‌ها به طور مکرر تغییر کند. یک مثال از این نوع داده‌ها، اسناد متنی یا صفحات گسترده است. ✅ تحقیق کنید: آیا می‌توانید مثال‌های دیگری از داده‌های ساختاریافته و غیرساختاریافته پیدا کنید؟ > 💁 همچنین داده‌های نیمه‌ساختاریافته وجود دارند که ساختار دارند اما در قالب جداول ثابت قرار نمی‌گیرند. داده‌های IoT معمولاً به عنوان داده‌های غیرساختاریافته در نظر گرفته می‌شوند. تصور کنید که قصد دارید دستگاه‌های IoT را به ناوگان وسایل نقلیه یک مزرعه بزرگ تجاری اضافه کنید. ممکن است بخواهید از دستگاه‌های مختلف برای انواع مختلف وسایل نقلیه استفاده کنید. برای مثال: * برای وسایل نقلیه کشاورزی مانند تراکتورها، داده‌های GPS برای اطمینان از کار در زمین‌های صحیح مورد نیاز است. * برای کامیون‌های حمل مواد غذایی به انبارها، داده‌های GPS به همراه داده‌های سرعت و شتاب برای اطمینان از رانندگی ایمن و داده‌های هویت راننده و زمان شروع/توقف برای رعایت قوانین محلی در مورد ساعات کاری راننده مورد نیاز است. * برای کامیون‌های یخچال‌دار، داده‌های دما برای اطمینان از خراب نشدن مواد غذایی در حین حمل و نقل مورد نیاز است. این داده‌ها ممکن است به طور مداوم تغییر کنند. برای مثال، اگر دستگاه IoT در کابین یک کامیون قرار داشته باشد، داده‌هایی که ارسال می‌کند ممکن است با تغییر تریلر تغییر کنند، مثلاً فقط در صورت استفاده از تریلر یخچال‌دار داده‌های دما ارسال شود. ✅ چه داده‌های دیگری از IoT ممکن است ثبت شوند؟ به انواع بارهایی که کامیون‌ها می‌توانند حمل کنند و همچنین داده‌های مربوط به نگهداری فکر کنید. این داده‌ها از وسیله‌ای به وسیله دیگر متفاوت است، اما همه آن‌ها به یک سرویس IoT برای پردازش ارسال می‌شوند. سرویس IoT باید بتواند این داده‌های غیرساختاریافته را پردازش کرده و آن‌ها را به گونه‌ای ذخیره کند که قابل جستجو یا تحلیل باشند، اما با ساختارهای مختلف این داده‌ها سازگار باشد. ### ذخیره‌سازی SQL در مقابل NoSQL پایگاه‌های داده خدماتی هستند که به شما امکان ذخیره و جستجوی داده‌ها را می‌دهند. پایگاه‌های داده به دو نوع تقسیم می‌شوند: SQL و NoSQL. #### پایگاه‌های داده SQL اولین پایگاه‌های داده، سیستم‌های مدیریت پایگاه داده رابطه‌ای (RDBMS) یا پایگاه داده رابطه‌ای بودند. این پایگاه‌ها به عنوان پایگاه‌های داده SQL نیز شناخته می‌شوند، زیرا از زبان پرس‌وجوی ساختاریافته (SQL) برای تعامل با آن‌ها جهت افزودن، حذف، به‌روزرسانی یا جستجوی داده‌ها استفاده می‌شود. این پایگاه‌ها شامل یک طرح‌واره (Schema) هستند - مجموعه‌ای مشخص از جداول داده، مشابه یک صفحه گسترده. هر جدول دارای چندین ستون نام‌گذاری شده است. هنگام وارد کردن داده‌ها، یک ردیف به جدول اضافه می‌کنید و مقادیر را در هر یک از ستون‌ها قرار می‌دهید. این ساختار داده‌ها را بسیار ثابت نگه می‌دارد - اگرچه می‌توانید ستون‌ها را خالی بگذارید، اما اگر بخواهید یک ستون جدید اضافه کنید، باید این کار را در پایگاه داده انجام دهید و مقادیر را برای ردیف‌های موجود پر کنید. این پایگاه‌ها رابطه‌ای هستند - به این معنا که یک جدول می‌تواند با جدول دیگری رابطه داشته باشد. ![یک پایگاه داده رابطه‌ای با شناسه جدول کاربر که به ستون شناسه کاربر جدول خریدها مرتبط است و شناسه جدول محصولات که به شناسه محصول جدول خریدها مرتبط است](../../../../../translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.fa.png) برای مثال، اگر جزئیات شخصی کاربران را در یک جدول ذخیره کنید، برای هر کاربر یک شناسه یکتا خواهید داشت که در یک ردیف در جدولی که شامل نام و آدرس کاربر است استفاده می‌شود. اگر بخواهید جزئیات دیگری درباره آن کاربر، مانند خریدهای او، در جدول دیگری ذخیره کنید، یک ستون در جدول جدید برای شناسه کاربر خواهید داشت. هنگام جستجوی یک کاربر، می‌توانید از شناسه او برای دریافت جزئیات شخصی از یک جدول و خریدهای او از جدول دیگر استفاده کنید. پایگاه‌های داده 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.fa.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.fa.png) ### وظیفه - ارسال داده‌های GPS به یک IoT Hub 1. یک IoT Hub جدید با استفاده از طرح رایگان ایجاد کنید. > ⚠️ می‌توانید در صورت نیاز به [دستورالعمل‌های ایجاد IoT Hub از پروژه ۲، درس ۴](../../../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-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) پیدا کنید. کد دستگاه خود را اجرا کنید و اطمینان حاصل کنید که پیام‌ها با استفاده از دستور CLI `az iot hub monitor-events` به IoT Hub ارسال می‌شوند. ## مسیرهای داغ، گرم و سرد داده‌هایی که از یک دستگاه IoT به فضای ابری جریان می‌یابند، همیشه به صورت بلادرنگ پردازش نمی‌شوند. برخی داده‌ها نیاز به پردازش بلادرنگ دارند، برخی دیگر می‌توانند کمی بعد پردازش شوند، و برخی دیگر می‌توانند خیلی دیرتر پردازش شوند. جریان داده‌ها به خدمات مختلف که داده‌ها را در زمان‌های مختلف پردازش می‌کنند، به مسیرهای داغ، گرم و سرد اشاره دارد. ### مسیر داغ مسیر داغ به داده‌هایی اشاره دارد که نیاز به پردازش بلادرنگ یا نزدیک به بلادرنگ دارند. شما از داده‌های مسیر داغ برای هشدارها استفاده می‌کنید، مانند دریافت هشدارهایی که یک وسیله نقلیه به یک انبار نزدیک می‌شود یا دمای یک کامیون یخچال‌دار خیلی بالا است. برای استفاده از داده‌های مسیر داغ، کد شما به رویدادها به محض دریافت توسط خدمات ابری پاسخ می‌دهد. ### مسیر گرم مسیر گرم به داده‌هایی اشاره دارد که می‌توانند کمی بعد از دریافت پردازش شوند، برای مثال برای گزارش‌گیری یا تحلیل کوتاه‌مدت. شما از داده‌های مسیر گرم برای گزارش‌های روزانه مسافت طی‌شده وسایل نقلیه استفاده می‌کنید، با استفاده از داده‌های جمع‌آوری‌شده روز قبل. داده‌های مسیر گرم پس از دریافت توسط سرویس ابری در نوعی ذخیره‌سازی که به سرعت قابل دسترسی است ذخیره می‌شوند. ### مسیر سرد مسیر سرد به داده‌های تاریخی اشاره دارد، داده‌هایی که برای مدت طولانی ذخیره می‌شوند تا هر زمان که لازم باشد پردازش شوند. برای مثال، می‌توانید از مسیر سرد برای دریافت گزارش‌های سالانه مسافت طی‌شده وسایل نقلیه استفاده کنید یا تحلیل‌هایی روی مسیرها انجام دهید تا بهینه‌ترین مسیر برای کاهش هزینه سوخت پیدا شود. داده‌های مسیر سرد در انبارهای داده ذخیره می‌شوند - پایگاه‌های داده‌ای که برای ذخیره حجم زیادی از داده‌هایی که هرگز تغییر نمی‌کنند طراحی شده‌اند و می‌توان به سرعت و به راحتی آن‌ها را جستجو کرد. معمولاً یک کار منظم در برنامه ابری شما وجود دارد که در زمان مشخصی هر روز، هفته یا ماه اجرا می‌شود تا داده‌ها را از ذخیره‌سازی مسیر گرم به انبار داده منتقل کند. ✅ به داده‌هایی که تاکنون در این درس‌ها جمع‌آوری کرده‌اید فکر کنید. آیا این داده‌ها مسیر داغ، گرم یا سرد هستند؟ ## مدیریت رویدادهای GPS با استفاده از کد بدون سرور پس از جریان یافتن داده‌ها به IoT Hub، می‌توانید کدی بدون سرور بنویسید تا به رویدادهایی که به نقطه پایانی سازگار با Event Hub منتشر می‌شوند گوش دهد. این مسیر گرم است - این داده‌ها ذخیره می‌شوند و در درس بعدی برای گزارش‌گیری از مسیر استفاده خواهند شد. ![ارسال داده‌های تله‌متری GPS از یک دستگاه IoT به IoT Hub، سپس به Azure Functions از طریق یک تریگر Event Hub](../../../../../translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.fa.png) ### وظیفه - مدیریت رویدادهای GPS با استفاده از کد بدون سرور 1. یک برنامه Azure Functions با استفاده از CLI مربوط به Azure Functions ایجاد کنید. از زمان اجرای Python استفاده کنید و آن را در پوشه‌ای به نام `gps-trigger` ایجاد کنید و از همین نام برای نام پروژه برنامه Functions استفاده کنید. مطمئن شوید که یک محیط مجازی برای استفاده ایجاد کرده‌اید. > ⚠️ می‌توانید در صورت نیاز به [دستورالعمل‌های ایجاد یک پروژه Azure Functions از پروژه ۲، درس ۵](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-a-serverless-application) مراجعه کنید. 1. یک تریگر رویداد IoT Hub اضافه کنید که از نقطه پایانی سازگار با Event Hub در IoT Hub استفاده می‌کند. > ⚠️ می‌توانید به [دستورالعمل‌های ایجاد یک تریگر رویداد IoT Hub از پروژه ۲، درس ۵](../../../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 ![لوگوی Azure Storage](../../../../../translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.fa.png) حساب‌های ذخیره‌سازی Azure یک سرویس ذخیره‌سازی چندمنظوره است که می‌تواند داده‌ها را به روش‌های مختلف ذخیره کند. شما می‌توانید داده‌ها را به صورت blob، در صف‌ها، در جداول یا به صورت فایل ذخیره کنید و همه این‌ها به طور همزمان امکان‌پذیر است. ### ذخیره‌سازی Blob کلمه *Blob* به معنای اشیاء بزرگ باینری است، اما به اصطلاحی برای هر نوع داده بدون ساختار تبدیل شده است. شما می‌توانید هر نوع داده‌ای را در ذخیره‌سازی blob ذخیره کنید، از اسناد JSON حاوی داده‌های IoT گرفته تا فایل‌های تصویری و ویدیویی. ذخیره‌سازی blob دارای مفهومی به نام *containers* است، که به عنوان سطل‌هایی نام‌گذاری شده‌اند که می‌توانید داده‌ها را در آن‌ها ذخیره کنید، مشابه جداول در یک پایگاه داده رابطه‌ای. این کانتینرها می‌توانند یک یا چند پوشه برای ذخیره blob‌ها داشته باشند و هر پوشه می‌تواند شامل پوشه‌های دیگری باشد، مشابه نحوه ذخیره فایل‌ها در هارد دیسک کامپیوتر شما. شما در این درس از ذخیره‌سازی blob برای ذخیره داده‌های IoT استفاده خواهید کرد. ✅ تحقیق کنید: درباره [ذخیره‌سازی Blob در Azure](https://docs.microsoft.com/azure/storage/blobs/storage-blobs-overview?WT.mc_id=academic-17441-jabenn) مطالعه کنید. ### ذخیره‌سازی جدول ذخیره‌سازی جدول به شما امکان می‌دهد داده‌های نیمه‌ساختاریافته را ذخیره کنید. ذخیره‌سازی جدول در واقع یک پایگاه داده NoSQL است، بنابراین نیازی به تعریف مجموعه‌ای از جداول از پیش ندارد، اما برای ذخیره داده‌ها در یک یا چند جدول طراحی شده است، با کلیدهای منحصربه‌فرد برای تعریف هر سطر. ✅ تحقیق کنید: درباره [ذخیره‌سازی جدول در Azure](https://docs.microsoft.com/azure/storage/tables/table-storage-overview?WT.mc_id=academic-17441-jabenn) مطالعه کنید. ### ذخیره‌سازی صف ذخیره‌سازی صف به شما امکان می‌دهد پیام‌هایی با حداکثر اندازه ۶۴ کیلوبایت را در یک صف ذخیره کنید. شما می‌توانید پیام‌ها را به انتهای صف اضافه کنید و از ابتدای صف بخوانید. صف‌ها پیام‌ها را به طور نامحدود ذخیره می‌کنند تا زمانی که فضای ذخیره‌سازی موجود باشد، بنابراین امکان ذخیره پیام‌ها برای مدت طولانی و سپس خواندن آن‌ها در زمان مورد نیاز را فراهم می‌کند. به عنوان مثال، اگر بخواهید یک کار ماهانه برای پردازش داده‌های GPS اجرا کنید، می‌توانید هر روز پیام‌ها را به صف اضافه کنید و سپس در پایان ماه همه پیام‌ها را از صف پردازش کنید. ✅ تحقیق کنید: درباره [ذخیره‌سازی صف در Azure](https://docs.microsoft.com/azure/storage/queues/storage-queues-introduction?WT.mc_id=academic-17441-jabenn) مطالعه کنید. ### ذخیره‌سازی فایل ذخیره‌سازی فایل به معنای ذخیره فایل‌ها در فضای ابری است و هر برنامه یا دستگاهی می‌تواند با استفاده از پروتکل‌های استاندارد صنعتی به آن متصل شود. شما می‌توانید فایل‌ها را در ذخیره‌سازی فایل بنویسید و سپس آن را به عنوان یک درایو در کامپیوتر خود نصب کنید. ✅ تحقیق کنید: درباره [ذخیره‌سازی فایل در Azure](https://docs.microsoft.com/azure/storage/files/storage-files-introduction?WT.mc_id=academic-17441-jabenn) مطالعه کنید. ## اتصال کد بدون سرور به ذخیره‌سازی اکنون برنامه توابع شما باید به ذخیره‌سازی blob متصل شود تا پیام‌ها را از IoT Hub ذخیره کند. دو روش برای انجام این کار وجود دارد: * در داخل کد تابع، با استفاده از SDK پایتون برای ذخیره‌سازی blob به آن متصل شوید و داده‌ها را به صورت blob بنویسید. * از یک اتصال خروجی تابع استفاده کنید تا مقدار بازگشتی تابع به ذخیره‌سازی blob متصل شود و blob به طور خودکار ذخیره شود. در این درس، شما از SDK پایتون استفاده خواهید کرد تا ببینید چگونه می‌توان با ذخیره‌سازی blob تعامل داشت. ![ارسال داده‌های GPS از یک دستگاه IoT به IoT Hub، سپس به Azure Functions از طریق یک تریگر Event Hub، و سپس ذخیره آن در ذخیره‌سازی blob](../../../../../translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.fa.png) داده‌ها به صورت یک blob JSON با فرمت زیر ذخیره خواهند شد: ```json { "device_id": , "timestamp" :