Storage Migration in JavaScript

Migrate data between storage formats

AdvancedLocalStorage/SessionStorageExample 7 of 10
storage-migration.js
1// Method 1: Simple migration
2function migrateStorage() {
3 const oldData = localStorage.getItem('oldKey');
4 if (oldData) {
5 // Migrate to new format
6 const newData = {
7 version: 2,
8 data: JSON.parse(oldData)
9 };
10 localStorage.setItem('newKey', JSON.stringify(newData));
11 localStorage.removeItem('oldKey');
12 console.log('Migration complete');
13 }
14}
15
16// Method 2: Version-based migration
17const STORAGE_VERSION = 2;
18
19function checkAndMigrate() {
20 const currentVersion = localStorage.getItem('storageVersion');
21
22 if (!currentVersion || parseInt(currentVersion) < STORAGE_VERSION) {
23 console.log('Migration needed');
24 migrateToVersion(parseInt(currentVersion) || 1);
25 localStorage.setItem('storageVersion', STORAGE_VERSION.toString());
26 }
27}
28
29function migrateToVersion(fromVersion) {
30 if (fromVersion === 1) {
31 // Migrate from v1 to v2
32 const v1Data = localStorage.getItem('userData');
33 if (v1Data) {
34 const data = JSON.parse(v1Data);
35 const v2Data = {
36 ...data,
37 metadata: {
38 createdAt: new Date().toISOString(),
39 version: 2
40 }
41 };
42 localStorage.setItem('userData', JSON.stringify(v2Data));
43 }
44 }
45}
46
47checkAndMigrate();
48
49// Method 3: Migration with backup
50function migrateWithBackup() {
51 // Create backup
52 const backup = {};
53 for (let i = 0; i < localStorage.length; i++) {
54 const key = localStorage.key(i);
55 backup[key] = localStorage.getItem(key);
56 }
57 localStorage.setItem('backup_' + Date.now(), JSON.stringify(backup));
58
59 // Perform migration
60 try {
61 migrateStorage();
62 console.log('Migration successful');
63 } catch (e) {
64 console.error('Migration failed, restoring backup');
65 // Restore from backup
66 restoreBackup(backup);
67 }
68}
69
70function restoreBackup(backup) {
71 localStorage.clear();
72 Object.keys(backup).forEach(key => {
73 localStorage.setItem(key, backup[key]);
74 });
75}
76
77// Method 4: Progressive migration
78function progressiveMigration() {
79 const migrationSteps = [
80 () => migrateStep1(),
81 () => migrateStep2(),
82 () => migrateStep3()
83 ];
84
85 migrationSteps.forEach((step, index) => {
86 try {
87 step();
88 console.log(`Step ${index + 1} complete`);
89 } catch (e) {
90 console.error(`Step ${index + 1} failed:`, e);
91 throw e;
92 }
93 });
94}
95
96function migrateStep1() {
97 // Step 1 logic
98}
99
100function migrateStep2() {
101 // Step 2 logic
102}
103
104function migrateStep3() {
105 // Step 3 logic
106}
107
108// Method 5: Data transformation
109function transformData(oldFormat) {
110 // Transform old format to new format
111 return {
112 id: oldFormat.userId,
113 name: oldFormat.fullName,
114 email: oldFormat.emailAddress,
115 settings: {
116 theme: oldFormat.theme || 'light',
117 notifications: oldFormat.notify || true
118 }
119 };
120}
121
122function migrateUserData() {
123 const oldData = localStorage.getItem('oldUserData');
124 if (oldData) {
125 const parsed = JSON.parse(oldData);
126 const newData = transformData(parsed);
127 localStorage.setItem('userData', JSON.stringify(newData));
128 localStorage.removeItem('oldUserData');
129 }
130}

Output

Migration complete
Migration needed
Step 1 complete
Step 2 complete
Step 3 complete

What's going on

Migration updates storage format.

Migration Strategies

Version-based
Backup before migrate
Progressive steps
Data transformation

Best Practices

Check version
Create backups
Test migrations
Handle errors

Use Cases

Schema changes
Format updates
Data restructuring
Version upgrades

Important

Always backup
Test thoroughly
Handle failures
Document changes