எனது பேக்கப் அனைத்துப் புகைப்படங்களையும் இழந்துவிட்டது

நான் ஒரு ஆஃப்லைன் மூட் ட்ராக்கருக்காக (offline mood tracker) ஒரு பேக்கப் பட்டனை உருவாக்கினேன்.

இது தரவை ஒரு JSON கோப்பிற்கு ஏற்றுமதி (export) செய்தது. பயனர்கள் அதைச் சேமித்து புதிய போனுக்கு மாற்றிக்கொள்ள முடியும். அது மிகச் சரியாகத் தெரிந்தது.

பிறகு நான் ஆப் பேக்கேஜ் ஐடியை (app package ID) மாற்றினேன். ஒரு புதிய சாதனத்தில் புதிய இன்ஸ்டால் செய்து, பேக்கப்பை மீட்டெடுக்க (restore) முயன்றேன்.

உரைத் தரவுகள் (text entries) திரும்பி வந்தன. ஆனால் ஒவ்வொரு புகைப்படமும் காணாமல் போயிருந்தது.

எனது தவறை நான் உணர்ந்தேன். அந்த பேக்கப் ஒரு உண்மையான பேக்கப் அல்ல. அது இனிமேல் இல்லாத கோப்புகளுக்கான ஒரு பட்டியலை (list of pointers) மட்டுமே கொண்டிருந்தது.

ஆப் புகைப்படங்களை டிஸ்க்கில் (disk) சேமித்தது. டேட்டாபேஸ் (database) அந்த கோப்புப் பாதையை (file path) மட்டுமே வைத்திருந்தது.

அந்தப் பாதை இவ்வாறு இருந்தது: file:///data/user/0/com.example.app/files/entry_media/image.jpg

நான் JSON-ஐ ஏற்றுமதி செய்தபோது, அந்தப் பாதையை மட்டுமே சேமித்தேன். அதே சாதனத்தில், கோப்புகள் இன்னும் அங்கேயே இருப்பதால் இம்போர்ட் (import) சரியாக வேலை செய்கிறது.

புதிய சாதனத்தில், அந்தப் பாதைகள் எதற்கும் இணையவில்லை. பயனர் சிதைந்த தம்ப்நெயில்களைப் (broken thumbnails) பார்த்து, ஆப் தனது நினைவுகளை அழித்துவிட்டதாக நினைக்கிறார்.

உங்கள் ஏற்றுமதி கோப்பு கோப்புப் பாதைகளை (file paths) மட்டுமே கொண்டு சென்றால், உங்களிடம் ஒரு போர்ட்டபிள் பேக்கப் (portable backup) இல்லை என்று அர்த்தம். அது தேவையில்லாத ஒரு இயந்திரத்தில் மட்டுமே வேலை செய்யும் ஒரு பேக்கப் ஆகும்.

ஒரு உண்மையான பேக்கப்பில் உண்மையான தரவு (actual data) இருக்க வேண்டும்.

நான் அந்தச் செயல்முறையை மாற்றினேன். இப்போது, ஏற்றுமதி செய்யும் போது ஒவ்வொரு புகைப்படத்தையும் படித்து, அதை JSON-க்குள் ஒரு Base64 சரமாக (string) மாற்றுகிறது.

இந்த அணுகுமுறையில் சில சவால்கள் உள்ளன: • கோப்பின் அளவு சுமார் 33 சதவீதம் அதிகரிக்கும். • பெரிய லைப்ரரிகள் (libraries) ஏற்றுமதி செய்யும் போது அதிக நினைவகத்தை (memory) கோரும்.

நான் கோப்பின் அளவை விடத் துல்லியத்தையே (correctness) தேர்ந்தெடுத்தேன். ஒரு பெரிய பேக்கப் பயனுள்ளது. ஆனால் அனைத்துப் படங்களையும் இழக்கும் ஒரு சிறிய பேக்கப் பயனற்றது.

வேகம் மற்றும் பாதுகாப்பை உறுதி செய்ய, இம்போர்ட் முறையையும் நான் மாற்றினேன்:

  1. முதலில் அனைத்துப் புகைப்படங்களையும் புதிய சாதனத்தின் டிஸ்க்கில் எழுதவும். வேகத்தைத் தக்கவைக்க இது டேட்டாபேஸ் டிரான்ஸாக்ஷனுக்கு (database transaction) வெளியே நடக்கிறது.
  2. புதிய உள்ளூர் பாதைகளை (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