Swift में डेटाबेस माइग्रेशन: iOS/macOS के लिए उपकरण और अभ्यास

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Swift में डेटाबेस माइग्रेशन (iOS/macOS)



iOS और macOS के लिए एप्लिकेशन विकसित करने में अक्सर स्थानीय डेटाबेस के साथ काम करना शामिल होता है। जैसे-जैसे एप्लिकेशन विकसित होता है, डेटा संरचना अनिवार्य रूप से बदलती है: नए फ़ील्ड जोड़े जाते हैं, प्रकार बदलते हैं या पुरानी संस्थाएँ हटा दी जाती हैं। माइग्रेशन के सही तंत्र के बिना, ये परिवर्तन उपयोगकर्ता डेटा की हानि या एप्लिकेशन क्रैश का कारण बन सकते हैं। इस लेख में, हम Swift में डेटाबेस माइग्रेशन करने के लिए मुख्य उपकरणों और दृष्टिकोणों पर चर्चा करेंगे, साथ ही लोकप्रिय समाधानों के लिए व्यावहारिक उदाहरण भी देंगे।



माइग्रेशन क्यों महत्वपूर्ण हैं?

डेटाबेस माइग्रेशन सुनिश्चित करते हैं:

  • डेटा संरक्षण — स्कीमा अपडेट होने पर उपयोगकर्ता रिकॉर्ड खो नहीं जाते।
  • पिछड़ी संगतता — एप्लिकेशन डेटा के पुराने संस्करणों पर भी काम करता रहता है।
  • विकास में लचीलापन — मैन्युअल हस्तक्षेप के बिना डेटा मॉडल को पुनरावृत्त रूप से बदलने की क्षमता।


Swift में माइग्रेशन के लिए मुख्य उपकरण



1. Core Data + NSPersistentContainer

Apple का अंतर्निहित फ्रेमवर्क स्वचालित और हल्के माइग्रेशन प्रदान करता है। जटिल परिवर्तनों के लिए मैन्युअल मॉडल वर्जनिंग का उपयोग किया जाता है।

// माइग्रेशन समर्थन के साथ कंटेनर सेटअप करनाlet container = NSPersistentContainer(name: "MyAppModel")container.persistentStoreDescriptions.first?.shouldMigrateStoreAutomatically = truecontainer.persistentStoreDescriptions.first?.shouldInferMappingModelAutomatically = true

container.loadPersistentStores { description, error in if let error = error { fatalError("Failed to load store: \\(error)") }}

मैन्युअल माइग्रेशन के लिए मॉडल के संस्करण (.xcdatamodeld) और NSMappingModel बनाए जाते हैं:

let sourceModel = NSManagedObjectModel(contentsOf: sourceURL)!let destinationModel = NSManagedObjectModel(contentsOf: destinationURL)!let mappingModel = NSMappingModel(from: [sourceModel, destinationModel], forSourceModel: sourceModel, destinationModel: destinationModel)

let manager = NSMigrationManager(sourceModel: sourceModel, destinationModel: destinationModel)try? manager.migrateStore(from: sourceURL, sourceType: NSSQLiteStoreType, options: nil, with: mappingModel, toDestinationURL: destinationURL, destinationType: NSSQLiteStoreType, destinationOptions: nil)


2. GRDB.swift — आधुनिक SQLite ड्राइवर

GRDB.swift चरणों के पंजीकरण पर आधारित एक लचीला माइग्रेशन तंत्र प्रदान करता है। माइग्रेशन क्रमिक रूप से और परमाणु रूप से निष्पादित होते हैं।

import GRDB

var migrator = DatabaseMigrator()

// पहली माइग्रेशन पंजीकृत करनाmigrator.registerMigration("v1_create_users") { db in try db.create(table: "users") { t in t.autoIncrementedPrimaryKey("id") t.column("name", .text).notNull() t.column("email", .text).unique() }}

// दूसरी माइग्रेशन पंजीकृत करना (फ़ील्ड जोड़ना)migrator.registerMigration("v2_add_age") { db in try db.alter(table: "users") { t in t.add(column: "age", .integer).defaults(to: 0) }}

// एप्लिकेशन स्टार्ट पर माइग्रेशन लागू करनाlet dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite")try migrator.migrate(dbQueue)

GRDB.swift के लाभ: टाइप किए गए क्वेरी, लेन-देन समर्थन, माइग्रेशन को आसानी से पूर्ववत करना।



3. Realm Swift (अब Atlas Device SDK)

Realm स्वचालित रूप से अधिकांश माइग्रेशन को संभालता है, लेकिन जटिल परिवर्तनों के लिए स्कीमा के स्पष्ट अपडेट की आवश्यकता होती है।

import RealmSwift

let config = Realm.Configuration( schemaVersion: 2, migrationBlock: { migration, oldSchemaVersion in if oldSchemaVersion < 1 { migration.enumerateObjects(ofType: "User") { oldObject, newObject in newObject?["fullName"] = "\\(oldObject!["firstName"] ?? "") \\(oldObject!["lastName"] ?? "")" }

अनुशंसाएँ