|
4 weeks ago | |
---|---|---|
.. | ||
README.md | 4 weeks ago | |
assignment.md | 4 weeks ago |
README.md
اسٹور لوکیشن ڈیٹا
خاکہ نگاری: نیتیا نرسمہن۔ بڑی تصویر دیکھنے کے لیے تصویر پر کلک کریں۔
لیکچر سے پہلے کا کوئز
تعارف
پچھلے سبق میں، آپ نے سیکھا کہ GPS سینسر کا استعمال کرکے لوکیشن ڈیٹا کیسے حاصل کیا جاتا ہے۔ اس ڈیٹا کو کسی کھانے سے لدے ٹرک کی لوکیشن اور اس کے سفر کو ظاہر کرنے کے لیے استعمال کرنے کے لیے، اسے کلاؤڈ میں کسی IoT سروس پر بھیجنا اور پھر کہیں محفوظ کرنا ضروری ہے۔
اس سبق میں آپ IoT ڈیٹا کو محفوظ کرنے کے مختلف طریقے سیکھیں گے اور یہ بھی جانیں گے کہ سرور لیس کوڈ کا استعمال کرتے ہوئے اپنے IoT سروس کا ڈیٹا کیسے محفوظ کریں۔
اس سبق میں ہم درج ذیل موضوعات کا احاطہ کریں گے:
- ساختہ اور غیر ساختہ ڈیٹا
- GPS ڈیٹا کو IoT ہب پر بھیجیں
- ہاٹ، وارم، اور کولڈ راستے
- GPS ایونٹس کو سرور لیس کوڈ کے ذریعے ہینڈل کریں
- Azure اسٹوریج اکاؤنٹس
- اپنے سرور لیس کوڈ کو اسٹوریج سے جوڑیں
ساختہ اور غیر ساختہ ڈیٹا
کمپیوٹر سسٹمز ڈیٹا کے ساتھ کام کرتے ہیں، اور یہ ڈیٹا مختلف شکلوں اور سائز میں آتا ہے۔ یہ ایک عدد سے لے کر بڑی مقدار میں متن، ویڈیوز، تصاویر، اور IoT ڈیٹا تک مختلف ہو سکتا ہے۔ عام طور پر ڈیٹا کو دو اقسام میں تقسیم کیا جا سکتا ہے - ساختہ ڈیٹا اور غیر ساختہ ڈیٹا۔
-
ساختہ ڈیٹا وہ ڈیٹا ہے جس کی ایک واضح، سخت ساخت ہوتی ہے جو تبدیل نہیں ہوتی اور عام طور پر ڈیٹا کی ٹیبلز کے ساتھ تعلقات کو ظاہر کرتی ہے۔ ایک مثال کسی شخص کی تفصیلات ہیں جیسے ان کا نام، تاریخ پیدائش، اور پتہ۔
-
غیر ساختہ ڈیٹا وہ ڈیٹا ہے جس کی کوئی واضح، سخت ساخت نہیں ہوتی، بشمول وہ ڈیٹا جو اکثر اپنی ساخت تبدیل کر سکتا ہے۔ ایک مثال دستاویزات ہیں جیسے تحریری دستاویزات یا اسپریڈشیٹس۔
✅ تحقیق کریں: کیا آپ ساختہ اور غیر ساختہ ڈیٹا کی مزید مثالیں سوچ سکتے ہیں؟
💁 نیم ساختہ ڈیٹا بھی ہوتا ہے جو ساختہ ہوتا ہے لیکن مقررہ ٹیبلز میں فٹ نہیں ہوتا۔
IoT ڈیٹا کو عام طور پر غیر ساختہ ڈیٹا سمجھا جاتا ہے۔
تصور کریں کہ آپ ایک بڑے کمرشل فارم کے گاڑیوں کے بیڑے میں IoT ڈیوائسز شامل کر رہے ہیں۔ آپ مختلف قسم کی گاڑیوں کے لیے مختلف ڈیوائسز استعمال کرنا چاہیں گے۔ مثال کے طور پر:
- فارم کی گاڑیوں جیسے ٹریکٹرز کے لیے آپ GPS ڈیٹا چاہتے ہیں تاکہ یہ یقینی بنایا جا سکے کہ وہ صحیح کھیتوں پر کام کر رہے ہیں۔
- کھانے کو گوداموں تک لے جانے والے ڈلیوری ٹرکوں کے لیے آپ GPS ڈیٹا کے ساتھ رفتار اور ایکسیلیریشن ڈیٹا چاہتے ہیں تاکہ ڈرائیور کی حفاظت کو یقینی بنایا جا سکے، اور ڈرائیور کی شناخت اور اسٹارٹ/اسٹاپ ڈیٹا تاکہ مقامی قوانین کے مطابق کام کے اوقات کی تعمیل کو یقینی بنایا جا سکے۔
- ریفریجریٹڈ ٹرکوں کے لیے آپ درجہ حرارت کا ڈیٹا بھی چاہتے ہیں تاکہ یہ یقینی بنایا جا سکے کہ کھانے کو ٹرانزٹ میں خراب ہونے سے بچایا جا سکے۔
یہ ڈیٹا مسلسل تبدیل ہو سکتا ہے۔ مثال کے طور پر، اگر IoT ڈیوائس کسی ٹرک کیبن میں ہے، تو وہ ڈیٹا جو یہ بھیجتا ہے ٹریلر کے بدلنے کے ساتھ تبدیل ہو سکتا ہے، جیسے صرف ریفریجریٹڈ ٹریلر کے استعمال پر درجہ حرارت کا ڈیٹا بھیجنا۔
✅ اور کون سا IoT ڈیٹا حاصل کیا جا سکتا ہے؟ ان چیزوں کے بارے میں سوچیں جو ٹرک لے جا سکتے ہیں، اور دیکھ بھال کے ڈیٹا کے بارے میں بھی۔
یہ ڈیٹا گاڑی سے گاڑی تک مختلف ہوتا ہے، لیکن یہ سب ایک ہی IoT سروس پر پروسیسنگ کے لیے بھیجا جاتا ہے۔ IoT سروس کو اس غیر ساختہ ڈیٹا کو پروسیس کرنے کے قابل ہونا چاہیے، اسے اس طرح محفوظ کرنا چاہیے کہ اسے تلاش یا تجزیہ کیا جا سکے، اور اس ڈیٹا کی مختلف ساختوں کے ساتھ کام کر سکے۔
SQL بمقابلہ NoSQL اسٹوریج
ڈیٹا بیس وہ سروسز ہیں جو آپ کو ڈیٹا محفوظ کرنے اور اس پر سوالات کرنے کی اجازت دیتی ہیں۔ ڈیٹا بیس دو اقسام میں آتے ہیں - SQL اور NoSQL۔
SQL ڈیٹا بیس
پہلے ڈیٹا بیس ریلیشنل ڈیٹا بیس مینجمنٹ سسٹمز (RDBMS) تھے، یا ریلیشنل ڈیٹا بیس۔ انہیں SQL ڈیٹا بیس بھی کہا جاتا ہے کیونکہ ان کے ساتھ تعامل کرنے کے لیے اسٹرکچرڈ کوئری لینگویج (SQL) استعمال کی جاتی ہے۔ یہ ڈیٹا بیس ایک اسکیمہ پر مشتمل ہوتے ہیں - ڈیٹا کی ایک واضح طور پر بیان کردہ سیٹ ٹیبلز، جو اسپریڈشیٹ کی طرح ہوتی ہیں۔ ہر ٹیبل میں متعدد نامزد کالم ہوتے ہیں۔ جب آپ ڈیٹا شامل کرتے ہیں، تو آپ ٹیبل میں ایک قطار شامل کرتے ہیں، ہر کالم میں اقدار ڈال کر۔ یہ ڈیٹا کو ایک سخت ساخت میں رکھتا ہے - اگرچہ آپ کالمز کو خالی چھوڑ سکتے ہیں، لیکن اگر آپ نیا کالم شامل کرنا چاہتے ہیں تو آپ کو ڈیٹا بیس پر یہ کرنا ہوگا، موجودہ قطاروں کے لیے اقدار کو بھرنا ہوگا۔ یہ ڈیٹا بیس ریلیشنل ہوتے ہیں - یعنی ایک ٹیبل کا دوسرے کے ساتھ تعلق ہو سکتا ہے۔
مثال کے طور پر، اگر آپ کسی صارف کی ذاتی تفصیلات کو ایک ٹیبل میں محفوظ کرتے ہیں، تو آپ کے پاس ہر صارف کے لیے ایک منفرد داخلی ID ہوگا جو ایک ٹیبل میں صارف کے نام اور پتے کے ساتھ استعمال ہوگا۔ اگر آپ اس صارف کی دیگر تفصیلات، جیسے ان کی خریداری، کو کسی دوسرے ٹیبل میں محفوظ کرنا چاہتے ہیں، تو آپ کے پاس نئے ٹیبل میں اس صارف کے ID کے لیے ایک کالم ہوگا۔ جب آپ کسی صارف کو دیکھتے ہیں، تو آپ ان کے ID کا استعمال کرکے ان کی ذاتی تفصیلات ایک ٹیبل سے اور ان کی خریداری دوسری ٹیبل سے حاصل کر سکتے ہیں۔
SQL ڈیٹا بیس ساختہ ڈیٹا کو محفوظ کرنے کے لیے مثالی ہیں، اور جب آپ یہ یقینی بنانا چاہتے ہیں کہ ڈیٹا آپ کی اسکیمہ سے میل کھاتا ہے۔
✅ اگر آپ نے پہلے SQL استعمال نہیں کیا ہے، تو SQL کا ویکیپیڈیا صفحہ پڑھنے کے لیے وقت نکالیں۔
کچھ مشہور SQL ڈیٹا بیس میں Microsoft SQL Server، MySQL، اور PostgreSQL شامل ہیں۔
✅ تحقیق کریں: ان SQL ڈیٹا بیسز اور ان کی صلاحیتوں کے بارے میں پڑھیں۔
NoSQL ڈیٹا بیس
NoSQL ڈیٹا بیس کو NoSQL کہا جاتا ہے کیونکہ ان میں SQL ڈیٹا بیس کی طرح سخت ساخت نہیں ہوتی۔ انہیں دستاویز ڈیٹا بیس بھی کہا جاتا ہے کیونکہ وہ غیر ساختہ ڈیٹا جیسے دستاویزات کو محفوظ کر سکتے ہیں۔
💁 ان کے نام کے باوجود، کچھ NoSQL ڈیٹا بیس آپ کو ڈیٹا پر سوالات کرنے کے لیے SQL استعمال کرنے کی اجازت دیتے ہیں۔
NoSQL ڈیٹا بیس میں پہلے سے متعین اسکیمہ نہیں ہوتا جو ڈیٹا کو محفوظ کرنے کے طریقے کو محدود کرے، بلکہ آپ کسی بھی غیر ساختہ ڈیٹا کو داخل کر سکتے ہیں، عام طور پر JSON دستاویزات کا استعمال کرتے ہوئے۔ ان دستاویزات کو فولڈرز میں منظم کیا جا سکتا ہے، جیسے آپ کے کمپیوٹر پر فائلز۔ ہر دستاویز میں دوسرے دستاویزات سے مختلف فیلڈز ہو سکتے ہیں - مثال کے طور پر، اگر آپ اپنے فارم کی گاڑیوں سے IoT ڈیٹا محفوظ کر رہے ہیں، تو کچھ میں ایکسیلرومیٹر اور رفتار کے ڈیٹا کے لیے فیلڈز ہو سکتے ہیں، جبکہ دیگر میں ٹریلر کے درجہ حرارت کے لیے فیلڈز ہو سکتے ہیں۔ اگر آپ کسی نئے ٹرک کی قسم شامل کرتے ہیں، جیسے ایک ایسا ٹرک جس میں وزن کو ٹریک کرنے کے لیے بلٹ ان اسکیلز ہوں، تو آپ کا IoT ڈیوائس اس نئے فیلڈ کو شامل کر سکتا ہے اور اسے ڈیٹا بیس میں کسی تبدیلی کے بغیر محفوظ کیا جا سکتا ہے۔
کچھ مشہور NoSQL ڈیٹا بیس میں Azure CosmosDB، MongoDB، اور CouchDB شامل ہیں۔
✅ تحقیق کریں: ان NoSQL ڈیٹا بیسز اور ان کی صلاحیتوں کے بارے میں پڑھیں۔
اس سبق میں، آپ IoT ڈیٹا کو محفوظ کرنے کے لیے NoSQL اسٹوریج استعمال کریں گے۔
GPS ڈیٹا کو IoT ہب پر بھیجیں
پچھلے سبق میں آپ نے اپنے IoT ڈیوائس سے GPS سینسر کے ذریعے GPS ڈیٹا حاصل کیا۔ اس IoT ڈیٹا کو کلاؤڈ میں محفوظ کرنے کے لیے، آپ کو اسے IoT سروس پر بھیجنا ہوگا۔ ایک بار پھر، آپ Azure IoT Hub استعمال کریں گے، وہی IoT کلاؤڈ سروس جو آپ نے پچھلے پروجیکٹ میں استعمال کی تھی۔
کام - GPS ڈیٹا کو IoT ہب پر بھیجیں
-
ایک نیا IoT ہب مفت ٹائر کا استعمال کرتے ہوئے بنائیں۔
⚠️ اگر ضرورت ہو تو پروجیکٹ 2، سبق 4 سے IoT ہب بنانے کی ہدایات کا حوالہ دیں۔
ایک نیا ریسورس گروپ بنانا یاد رکھیں۔ نئے ریسورس گروپ کا نام
gps-sensor
رکھیں، اور نئے IoT ہب کا ایک منفرد نامgps-sensor
پر مبنی رکھیں، جیسےgps-sensor-<آپ کا نام>
۔💁 اگر آپ کے پاس پچھلے پروجیکٹ سے IoT ہب موجود ہے، تو آپ اسے دوبارہ استعمال کر سکتے ہیں۔ دیگر سروسز بناتے وقت اس IoT ہب کے نام اور اس کے ریسورس گروپ کا استعمال کرنا یاد رکھیں۔
-
IoT ہب میں ایک نیا ڈیوائس شامل کریں۔ اس ڈیوائس کا نام
gps-sensor
رکھیں۔ ڈیوائس کے لیے کنکشن اسٹرنگ حاصل کریں۔ -
اپنے ڈیوائس کے کوڈ کو اپ ڈیٹ کریں تاکہ GPS ڈیٹا کو نئے IoT ہب پر بھیجا جا سکے، پچھلے مرحلے سے ڈیوائس کنکشن اسٹرنگ کا استعمال کرتے ہوئے۔
⚠️ اگر ضرورت ہو تو پروجیکٹ 2، سبق 4 سے اپنے ڈیوائس کو IoT سروس سے جوڑنے کی ہدایات کا حوالہ دیں۔
-
GPS ڈیٹا کو JSON کے درج ذیل فارمیٹ میں بھیجیں:
{ "gps" : { "lat" : <latitude>, "lon" : <longitude> } }
-
GPS ڈیٹا ہر منٹ بھیجیں تاکہ آپ اپنی روزانہ کی میسج الاٹمنٹ ختم نہ کریں۔
اگر آپ Wio Terminal استعمال کر رہے ہیں، تو تمام ضروری لائبریریاں شامل کرنا یاد رکھیں، اور NTP سرور کا استعمال کرتے ہوئے وقت سیٹ کریں۔ آپ کے کوڈ کو یہ بھی یقینی بنانا ہوگا کہ GPS لوکیشن بھیجنے سے پہلے سیریل پورٹ سے تمام ڈیٹا پڑھ لیا گیا ہو، پچھلے سبق کے موجودہ کوڈ کا استعمال کرتے ہوئے۔ JSON دستاویز بنانے کے لیے درج ذیل کوڈ استعمال کریں:
DynamicJsonDocument doc(1024);
doc["gps"]["lat"] = gps.location.lat();
doc["gps"]["lon"] = gps.location.lng();
اگر آپ ورچوئل IoT ڈیوائس استعمال کر رہے ہیں، تو ورچوئل ماحول کا استعمال کرتے ہوئے تمام ضروری لائبریریاں انسٹال کرنا یاد رکھیں۔
Raspberry Pi اور ورچوئل IoT ڈیوائس دونوں کے لیے، پچھلے سبق کے موجودہ کوڈ کا استعمال کرتے ہوئے طول بلد اور عرض بلد کی اقدار حاصل کریں، پھر انہیں درست JSON فارمیٹ میں درج ذیل کوڈ کے ساتھ بھیجیں:
message_json = { "gps" : { "lat":lat, "lon":lon } }
print("Sending telemetry", message_json)
message = Message(json.dumps(message_json))
💁 آپ اس کوڈ کو code/wio-terminal، code/pi یا code/virtual-device فولڈر میں تلاش کر سکتے ہیں۔
اپنے ڈیوائس کا کوڈ چلائیں اور az iot hub monitor-events
CLI کمانڈ کا استعمال کرتے ہوئے یہ یقینی بنائیں کہ پیغامات IoT ہب میں جا رہے ہیں۔
ہاٹ، وارم، اور کولڈ راستے
IoT ڈیوائس سے کلاؤڈ تک ڈیٹا ہمیشہ حقیقی وقت میں پروسیس نہیں کیا جاتا۔ کچھ ڈیٹا کو حقیقی وقت میں پروسیس کرنے کی ضرورت ہوتی ہے، کچھ کو تھوڑے وقت بعد، اور کچھ کو بہت بعد میں۔ مختلف اوقات میں ڈیٹا کو پروسیس کرنے والی مختلف سروسز کے بہاؤ کو ہاٹ، وارم، اور کولڈ راستے کہا جاتا ہے۔
ہاٹ راستہ
ہاٹ راستہ اس ڈیٹا کو ظاہر کرتا ہے جسے حقیقی وقت یا قریب حقیقی وقت میں پروسیس کرنے کی ضرورت ہوتی ہے۔ آپ ہاٹ راستے کے ڈیٹا کو الرٹس کے لیے استعمال کریں گے، جیسے یہ الرٹ کہ کوئی گاڑی ڈپو کے قریب پہنچ رہی ہے، یا ریفریجریٹڈ ٹرک میں درجہ حرارت بہت زیادہ ہے۔
ہاٹ راستے کے ڈیٹا کو استعمال کرنے کے لیے، آپ کا کوڈ آپ کی کلاؤڈ سروسز کے ذریعے موصول ہونے والے ایونٹس پر فوراً ردعمل دے گا۔
وارم راستہ
وارم راستہ اس ڈیٹا کو ظاہر کرتا ہے جسے موصول ہونے کے تھوڑے وقت بعد پروسیس کیا جا سکتا ہے، جیسے رپورٹنگ یا قلیل مدتی تجزیات کے لیے۔ آپ وارم راستے کے ڈیٹا کو روزانہ کی رپورٹس کے لیے استعمال کریں گے، جیسے گاڑیوں کے مائلیج کی رپورٹس۔
وارم راستے کا ڈیٹا کلاؤڈ سروس کے ذریعے موصول ہونے کے بعد کسی ایسے اسٹوریج میں محفوظ کیا جاتا ہے جس تک جلدی رسائی حاصل کی جا سکے۔
کولڈ راستہ
کولڈ راستہ تاریخی ڈیٹا کو ظاہر کرتا ہے، جو طویل مدتی کے لیے محفوظ کیا جاتا ہے تاکہ جب بھی ضرورت ہو پروسیس کیا جا سکے۔ مثال کے طور پر، آپ کولڈ راستے کو گاڑیوں کے سالانہ مائلیج کی رپورٹس حاصل کرنے کے لیے استعمال کر سکتے ہیں، یا راستوں پر تجزیہ کرنے کے لیے تاکہ ایندھن کے اخراجات کو کم کرنے کے لیے سب سے زیادہ مؤثر راستہ تلاش کیا جا سکے۔
کولڈ راستے کا ڈیٹا ڈیٹا ویئر ہاؤسز میں محفوظ کیا جاتا ہے - ایسے ڈیٹا بیس جو بڑی مقدار میں ڈیٹا کو محفوظ کرنے کے لیے ڈیزائن کیے گئے ہیں جو کبھی تبدیل نہیں ہوگا اور جن پر جلدی اور آسانی سے سوالات کیے جا سکتے ہیں۔ آپ کے کلاؤڈ ایپلیکیشن میں عام طور پر ایک باقاعدہ کام ہوگا جو روزانہ، ہفتہ وار، یا ماہانہ وقت پر وارم راستے کے اسٹوریج سے ڈیٹا کو ڈیٹا ویئر ہاؤس میں منتقل کرے گا۔
✅ ان اسباق میں آپ نے جو ڈیٹا حاصل کیا ہے، اس کے بارے میں سوچیں۔ کیا یہ ہاٹ، وارم، یا کولڈ راستے کا ڈیٹا ہے؟
GPS ایونٹس کو سرور لیس کوڈ کے ذریعے ہینڈل کریں
ایک بار جب ڈیٹا آپ کے IoT ہب میں آنا شروع ہو جائے، تو آپ کچھ سرور لیس کوڈ لکھ سکتے ہیں جو ایونٹس کو سننے کے لیے Event-Hub کے ہم آہنگ اینڈ پوائنٹ پر شائع کرے۔ یہ وارم راستہ ہے - یہ ڈیٹا محفوظ کیا جائے گا اور اگلے سبق میں سفر کی رپورٹنگ کے لیے استعمال ہوگا۔
کام - GPS ایونٹس کو سرور لیس کوڈ کے ذریعے ہینڈل کریں
- Azure Functions CLI کا استعمال کرتے ہوئے ایک Azure فنکشنز ایپ بنائیں۔ Python رن ٹائم استعمال کریں، اور اسے
gps-trigger
نامی فولڈر میں بنائیں، اور فنکشنز ایپ پروجیکٹ کا نام بھی یہی رکھیں۔ اس کے لیے ایک ورچوئل ماحول بنانا یقینی بنائیں۔
⚠️ آپ Azure Functions پروجیکٹ بنانے کے لیے ہدایات، پروجیکٹ 2، سبق 5 سے رجوع کر سکتے ہیں اگر ضرورت ہو۔
-
ایک IoT Hub ایونٹ ٹرگر شامل کریں جو IoT Hub کے ایونٹ ہب کے ہم آہنگ اینڈ پوائنٹ کو استعمال کرے۔
⚠️ اگر ضرورت ہو تو آپ پروجیکٹ 2، سبق 5 سے IoT Hub ایونٹ ٹرگر بنانے کی ہدایات دیکھ سکتے ہیں۔
-
local.settings.json
فائل میں ایونٹ ہب کے ہم آہنگ اینڈ پوائنٹ کنکشن اسٹرنگ سیٹ کریں، اور اس اندراج کے لیے کلید کوfunction.json
فائل میں استعمال کریں۔ -
Azurite ایپ کو مقامی اسٹوریج ایمولیٹر کے طور پر استعمال کریں۔
-
اپنی فنکشنز ایپ چلائیں تاکہ یہ یقینی بنایا جا سکے کہ یہ آپ کے GPS ڈیوائس سے ایونٹس وصول کر رہی ہے۔ یہ بھی یقینی بنائیں کہ آپ کا IoT ڈیوائس چل رہا ہے اور GPS ڈیٹا بھیج رہا ہے۔
Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}}
Azure اسٹوریج اکاؤنٹس
Azure اسٹوریج اکاؤنٹس ایک عمومی مقصد کا اسٹوریج سروس ہے جو مختلف طریقوں سے ڈیٹا کو محفوظ کر سکتا ہے۔ آپ ڈیٹا کو blobs، queues، tables، یا files کی صورت میں محفوظ کر سکتے ہیں، اور یہ سب ایک ساتھ ممکن ہے۔
Blob اسٹوریج
لفظ Blob کا مطلب ہے "بائنری بڑے آبجیکٹس"، لیکن یہ کسی بھی غیر ساختہ ڈیٹا کے لیے استعمال ہونے والی اصطلاح بن چکی ہے۔ آپ blob اسٹوریج میں کسی بھی قسم کا ڈیٹا محفوظ کر سکتے ہیں، جیسے IoT ڈیٹا پر مشتمل JSON دستاویزات، تصاویر، اور فلموں کی فائلیں۔ Blob اسٹوریج میں containers کا تصور ہوتا ہے، جو نامزد buckets ہیں جن میں آپ ڈیٹا محفوظ کر سکتے ہیں، جیسے relational database میں tables۔ ان containers میں ایک یا زیادہ فولڈرز ہو سکتے ہیں blobs کو محفوظ کرنے کے لیے، اور ہر فولڈر میں مزید فولڈرز ہو سکتے ہیں، جیسے آپ کے کمپیوٹر کی ہارڈ ڈسک پر فائلیں محفوظ ہوتی ہیں۔
آپ اس سبق میں IoT ڈیٹا محفوظ کرنے کے لیے blob اسٹوریج استعمال کریں گے۔
✅ تحقیق کریں: Azure Blob Storage کے بارے میں پڑھیں۔
Table اسٹوریج
Table اسٹوریج آپ کو نیم ساختہ ڈیٹا محفوظ کرنے کی اجازت دیتا ہے۔ Table اسٹوریج دراصل ایک NoSQL ڈیٹا بیس ہے، لہذا پہلے سے طے شدہ tables کی ضرورت نہیں ہوتی، لیکن یہ ایک یا زیادہ tables میں ڈیٹا محفوظ کرنے کے لیے ڈیزائن کیا گیا ہے، جہاں ہر row کو منفرد keys کے ذریعے شناخت کیا جاتا ہے۔
✅ تحقیق کریں: Azure Table Storage کے بارے میں پڑھیں۔
Queue اسٹوریج
Queue اسٹوریج آپ کو 64KB تک کے پیغامات کو ایک queue میں محفوظ کرنے کی اجازت دیتا ہے۔ آپ پیغامات کو queue کے آخر میں شامل کر سکتے ہیں اور انہیں سامنے سے پڑھ سکتے ہیں۔ Queues پیغامات کو غیر معینہ مدت تک محفوظ رکھتی ہیں جب تک کہ اسٹوریج کی جگہ موجود ہو، لہذا یہ پیغامات کو طویل مدت تک محفوظ کرنے کی اجازت دیتی ہے، پھر ضرورت پڑنے پر انہیں پڑھا جا سکتا ہے۔ مثال کے طور پر، اگر آپ GPS ڈیٹا کو پروسیس کرنے کے لیے ماہانہ کام چلانا چاہتے ہیں، تو آپ اسے روزانہ ایک مہینے کے لیے queue میں شامل کر سکتے ہیں، پھر مہینے کے آخر میں تمام پیغامات کو queue سے پروسیس کر سکتے ہیں۔
✅ تحقیق کریں: Azure Queue Storage کے بارے میں پڑھیں۔
File اسٹوریج
File اسٹوریج کلاؤڈ میں فائلوں کو محفوظ کرنے کا طریقہ ہے، اور کوئی بھی ایپس یا ڈیوائسز معیاری پروٹوکولز کا استعمال کرتے ہوئے اس سے جڑ سکتے ہیں۔ آپ فائلوں کو file اسٹوریج میں لکھ سکتے ہیں، پھر اسے اپنے PC یا Mac پر ایک ڈرائیو کے طور پر ماؤنٹ کر سکتے ہیں۔
✅ تحقیق کریں: Azure File Storage کے بارے میں پڑھیں۔
اپنے سرور لیس کوڈ کو اسٹوریج سے جوڑیں
آپ کی فنکشن ایپ کو اب blob اسٹوریج سے جڑنے کی ضرورت ہے تاکہ IoT Hub سے پیغامات محفوظ کیے جا سکیں۔ اس کے دو طریقے ہیں:
- فنکشن کوڈ کے اندر blob اسٹوریج سے جڑیں، blob اسٹوریج Python SDK کا استعمال کرتے ہوئے ڈیٹا blobs کے طور پر لکھیں۔
- ایک آؤٹ پٹ فنکشن بائنڈنگ استعمال کریں تاکہ فنکشن کے ریٹرن ویلیو کو blob اسٹوریج سے باندھیں اور blob کو خود بخود محفوظ کریں۔
اس سبق میں، آپ Python SDK استعمال کریں گے تاکہ blob اسٹوریج کے ساتھ تعامل کرنا سیکھ سکیں۔
ڈیٹا JSON blob کے طور پر درج ذیل فارمیٹ میں محفوظ کیا جائے گا:
{
"device_id": <device_id>,
"timestamp" : <time>,
"gps" :
{
"lat" : <latitude>,
"lon" : <longitude>
}
}
کام - اپنے سرور لیس کوڈ کو اسٹوریج سے جوڑیں
-
ایک Azure اسٹوریج اکاؤنٹ بنائیں۔ اسے کچھ ایسا نام دیں جیسے
gps<آپ کا نام>
۔⚠️ اگر ضرورت ہو تو آپ پروجیکٹ 2، سبق 5 سے اسٹوریج اکاؤنٹ بنانے کی ہدایات دیکھ سکتے ہیں۔
اگر آپ کے پاس پچھلے پروجیکٹ سے اسٹوریج اکاؤنٹ موجود ہے، تو آپ اسے دوبارہ استعمال کر سکتے ہیں۔
💁 آپ اسی اسٹوریج اکاؤنٹ کو بعد میں اس سبق میں اپنی Azure Functions ایپ کو تعینات کرنے کے لیے استعمال کر سکیں گے۔
-
اسٹوریج اکاؤنٹ کے لیے کنکشن اسٹرنگ حاصل کرنے کے لیے درج ذیل کمانڈ چلائیں:
az storage account show-connection-string --output table \ --name <storage_name>
<storage_name>
کو اس اسٹوریج اکاؤنٹ کے نام سے تبدیل کریں جو آپ نے پچھلے مرحلے میں بنایا تھا۔ -
local.settings.json
فائل میں اپنے اسٹوریج اکاؤنٹ کنکشن اسٹرنگ کے لیے ایک نیا اندراج شامل کریں، پچھلے مرحلے سے حاصل کردہ ویلیو کا استعمال کرتے ہوئے۔ اسےSTORAGE_CONNECTION_STRING
نام دیں۔ -
Azure اسٹوریج Pip پیکجز انسٹال کرنے کے لیے
requirements.txt
فائل میں درج ذیل شامل کریں:azure-storage-blob
اپنی ورچوئل ماحول میں اس فائل سے پیکجز انسٹال کریں۔
اگر آپ کو کوئی خرابی ہو، تو اپنی ورچوئل ماحول میں Pip ورژن کو درج ذیل کمانڈ کے ذریعے تازہ ترین ورژن میں اپ گریڈ کریں، پھر دوبارہ کوشش کریں:
pip install --upgrade pip
-
iot-hub-trigger
کے لیے__init__.py
فائل میں درج ذیل درآمدی بیانات شامل کریں:import json import os import uuid from azure.storage.blob import BlobServiceClient, PublicAccess
json
سسٹم ماڈیول JSON کو پڑھنے اور لکھنے کے لیے استعمال ہوگا،os
سسٹم ماڈیول کنکشن اسٹرنگ کو پڑھنے کے لیے استعمال ہوگا،uuid
سسٹم ماڈیول GPS ریڈنگ کے لیے منفرد ID بنانے کے لیے استعمال ہوگا۔azure.storage.blob
پیکج blob اسٹوریج کے ساتھ کام کرنے کے لیے Python SDK پر مشتمل ہے۔ -
main
میتھڈ سے پہلے درج ذیل مددگار فنکشن شامل کریں:def get_or_create_container(name): connection_str = os.environ['STORAGE_CONNECTION_STRING'] blob_service_client = BlobServiceClient.from_connection_string(connection_str) for container in blob_service_client.list_containers(): if container.name == name: return blob_service_client.get_container_client(container.name) return blob_service_client.create_container(name, public_access=PublicAccess.Container)
Python blob SDK میں ایسا کوئی مددگار میتھڈ نہیں ہے جو کنٹینر کو موجود نہ ہونے کی صورت میں بنائے۔ یہ کوڈ
local.settings.json
فائل (یا کلاؤڈ میں تعینات ہونے کے بعد Application Settings) سے کنکشن اسٹرنگ لوڈ کرے گا، پھر blob اسٹوریج اکاؤنٹ کے ساتھ تعامل کرنے کے لیے اس سےBlobServiceClient
کلاس بنائے گا۔ یہ blob اسٹوریج اکاؤنٹ کے تمام کنٹینرز کے ذریعے لوپ کرے گا، فراہم کردہ نام کے ساتھ ایک کنٹینر تلاش کرے گا - اگر اسے ایک ملتا ہے تو یہ ایکContainerClient
کلاس واپس کرے گا جو کنٹینر کے ساتھ تعامل کر سکتا ہے تاکہ blobs بنائے جا سکیں۔ اگر اسے کوئی نہیں ملتا، تو کنٹینر بنایا جاتا ہے اور نئے کنٹینر کے لیے کلائنٹ واپس کیا جاتا ہے۔جب نیا کنٹینر بنایا جاتا ہے، تو blobs کو کنٹینر میں استفسار کرنے کے لیے عوامی رسائی دی جاتی ہے۔ یہ اگلے سبق میں GPS ڈیٹا کو نقشے پر دیکھنے کے لیے استعمال کیا جائے گا۔
-
Soil moisture کے برعکس، اس کوڈ کے ساتھ ہم ہر ایونٹ کو محفوظ کرنا چاہتے ہیں، لہذا
main
فنکشن میںfor event in events:
لوپ کے اندر،logging
بیان کے نیچے درج ذیل کوڈ شامل کریں:device_id = event.iothub_metadata['connection-device-id'] blob_name = f'{device_id}/{str(uuid.uuid1())}.json'
یہ کوڈ ایونٹ میٹا ڈیٹا سے ڈیوائس ID حاصل کرتا ہے، پھر اسے blob نام بنانے کے لیے استعمال کرتا ہے۔ Blobs فولڈرز میں محفوظ کیے جا سکتے ہیں، اور ڈیوائس ID فولڈر کے نام کے لیے استعمال ہوگا، لہذا ہر ڈیوائس کے تمام GPS ایونٹس ایک فولڈر میں ہوں گے۔ Blob نام اس فولڈر کے بعد ایک دستاویز کے نام کے ساتھ ہوگا، جو فارورڈ سلیشز کے ساتھ الگ کیا گیا ہے، جیسے Linux اور macOS paths (Windows paths کے ساتھ بھی ملتا جلتا ہے، لیکن Windows بیک سلیشز استعمال کرتا ہے)۔ دستاویز کا نام Python
uuid
ماڈیول کا استعمال کرتے ہوئے ایک منفرد ID ہے، جس کا فائل ٹائپjson
ہے۔مثال کے طور پر،
gps-sensor
ڈیوائس ID کے لیے، blob نام کچھ ایسا ہو سکتا ہے:gps-sensor/a9487ac2-b9cf-11eb-b5cd-1e00621e3648.json
۔ -
اس کے نیچے درج ذیل کوڈ شامل کریں:
container_client = get_or_create_container('gps-data') blob = container_client.get_blob_client(blob_name)
یہ کوڈ
get_or_create_container
مددگار کلاس کا استعمال کرتے ہوئے کنٹینر کلائنٹ حاصل کرتا ہے، اور پھر blob نام کا استعمال کرتے ہوئے blob کلائنٹ آبجیکٹ حاصل کرتا ہے۔ یہ blob کلائنٹس موجودہ blobs کا حوالہ دے سکتے ہیں، یا جیسا کہ اس صورت میں، نئے blob کا۔ -
اس کے بعد درج ذیل کوڈ شامل کریں:
event_body = json.loads(event.get_body().decode('utf-8')) blob_body = { 'device_id' : device_id, 'timestamp' : event.iothub_metadata['enqueuedtime'], 'gps': event_body['gps'] }
یہ blob اسٹوریج میں لکھے جانے والے blob کے جسم کو بناتا ہے۔ یہ ایک JSON دستاویز ہے جس میں ڈیوائس ID، وہ وقت جب ٹیلیمیٹری IoT Hub کو بھیجی گئی تھی، اور ٹیلیمیٹری سے GPS کوآرڈینیٹس شامل ہیں۔
💁 یہ ضروری ہے کہ پیغام کے enqueued وقت کو موجودہ وقت کے بجائے استعمال کیا جائے تاکہ وہ وقت حاصل کیا جا سکے جب پیغام بھیجا گیا تھا۔ یہ IoT Hub پر کچھ وقت کے لیے بیٹھ سکتا ہے اس سے پہلے کہ Functions App اسے اٹھائے، اگر یہ ایپ چل نہیں رہی۔
-
اس کوڈ کے نیچے درج ذیل شامل کریں:
logging.info(f'Writing blob to {blob_name} - {blob_body}') blob.upload_blob(json.dumps(blob_body).encode('utf-8'))
یہ کوڈ لاگ کرتا ہے کہ ایک blob لکھا جانے والا ہے اس کی تفصیلات کے ساتھ، پھر blob کے جسم کو نئے blob کے مواد کے طور پر اپ لوڈ کرتا ہے۔
-
Functions ایپ چلائیں۔ آپ دیکھیں گے کہ GPS ایونٹس کے لیے blobs آؤٹ پٹ میں لکھے جا رہے ہیں:
[2021-05-21T01:31:14.325Z] Python EventHub trigger processed an event: {"gps": {"lat": 47.73092, "lon": -122.26206}} ... [2021-05-21T01:31:14.351Z] Writing blob to gps-sensor/4b6089fe-ba8d-11eb-bc7b-1e00621e3648.json - {'device_id': 'gps-sensor', 'timestamp': '2021-05-21T00:57:53.878Z', 'gps': {'lat': 47.73092, 'lon': -122.26206}}
💁 یقینی بنائیں کہ آپ IoT Hub ایونٹ مانیٹر کو ایک ہی وقت میں نہیں چلا رہے ہیں۔
💁 آپ اس کوڈ کو code/functions فولڈر میں تلاش کر سکتے ہیں۔
کام - اپ لوڈ کیے گئے blobs کی تصدیق کریں
-
بنائے گئے blobs کو دیکھنے کے لیے، آپ Azure Storage Explorer، ایک مفت ٹول جو آپ کو اپنے اسٹوریج اکاؤنٹس دیکھنے اور منظم کرنے کی اجازت دیتا ہے، یا CLI استعمال کر سکتے ہیں۔
-
CLI استعمال کرنے کے لیے، پہلے آپ کو ایک اکاؤنٹ کلید کی ضرورت ہوگی۔ درج ذیل کمانڈ چلائیں تاکہ یہ کلید حاصل کی جا سکے:
az storage account keys list --output table \ --account-name <storage_name>
<storage_name>
کو اسٹوریج اکاؤنٹ کے نام سے تبدیل کریں۔key1
کی ویلیو کو کاپی کریں۔ -
کنٹینر میں blobs کی فہرست بنانے کے لیے درج ذیل کمانڈ چلائیں:
az storage blob list --container-name gps-data \ --output table \ --account-name <storage_name> \ --account-key <key1>
<storage_name>
کو اسٹوریج اکاؤنٹ کے نام سے تبدیل کریں، اور<key1>
کو پچھلے مرحلے میں کاپی کی گئیkey1
کی ویلیو سے تبدیل کریں۔یہ کنٹینر میں تمام blobs کی فہرست دے گا:
Name Blob Type Blob Tier Length Content Type Last Modified Snapshot ---------------------------------------------------- ----------- ----------- -------- ------------------------ ------------------------- ---------- gps-sensor/1810d55e-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:27+00:00 gps-sensor/18293e46-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:28+00:00 gps-sensor/1844549c-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:28+00:00 gps-sensor/1894d714-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:28+00:00
-
درج ذیل کمانڈ کا استعمال کرتے ہوئے blobs میں سے ایک کو ڈاؤن لوڈ کریں:
az storage blob download --container-name gps-data \ --account-name <storage_name> \ --account-key <key1> \ --name <blob_name> \ --file <file_name>
<storage_name>
کو اسٹوریج اکاؤنٹ کے نام سے تبدیل کریں، اور<key1>
کو پہلے کے مرحلے میں کاپی کی گئیkey1
کی ویلیو سے تبدیل کریں۔<blob_name>
کو پچھلے مرحلے کے آؤٹ پٹ کےName
کالم سے مکمل نام کے ساتھ تبدیل کریں، فولڈر کے نام سمیت۔<file_name>
کو ایک مقامی فائل کے نام سے تبدیل کریں تاکہ blob کو محفوظ کیا جا سکے۔
ایک بار ڈاؤن لوڈ ہونے کے بعد، آپ JSON فائل کو VS Code میں کھول سکتے ہیں، اور آپ blob کو GPS لوکیشن کی تفصیلات کے ساتھ دیکھیں گے:
{"device_id": "gps-sensor", "timestamp": "2021-05-21T00:57:53.878Z", "gps": {"lat": 47.73092, "lon": -122.26206}}
-
کام - اپنی Functions ایپ کو کلاؤڈ پر تعینات کریں
اب جب کہ آپ کی Functions ایپ کام کر رہی ہے، آپ اسے کلاؤڈ پر تعینات کر سکتے ہیں۔
-
ایک نیا Azure Functions ایپ بنائیں، اس اسٹوریج اکاؤنٹ کا استعمال کرتے ہوئے جو آپ نے پہلے بنایا تھا۔ اسے کچھ ایسا نام دیں جیسے
gps-sensor-
اور آخر میں ایک منفرد شناخت کنندہ شامل کریں، جیسے کچھ بے ترتیب الفاظ یا آپ کا نام۔⚠️ اگر ضرورت ہو تو آپ پروجیکٹ 2، سبق 5 سے Functions ایپ بنانے کی ہدایات دیکھ سکتے ہیں۔
-
IOT_HUB_CONNECTION_STRING
اورSTORAGE_CONNECTION_STRING
ویلیوز کو Application Settings میں اپ لوڈ کریں۔⚠️ اگر ضرورت ہو تو آپ پروجیکٹ 2، سبق 5 سے Application Settings اپ لوڈ کرنے کی ہدایات دیکھ سکتے ہیں۔
-
اپنی مقامی Functions ایپ کو کلاؤڈ پر تعینات کریں۔ ⚠️ آپ پروجیکٹ 2، سبق 5 میں اپنی فنکشنز ایپ کو ڈیپلائے کرنے کے لیے دی گئی ہدایات کا حوالہ دے سکتے ہیں اگر ضرورت ہو۔
🚀 چیلنج
جی پی ایس ڈیٹا مکمل طور پر درست نہیں ہوتا، اور جو مقامات ڈیٹیکٹ کیے جا رہے ہیں وہ چند میٹرز یا اس سے زیادہ کے فرق کے ساتھ ہو سکتے ہیں، خاص طور پر سرنگوں اور اونچی عمارتوں والے علاقوں میں۔
سوچیں کہ سیٹلائٹ نیویگیشن اس مسئلے کو کیسے حل کر سکتی ہے؟ آپ کے سیٹ نیویگیشن کے پاس کون سا ڈیٹا موجود ہے جو آپ کے مقام کے بارے میں بہتر پیش گوئی کرنے میں مدد دے سکتا ہے؟
لیکچر کے بعد کا کوئز
جائزہ اور خود مطالعہ
- وکیپیڈیا کے ڈیٹا ماڈل صفحے پر ساختہ ڈیٹا کے بارے میں پڑھیں
- وکیپیڈیا کے نیم ساختہ ڈیٹا صفحے پر نیم ساختہ ڈیٹا کے بارے میں پڑھیں
- وکیپیڈیا کے غیر ساختہ ڈیٹا صفحے پر غیر ساختہ ڈیٹا کے بارے میں پڑھیں
- ایذیور اسٹوریج اور مختلف اسٹوریج اقسام کے بارے میں مزید پڑھیں ایذیور اسٹوریج دستاویزات میں
اسائنمنٹ
ڈسکلیمر:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔