আমার ব্যাকআপ প্রতিটি ছবি হারিয়ে ফেলেছে

আমি একটি অফলাইন মুড ট্র্যাকারের জন্য একটি ব্যাকআপ বাটন তৈরি করেছিলাম।

এটি একটি JSON ফাইলে ডেটা এক্সপোর্ট করত। ব্যবহারকারীরা এটি সেভ করে নতুন ফোনে নিয়ে যেতে পারতেন। সবকিছু নিখুঁত মনে হচ্ছিল।

তারপর আমি অ্যাপের প্যাকেজ আইডি (package ID) পরিবর্তন করলাম। আমি একটি নতুন ডিভাইসে ফ্রেশ ইনস্টল করে ব্যাকআপটি রিস্টোর করার চেষ্টা করলাম।

টেক্সট এন্ট্রিগুলো ফিরে এল। কিন্তু প্রতিটি ছবি হারিয়ে গেল।

আমি আমার ভুল বুঝতে পারলাম। ব্যাকআপটি আসলে কোনো প্রকৃত ব্যাকআপ ছিল না। এটি ছিল কেবল এমন কিছু ফাইলের পয়েন্টারের তালিকা যা আর অস্তিত্বে ছিল না।

অ্যাপটি ডিস্কে ছবিগুলো সংরক্ষণ করত। ডাটাবেস কেবল ফাইল পাথ (file path) ধরে রাখত।

পাথটি দেখতে এমন ছিল: file:///data/user/0/com.example.app/files/entry_media/image.jpg

যখন আমি JSON এক্সপোর্ট করলাম, আমি কেবল সেই পাথটিই সেভ করেছিলাম। একই ডিভাইসে ইমপোর্ট কাজ করে কারণ ফাইলগুলো এখনও সেখানে আছে।

নতুন ডিভাইসে, সেই পাথগুলো কোনো কিছুর দিকে নির্দেশ করে না। ব্যবহারকারী ভাঙা থাম্বনেইল (broken thumbnails) দেখতে পান এবং মনে করেন অ্যাপটি তাদের স্মৃতি মুছে ফেলেছে।

যদি আপনার এক্সপোর্টে কেবল ফাইল পাথ থাকে, তবে আপনার কাছে কোনো পোর্টেবল ব্যাকআপ নেই। আপনার কাছে এমন একটি ব্যাকআপ আছে যা কেবল সেই মেশিনেই কাজ করে যার ব্যাকআপের প্রয়োজন নেই।

একটি প্রকৃত ব্যাকআপে অবশ্যই আসল ডেটা থাকতে হবে।

আমি প্রক্রিয়াটি পরিবর্তন করলাম। এখন, এক্সপোর্ট প্রতিটি ছবি পড়ে এবং JSON-এর ভেতরে সেটিকে একটি Base64 স্ট্রিং-এ রূপান্তর করে।

এই পদ্ধতির কিছু সীমাবদ্ধতা বা ট্রেড-অফ (trade-offs) রয়েছে: • ফাইলের আকার প্রায় ৩৩ শতাংশ বেড়ে যায়। • বড় লাইব্রেরির ক্ষেত্রে এক্সপোর্টের সময় বেশি মেমরি প্রয়োজন হয়।

আমি ফাইলের আকারের চেয়ে সঠিকতাকে বেশি গুরুত্ব দিয়েছি। একটি বড় ব্যাকআপ কার্যকর। কিন্তু একটি ক্ষুদ্র ব্যাকআপ যা সব ছবি হারিয়ে ফেলে, তা মূল্যহীন।

গতি এবং নিরাপত্তা নিশ্চিত করতে আমি ইমপোর্ট করার পদ্ধতিটিও পরিবর্তন করেছি:

  1. প্রথমে নতুন ডিভাইসের ডিস্কে সব ছবি লিখে ফেলুন। এটি দ্রুত করার জন্য ডাটাবেস ট্রানজ্যাকশনের বাইরে করা হয়।
  2. নতুন লোকাল পাথগুলোকে এন্ট্রিগুলোর সাথে যুক্ত করতে একটি মাত্র ডাটাবেস ট্রানজ্যাকশন চালান।

আমি সিস্টেমটিকে 'ফেইল সফট' (fail soft) করার মতো করে তৈরি করেছি। যদি একটি ছবি অনুপস্থিত বা অপাঠ্য হয়, অ্যাপটি সেটি এড়িয়ে গিয়ে পরেরটিতে চলে যায়। একটি ভাঙা ছবি পুরো রিস্টোর প্রক্রিয়াটি অচল করে দেওয়ার কথা নয়।

যা শিখলাম:

  • সঠিক উপায়ে পরীক্ষা করুন। একটি ডিভাইসে এক্সপোর্ট করুন, সেটি মুছে ফেলুন এবং একটি ক্লিন ইনস্টলেশন থেকে ইমপোর্ট করুন। একই ডিভাইসে পুনরায় ইমপোর্ট করলে বাগ (bugs) ধরা পড়ে না।
  • বাইটগুলো (bytes) সাথে নিন। যদি ডেটাকে ডিভাইস পরিবর্তনের পরেও টিকিয়ে রাখতে হয়, তবে ঠিকানার বদলে আসল ডেটা স্থানান্তর করুন।

উৎস: https://dev.to/diven_rastdus_c5af27d68f3/my-offline-apps-backup-lost-every-photo-on-a-new-phone-3d36