MongoDB سے Postgres

یہ کس بارے میں ہے؟

ایک کمپنی میں کسی عہدے کے لیے انٹرویو دیتے ہوئے، مجھ سے درج ذیل سوال کا جواب دینے کو کہا گیا: کیا آپ براہِ کرم اپنے حل کیے ہوئے سب سے مشکل مسئلے کی وضاحت کر سکتے ہیں؟ خلاصہ یہ ہے کہ میں نے جو سب سے مشکل مسئلہ حل کیا، وہ اس وقت پیش آیا جب میں eBay میں کام کر رہا تھا، جہاں میں نے 2023 کے دوران eBay کے ایک بڑے اندرونی منصوبے کو MongoDB کے استعمال سے Postgres کے استعمال پر منتقل کیا۔ تاہم، اس سوال نے واقعی مجھے اس بارے میں سوچنے پر مجبور کیا کہ میں نے یہ مشکل مسئلہ کیسے حل کیا، اور اس نے مجھے اپنے ڈویلپر کے سفر پر غور کرنے کا موقع دیا۔ اسی وجہ سے، میں نے اس سوال کا ایک نہایت مفصل اور جامع جواب لکھا، اور میں اپنا جواب اپنی ویب سائٹ پر شیئر کرنا چاہتا تھا۔

سوال کیا تھا؟

کیا آپ براہِ کرم اپنے حل کیے ہوئے سب سے مشکل مسئلے کی وضاحت کر سکتے ہیں؟ براہِ کرم 4 پیراگراف سے کم میں جواب دیں اور ہمیں بتائیں:

  1. آپ نے کیا کیا
  2. اسے مشکل کس چیز نے بنایا
  3. آپ نے اس تجربے سے کیا سیکھا
  4. اس کے نتیجے میں آپ نے کس طرح ترقی کی

میرا جواب کیا تھا؟

1 - آپ نے کیا کیا

اب تک میرے کیریئر میں، سب سے مشکل مسئلہ اس وقت پیش آیا جب میں eBay میں اپنی موجودہ ملازمت پر کام کر رہا تھا۔ فی الحال eBay میں، جہاں مجھے Hitachi Vantara کے ذریعے کنٹریکٹ پر رکھا گیا ہے، میں ایک اندرونی ٹول تیار کرتا اور برقرار رکھتا ہوں جسے Storage Management System یا STMS کہا جاتا ہے۔ STMS ایک ایسا ٹول ہے جسے eBay کی Service & Storage Infrastructure (SSI) ٹیم eBay کے ڈیٹا سینٹرز میں موجود آلات کی نگرانی اور انتظام کے لیے استعمال کرتی ہے۔ STMS ایک انجینئر کو متعدد arrays، switches، hosts، disk groups، clusters، اور databases کے میٹرکس کی نگرانی کرنے کی سہولت فراہم کرتا ہے۔ اس کے ساتھ ساتھ یہ switches اور arrays کے لیے alerts کو سنبھالتا ہے اور ایک انجینئر کو host allocations جیسے جدید کام آسانی سے مکمل کرنے کی اجازت دیتا ہے۔ STMS فی منٹ 1.5 ملین سے زیادہ میٹرکس وصول کرتا ہے، جو eBay کے ڈیٹا سینٹرز میں موجود درجنوں/سینکڑوں arrays، switches، hosts، disk groups، اور clusters پر مشتمل ہیں۔ یہ SSI ٹیم کے لیے eBay کے storage infrastructure کی نگرانی اور انتظام کا ایک اہم ٹول ہے، جو eBay کی بنیادی سروس اور کاروباری ماڈل کے لیے نہایت ضروری ہے۔ یہ سب جانتے ہوئے، eBay میں کام کرنے کے دوران مجھے درپیش سب سے مشکل مسئلہ STMS کو MongoDB database کے استعمال سے Postgres database کے استعمال پر منتقل کرنا تھا۔

2 - اسے مشکل کس چیز نے بنایا

اس مسئلے کو مشکل بنانے والی بات یہ تھی کہ MongoDB اور Postgres بنیادی طور پر مختلف databases ہیں۔ MongoDB ایک document-based database (NoSQL) ہے، یعنی ڈیٹا کسی collection میں JSON کے طور پر محفوظ کیا جاتا ہے (جیسے فائلنگ کیبنٹ میں documents)، جبکہ Postgres ایک relational database (SQL) ہے، یعنی ڈیٹا table میں rows کے طور پر محفوظ کیا جاتا ہے (جیسے spreadsheet میں)۔ مزید برآں، STMS کا پورا backend ڈیٹا کو JSONs کے طور پر process اور manage کرنے کے لیے بنایا گیا تھا، اور database operations کے لیے خصوصی طور پر MongoDB کے ساتھ compatible packages استعمال کرتا تھا۔ نیز، اس migration کے دوران کوئی downtime نہیں ہونا چاہیے تھا اور تقریباً تمام features کو کام جاری رکھنا تھا، کیونکہ STMS ایک اندرونی ٹول کے طور پر بہت اہم ہے۔ یہ migration مکمل طور پر چند ماہ کے اندر مکمل کرنا ضروری تھا، downtime کے بغیر، اور اس کے نفاذ کے لیے کوئی واضح منصوبہ بھی موجود نہیں تھا۔ اس سے پہلے مجھے Postgres کا زیادہ تجربہ بھی نہیں تھا، اور اپنے تمام coworkers کے ساتھ مل کر مجھے NoSQL database سے SQL database پر ایک بڑے legacy codebase کو migrate کرنے کا بھی کوئی تجربہ نہیں تھا۔

3 - آپ نے اس تجربے سے کیا سیکھا

STMS code migration کو MongoDB سے Postgres پر کامیابی کے ساتھ مکمل کیا گیا، وہ بھی بغیر کسی downtime کے، جبکہ تقریباً تمام features اور functionality کو برقرار رکھا گیا۔ اس کے لیے وسیع research، learning، testing، اور troubleshooting کی ضرورت تھی۔ میں نے اپنے data structures کو relational databases کے ساتھ زیادہ مؤثر طریقے سے کام کرنے کے لیے ازسرِنو ترتیب دیا اور ان packages کی جگہ نئے packages تیار کیے جن پر ہم انحصار کرتے تھے لیکن جو Postgres کے ساتھ integrate نہیں ہوتے تھے۔ مجموعی طور پر، migration بغیر کسی رکاوٹ اور کسی حقیقی خامی کے مکمل ہو گئی، جو میری توقعات سے بھی بڑھ کر تھا۔ اس پورے عمل کے دوران، میں نے بہت کچھ سیکھا۔ تکنیکی طور پر، میں نے Postgres، SQL، parse trees، ORMs، Sequelize، Prisma، query builders، equivalence checking، primary-standby database setup، اور database-related unit testing کی بہتر سمجھ حاصل کی۔ بنیادی طور پر، میں نے سیکھا کہ ایک پیچیدہ مسئلے کو چھوٹے حصوں میں زیادہ مؤثر طریقے سے کیسے تقسیم کیا جائے اور ان حصوں کے لیے مؤثر حل کیسے نافذ کیے جائیں۔ مزید برآں، میں نے سیکھا کہ کس طرح ایک leader بننا ہے اور بہت سی limitations، setbacks، اور نامعلوم امور کا سامنا کرنے کے باوجود اس project کو اختتام تک لے کر جانا ہے۔

4 - اس کے نتیجے میں آپ نے کس طرح ترقی کی

میں نے اپنے undergraduate دور میں robotics سے اپنا کیریئر شروع کیا، لیکن جب مجھے eBay میں ملازمت ملی تو web development کی طرف منتقل ہو گیا، اور ایک ایسے شعبے میں داخل ہوا جس کا مجھے پہلے کوئی تجربہ نہیں تھا۔ اس تبدیلی نے مسلسل learning اور adaptability سے متعین کیریئر کی بنیاد رکھی۔ STMS کو MongoDB سے Postgres پر منتقل کرنے کا چیلنج میرے کیریئر میں ایک اہم چھلانگ تھا، جس نے میری پیشہ ورانہ ترقی میں بہت بڑا کردار ادا کیا۔ یہ صرف databases کے بارے میں میری سمجھ گہری کرنے یا مسئلے حل کرنے کی میری صلاحیتوں کو بہتر بنانے کی بات نہیں تھی۔ اس project نے مجھے ایک نئے میدان میں دھکیل دیا، جہاں محتاط planning اور zero downtime کے عزم کا تقاضا تھا۔ بڑے پیمانے پر database transitions کا کوئی سابقہ تجربہ نہ ہونے کے باوجود migration کی قیادت کرتے ہوئے، میں نے واضح communication، teamwork، اور پیچیدہ challenges کو قابلِ انتظام حصوں میں تقسیم کرنے کی اہمیت سیکھی۔ اس تجربے نے میری technical skills کو وسعت دی اور میرے confidence میں بھی اضافہ کیا، جس سے میں مزید ambitious goals اور projects کی جانب بڑھنے کے لیے تیار ہوا۔ میرے career کا یہ milestone نہ صرف ایک developer اور leader کی حیثیت سے میری ترقی کا مظاہرہ تھا بلکہ ایک problem solver کی حیثیت سے بھی، اور اس نے دکھایا کہ نامعلوم کو قبول کرنا اور کامیاب ہونا ذاتی اور پیشہ ورانہ ترقی کی کلید ہے۔

نتیجہ کیا ہے؟

میرے جوابات نے مجھے کمپنی کے interview process کے دوسرے مرحلے تک پہنچا دیا، جس سے مجھے team کے developers میں سے ایک کے ساتھ خوشگوار گفتگو کرنے کا موقع ملا، جو کافی اچھا تھا۔ لیکن بنیادی طور پر، اس assignment نے مجھے eBay میں اپنے وقت کے دوران اپنے career میں حل کیے گئے سب سے challenging technical problem پر غور کرنے کا موقع دیا۔ اس نے مجھے ایک developer/engineer کی حیثیت سے اپنی ترقی کے بارے میں سوچنے، نئی skills پیدا کرنے، اور complex problems کے مطابق خود کو ڈھالنے اور انہیں حل کرنے میں اپنے confidence کو بہتر بنانے کے قابل بنایا۔