میرے بیک اپ نے تمام تصاویر کھو دیں
میں نے ایک آف لائن موڈ ٹریکر (mood tracker) کے لیے بیک اپ بٹن بنایا۔
یہ ڈیٹا کو JSON فائل میں ایکسپورٹ کرتا تھا۔ صارفین اسے محفوظ کر سکتے تھے اور نئے فون پر منتقل کر سکتے تھے۔ یہ بالکل مکمل معلوم ہوتا تھا۔
پھر میں نے ایپ کا پیکیج آئی ڈی (package ID) تبدیل کر دیا۔ میں نے ایک نئے ڈیوائس پر تازہ انسٹالیشن کی کوشش کی اور بیک اپ کو بحال (restore) کیا۔
ٹیکسٹ اندراجات واپس آ گئے، لیکن ہر تصویر غائب تھی۔
مجھے اپنی غلطی کا احساس ہوا۔ وہ بیک اپ اصل بیک اپ نہیں تھا۔ وہ صرف ان فائلوں کے پوائنٹرز (pointers) کی ایک فہرست تھی جو اب موجود نہیں تھیں۔
ایپ تصاویر کو ڈسک پر محفوظ کرتی تھی۔ ڈیٹا بیس میں فائل کا راستہ (file path) موجود تھا۔
راستہ کچھ اس طرح نظر آتا تھا:
file:///data/user/0/com.example.app/files/entry_media/image.jpg
جب میں نے JSON ایکسپورٹ کیا، تو میں نے صرف وہ راستہ محفوظ کیا۔ اسی ڈیوائس پر، امپورٹ کام کرتا ہے کیونکہ فائلیں اب بھی وہیں موجود ہیں۔
ایک نئے ڈیوائس پر، وہ راستے کسی چیز کی طرف اشارہ نہیں کرتے۔ صارف ٹوٹے ہوئے تھمب نیلز (thumbnails) دیکھتا ہے اور سمجھتا ہے کہ ایپ نے اس کی یادیں مٹا دی ہیں۔
اگر آپ کا ایکسپورٹ صرف فائل کے راستے لے کر جاتا ہے، تو آپ کے پاس پورٹیبل بیک اپ نہیں ہے۔ آپ کے پاس ایسا بیک اپ ہے جو صرف اسی مشین پر کام کرتا ہے جسے بیک اپ کی ضرورت ہی نہیں ہے۔
ایک اصل بیک اپ میں اصل ڈیٹا ہونا چاہیے۔
میں نے عمل کو تبدیل کر دیا۔ اب، ایکسپورٹ ہر تصویر کو پڑھتا ہے اور اسے JSON کے اندر ایک Base64 اسٹرنگ میں تبدیل کر دیتا ہے۔
اس طریقے کے کچھ نقصانات (trade-offs) ہیں: • فائل کا سائز تقریباً 33 فیصد بڑھ جاتا ہے۔ • بڑی لائبریریوں کو ایکسپورٹ کے دوران زیادہ میموری کی ضرورت ہوتی ہے۔
میں نے فائل کے سائز پر درستگی کو ترجیح دی۔ ایک بڑا بیک اپ مفید ہوتا ہے۔ ایک چھوٹا سا بیک اپ جو تمام تصاویر کھو دے، وہ بے کار ہے۔
میں نے رفتار اور حفاظت کو یقینی بنانے کے لیے امپورٹ کے طریقے کو بھی تبدیل کیا:
- پہلے تمام تصاویر کو نئے ڈیوائس کی ڈسک پر لکھیں۔ اسے تیز رکھنے کے لیے یہ ڈیٹا بیس ٹرانزیکشن (database transaction) سے باہر کیا جاتا ہے۔
- نئی مقامی راستوں (local paths) کو اندراجات سے منسلک کرنے کے لیے ایک ہی ڈیٹا بیس ٹرانزیکشن چلائیں۔
میں نے سسٹم کو 'فیل سافٹ' (fail soft) بنانے کے لیے بھی ڈیزائن کیا ہے۔ اگر ایک تصویر غائب یا ناقابلِ خواندگی ہو، تو ایپ اسے چھوڑ کر اگلی تصویر پر چلی جاتی ہے۔ ایک خراب تصویر کو پورے ریسٹور (restore) کو کریش نہیں کرنا چاہیے۔
سیکھے گئے اسباق:
- صحیح طریقے سے ٹیسٹ کریں۔ ایک ڈیوائس پر ایکسپورٹ کریں، اسے صاف کریں، اور پھر نئی انسٹالیشن پر امپورٹ کریں۔ اسی ڈیوائس پر دوبارہ امپورٹ کرنا بگ (bugs) کو چھپا دیتا ہے۔
- بائٹس (bytes) کو ساتھ لے کر جائیں۔ اگر ڈیٹا کو ڈیوائس کی تبدیلی کے بعد بھی برقرار رکھنا ہے، تو اصل ڈیٹا منتقل کریں، صرف پتہ (address) نہیں۔
ماخذ: https://dev.to/diven_rastdus_c5af27d68f3/my-offline-apps-backup-lost-every-photo-on-a-new-phone-3d36
