ನನ್ನ ಬ್ಯಾಕಪ್ ಎಲ್ಲಾ ಫೋಟೋಗಳನ್ನು ಕಳೆದುಕೊಂಡಿತು
ನಾನು ಒಂದು ಆಫ್ಲೈನ್ ಮೂಡ್ ಟ್ರ್ಯಾಕರ್ (offline mood tracker) ಗಾಗಿ ಬ್ಯಾಕಪ್ ಬಟನ್ ಅನ್ನು ನಿರ್ಮಿಸಿದೆ.
ಇದು ಡೇಟಾವನ್ನು JSON ಫೈಲ್ಗೆ ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡುತ್ತಿತ್ತು. ಬಳಕೆದಾರರು ಅದನ್ನು ಉಳಿಸಿಕೊಳ್ಳಬಹುದು ಮತ್ತು ಹೊಸ ಫೋನ್ಗೆ ವರ್ಗಾಯಿಸಬಹುದು. ಅದು ಪರಿಪೂರ್ಣವಾಗಿ ಕಂಡಿತು.
ನಂತರ ನಾನು ಆ್ಯಪ್ ಪ್ಯಾಕೇಜ್ ಐಡಿ (app package ID) ಬದಲಾಯಿಸಿದೆ. ಹೊಸ ಸಾಧನದಲ್ಲಿ ಹೊಸ ಇನ್ಸ್ಟಾಲ್ ಪ್ರಯತ್ನಿಸಿ ಬ್ಯಾಕಪ್ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಿದೆ (restore).
ಪಠ್ಯದ ಎಂಟ್ರಿಗಳು (text entries) ಮರಳಿ ಬಂದವು. ಆದರೆ ಪ್ರತಿಯೊಂದು ಫೋಟೋ ಕೂಡ ಮಾಯವಾಗಿತ್ತು.
ನನ್ನ ತಪ್ಪನ್ನು ನಾನು ಅರಿತೆ. ಆ ಬ್ಯಾಕಪ್ ನಿಜವಾದ ಬ್ಯಾಕಪ್ ಆಗಿರಲಿಲ್ಲ. ಅದು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದ ಫೈಲ್ಗಳ ಕೇವಲ ಪಾಯಿಂಟರ್ಗಳ (pointers) ಪಟ್ಟಿಯಾಗಿತ್ತು.
ಆ್ಯಪ್ ಫೋಟೋಗಳನ್ನು ಡಿಸ್ಕ್ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಿತ್ತು. ಡೇಟಾಬೇಸ್ ಫೈಲ್ ಪಾತ್ (file path) ಅನ್ನು ಹೊಂದಿತ್ತು.
ಪಾತ್ ಹೀಗಿತ್ತು:
file:///data/user/0/com.example.app/files/entry_media/image.jpg
ನಾನು JSON ಅನ್ನು ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡಿದಾಗ, ಕೇವಲ ಆ ಪಾತ್ ಅನ್ನು ಮಾತ್ರ ಉಳಿಸಿದೆ. ಅದೇ ಸಾಧನದಲ್ಲಿ, ಇಂಪೋರ್ಟ್ (import) ಕೆಲಸ ಮಾಡುತ್ತದೆ ಏಕೆಂದರೆ ಫೈಲ್ಗಳು ಇನ್ನೂ ಅಲ್ಲೇ ಇರುತ್ತವೆ.
ಹೊಸ ಸಾಧನದಲ್ಲಿ, ಆ ಪಾತ್ಗಳು ಯಾವುದಕ್ಕೂ ಸೂಚಿಸುವುದಿಲ್ಲ. ಬಳಕೆದಾರರು ಮುರಿದಿರುವ ಥಂಬ್ನೇಲ್ಗಳನ್ನು (broken thumbnails) ನೋಡುತ್ತಾರೆ ಮತ್ತು ಆ್ಯಪ್ ಅವರ ನೆನಪುಗಳನ್ನು ಅಳಿಸಿಹಾಕಿದೆ ಎಂದು ಭಾವಿಸುತ್ತಾರೆ.
ನಿಮ್ಮ ಎಕ್ಸ್ಪೋರ್ಟ್ ಕೇವಲ ಫೈಲ್ ಪಾತ್ಗಳನ್ನು ಮಾತ್ರ ಹೊಂದಿದ್ದರೆ, ನಿಮ್ಮ ಬಳಿ ಪೋರ್ಟಬಲ್ ಬ್ಯಾಕಪ್ (portable backup) ಇಲ್ಲ ಎಂದರ್ಥ. ನಿಮ್ಮ ಬಳಿ ಇರುವ ಬ್ಯಾಕಪ್ ಕೇವಲ ಅಗತ್ಯವಿಲ್ಲದ ಯಂತ್ರದಲ್ಲಿ ಮಾತ್ರ ಕೆಲಸ ಮಾಡುತ್ತದೆ.
ನಿಜವಾದ ಬ್ಯಾಕಪ್ನಲ್ಲಿ ನೈಜ ಡೇಟಾ ಇರಲೇಬೇಕು.
ನಾನು ಪ್ರಕ್ರಿಯೆಯನ್ನು ಬದಲಾಯಿಸಿದೆ. ಈಗ, ಎಕ್ಸ್ಪೋರ್ಟ್ ಪ್ರತಿಯೊಂದು ಫೋಟೋವನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಅದನ್ನು JSON ಒಳಗೆ Base64 ಸ್ಟ್ರಿಂಗ್ ಆಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ.
ಈ ವಿಧಾನವು ಕೆಲವು ಮಿತಿಗಳನ್ನು (trade-offs) ಹೊಂದಿದೆ: • ಫೈಲ್ ಗಾತ್ರವು ಸುಮಾರು ಶೇಕಡಾ 33 ರಷ್ಟು ಹೆಚ್ಚಾಗುತ್ತದೆ. • ದೊಡ್ಡ ಲೈಬ್ರರಿಗಳಿಗೆ ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡುವಾಗ ಹೆಚ್ಚಿನ ಮೆಮೊರಿ ಬೇಕಾಗುತ್ತದೆ.
ನಾನು ಫೈಲ್ ಗಾತ್ರಕ್ಕಿಂತ ನಿಖರತೆಗೆ (correctness) ಆದ್ಯತೆ ನೀಡಿದೆ. ದೊಡ್ಡ ಬ್ಯಾಕಪ್ ಉಪಯುಕ್ತವಾಗಿರುತ್ತದೆ. ಎಲ್ಲಾ ಚಿತ್ರಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳುವ ಸಣ್ಣ ಬ್ಯಾಕಪ್ ವ್ಯರ್ಥ.
ವೇಗ ಮತ್ತು ಸುರಕ್ಷತೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ನಾನು ಇಂಪೋರ್ಟ್ ಮಾಡುವ ವಿಧಾನವನ್ನೂ ಬದಲಾಯಿಸಿದೆ:
- ಮೊದಲು ಎಲ್ಲಾ ಫೋಟೋಗಳನ್ನು ಹೊಸ ಸಾಧನದ ಡಿಸ್ಕ್ಗೆ ಬರೆಯಿರಿ. ಇದನ್ನು ವೇಗವಾಗಿರಿಸಲು ಡೇಟಾಬೇಸ್ ಟ್ರಾನ್ಸಾಕ್ಷನ್ (database transaction) ಹೊರಗೆ ಮಾಡಲಾಗುತ್ತದೆ.
- ಹೊಸ ಲೋಕಲ್ ಪಾತ್ಗಳನ್ನು ಎಂಟ್ರಿಗಳಿಗೆ ಲಿಂಕ್ ಮಾಡಲು ಒಂದೇ ಡೇಟಾಬೇಸ್ ಟ್ರಾನ್ಸಾಕ್ಷನ್ ಅನ್ನು ಚಲಾಯಿಸಿ.
ನಾನು ಸಿಸ್ಟಮ್ ಅನ್ನು 'ಫೇಲ್ ಸಾಫ್ಟ್' (fail soft) ಆಗುವಂತೆ ನಿರ್ಮಿಸಿದೆ. ಒಂದು ಫೋಟೋ ಕಾಣೆಯಾಗಿದ್ದರೆ ಅಥವಾ ಓದಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೆ, ಆ್ಯಪ್ ಅದನ್ನು ಬಿಟ್ಟು ಮುಂದಿನದಕ್ಕೆ ಹೋಗುತ್ತದೆ. ಒಂದು ಮುರಿದಿರುವ ಚಿತ್ರವು ಇಡೀ ಮರುಸ್ಥಾಪನೆಯನ್ನು (restore) ವಿಫಲಗೊಳಿಸಬಾರದು.
ಕಲಿತ ಪಾಠಗಳು:
- ಸರಿಯಾದ ರೀತಿಯಲ್ಲಿ ಪರೀಕ್ಷಿಸಿ. ಒಂದು ಸಾಧನದಲ್ಲಿ ಎಕ್ಸ್ಪೋರ್ಟ್ ಮಾಡಿ, ಅದನ್ನು ವೈಪ್ (wipe) ಮಾಡಿ, ಮತ್ತು ಕ್ಲೀನ್ ಇನ್ಸ್ಟಾಲ್ನಲ್ಲಿ ಇಂಪೋರ್ಟ್ ಮಾಡಿ. ಅದೇ ಸಾಧನದಲ್ಲಿ ಮರು-ಇಂಪೋರ್ಟ್ ಮಾಡುವುದು ಬಗ್ಗಳನ್ನು (bugs) ಮರೆಮಾಚುತ್ತದೆ.
- ಬೈಟ್ಗಳನ್ನು (bytes) ವರ್ಗಾಯಿಸಿ. ಡೇಟಾ ಸಾಧನದ ಬದಲಾವಣೆಯನ್ನು ತಡೆದುಕೊಳ್ಳಬೇಕಿದ್ದರೆ, ವಿಳಾಸವನ್ನು (address) ಅಲ್ಲ, ನೈಜ ಡೇಟಾವನ್ನು ವರ್ಗಾಯಿಸಿ.
ಮೂಲ: https://dev.to/diven_rastdus_c5af27d68f3/my-offline-apps-backup-lost-every-photo-on-a-new-phone-3d36
