1. মাইগ্রেশন মেকানিজমের ওভারভিউ

1.1 মাইগ্রেশনের ধারণা এবং ভূমিকা

ডাটাবেস মাইগ্রেশন হল ডেটা মডেলে পরিবর্তন সমতলে ডাটাবেস স্ট্রাকচারে সামঞ্জস্যপূর্ণ পরিবর্তন করার প্রক্রিয়া, যা ডেটা ধারণের জন্য গুরুত্বপূর্ণ। অ্যাপ্লিকেশন সংস্করণ অগ্রগতি করার সাথে সাথে, ডেটা মডেল সময়ের সাথে পরিবর্তন পাতে, যেমন ফিল্ড যোগ করা, অথবা মুছে ফেলা, বা সূচনা পরিবর্তন করা। মাইগ্রেশন প্রমাণ করে যে ডেভেলপাররা ডাটাবেস স্ট্রাকচার এবং ডেটা মডেল মধ্যে সংগতি নিশ্চিত করার ঠিকানা অনুযায়ী পরিবর্তন পরিচালনা করতে পারে।

আধুন

3.3 অফলাইন মোড

অফলাইন মোড সর্বস্থানীয়ে ডেটাবেসে না পরিচালনা করে, io.Writer এর মধ্যে স্কিমা পরিবর্তন লিখতে অনুমতি দেয়। এটি বোঝার জন্য দরকার হতে পারে SQL কমান্ডের আগেই পরিবর্তন যাচাই করতে, অথবা ম্যানুয়াল অনুষ্ঠানের জন্য একটি SQL স্ক্রিপ্ট তৈরি করতে। উদাহরণস্বরূপ:

// মাইগ্রেশন পরিবর্তন ফাইলে ডাম্প করুন
f, err := os.Create("migrate.sql")
if err != nil {
    log.Fatalf("মাইগ্রেশন ফাইল তৈরি করতে ব্যর্থ হয়েছে: %v", err)
}
defer f.Close()
if err := client.Schema.WriteTo(ctx, f); err != nil {
    log.Fatalf("ডেটাবেস স্কিমা পরিবর্তন লেখা ব্যর্থ হয়েছে: %v", err)
}

এই কোডটি মাইগ্রেশন পরিবর্তনগুলি একটি ফাইলে নামক migrate.sql লিখবে। বাস্তবায়নে, ডেভেলপাররা নির্ধারণ করতে পারে যে উনিরা পর্যালোচনা বা রেকর্ড রাখতে সরাসরি মানব উদ্ধৃতি প্রিন্ট করবেন অথবা ফাইলে লিখবেন।

4. ফরেন কী সাপোর্ট এবং কাস্টম হুক

4.1 ফরেন কী চালু বা বন্ধ করুন

Ent-এ, পরায়ণকারী কী বাণিজ্যিক বৈশিষ্ট প্রদান করার মাধ্যমে পরায়ণবৈশিষ্ট্য সনাক্ত করা হয়, এবং এই ফরেন কী সম্পর্কগুলি ডেটাবেসের স্তরে স্বতঃপ্রিয়তা এবং তালিকাবদ্ধতা লাগু করতে স্বয়ংক্রিয়ভাবে তৈরি করা হয়। তবে, নির্দিষ্ট অবস্থায়, যেমন কার্যদর্শন অপটাইমাইজেশন বা ডেটাবেস যখন ফরেন কী সমর্থন করে না, তাহলে আপনি তাদের বন্ধ করার জন্য চয়ন করতে পারেন।

মাইগ্রেশনে বিদেশি কী সীমাগুলি সক্রিয় করতে বা বিলুপ্ত করতে, আপনি WithForeignKeys কনফিগারেশন অপশন দ্বারা এটি নিয়ন্ত্রণ করতে পারেন:

// বিদেশি কী চালু করুন
err = client.Schema.Create(
    ctx,
    migrate.WithForeignKeys(true), 
)
if err != nil {
    log.Fatalf("বিদেশি কী সহ স্কীমা সম্পদ তৈরি করতে ব্যর্থ হয়েছে: %v", err)
}

// বিদেশি কী বন্ধ করুন
err = client.Schema.Create(
    ctx,
    migrate.WithForeignKeys(false), 
)
if err != nil {
    log.Fatalf("বিদেশি কী ছাড়া স্কীমা সম্পদ তৈরি করতে ব্যর্থ হয়েছে: %v", err)
}

এই কনফিগারেশন অপশনটি ডিডিএলে বিদ্যমান ভ্যালুর ভিত্তিতে জেনারেট হওয়া DDL-এ বিদেশি কী সীমাগুলি অন্তর্ভুক্ত করতে বা উপজেনেরেট করতে নির্ধারণ করে।

4.2 মাইগ্রেশন হুকের অনুপ্যুক্তি

মাইগ্রেশন হুক হল কাস্টম বৈশিষ্ট্য, যা বিভিন্ন মাইগ্রেশন সম্পাদনার বিভিন্ন পদক্ষেপে অংশ নিতে এবং অভিন্ন মাইগ্রেশনের আগে/পরে কাস্টম লজিক প্রস্তুত করতে ব্যবহার করা যায়। এটি মাইগ্রেশনের পরিণাম যাচাই করার জন্য এবং পূর্বে/পরবর্তী ডেটাবেসে বিশেষ লজিক পরিস্থিতি সম্পাদনের জন্য অত্যন্ত দরকার।

এখানে কাস্টম মাইগ্রেশন হুক অনুপ্যুক্ত করার একটি উদাহরণ:

func customHook(next schema.Creator) schema.Creator {
    return schema.CreateFunc(func(ctx context.Context, tables ...*schema.Table) error {
        // মাইগ্রেশনের আগে সুতরাং ব্যক্তিগত কোড
        // একমুখী, কিছু পূর্বাপেক্ষায় পর্যালোচনা ইত্যাদি।
        log.Println("মাইগ্রেশনের আগে গণিতবিদ-নিয়মানুসার লজিক")

        // পরবর্তী হুক বা ডিফল্ট মাইগ্রেশন লজিক কল করুন
        err := next.Create(ctx, tables...)
        if err != nil {
            return err
        }

        // মাইগ্রেশনের পরে সুতরাং ব্যক্তিগত কোড
        // পরিষ্কার, ডেটা মাইগ্রেশন, নিরাপত্তা পরীক্ষা ইত্যাদি।
        log.Println("মাইগ্রেশনের পরে গণিতবিদ-নিয়মানুসার লজিক")
        return nil
    })
}

// মাইগ্রেশনে কাস্টম হুকগুলি ব্যবহার করা
err := client.Schema.Create(
    ctx,
    schema.WithHooks(customHook),
)
if err != nil {
    log.Fatalf("কাস্টম মাইগ্রেশন হুক প্রয়োগ করার সময় ত্রুটি: %v", err)
}

হুক শক্তিশালী এবং জায়গা নেয় পাঁয় জটিল মাইগ্রেশনের জন্য, প্রয়োজনে তাদের ডাটাবেস মাইগ্রেশন ব্যবহার করতে নিয়ন্ত্রণ দেয়।

5. ভার্সনয়েড মাইগ্রেশন

5.1 ভার্সন যুক্ত মাইগ্রেশনের পরিচিতি

ভার্সনয়োজিত মাইগ্রেশন হ'ল ডেটাবেস মাইগ্রেশন পরিচালনার জন্য একটি প্যাটার্ন, যা ডেভেলপারদের প্রদান করে তাদের ডাটাবেসের ক্ষেত্র পরিবর্তন সংস্কার বিভাজন করতে, প্রতিটি একজন নির্দিষ্ট বিশিষ্ট কার্যাদি নিয়েওয়া, যা বিভান্ন বিভাগে অনুষ্ঠানী সাম্পর্কিত কমান্ড বিশিষ্ট করায়। অটো মাইগ্রেশনের তুলনায়, ভার্সনড মাইগ্রেশন ছেঁড়ে পেয়েন্নের নিয়ন্ত্রণ প্রদান করে, ডেটাবেস কাঠামো পরিবর্তনের নিরাপত্তা এবং প্রতিষ্ঠিত করে। সমান্তরালক মাইগ্রেশনের মুখ্য সুবিধা হল এটি আগামী এবং পিছুগামি মাইগ্রেশনের সমর্থন (অর্থাৎ, আপগ্রেড অথবা বিগ্রেড) যা ডেভেলপারদের অনুযায়ী নির্দিষ্ট পরিবর্তন লাগু করতে, ফিরিয়ে নেয়া বা বাউন্ডল্যান্ড উপকরণ করতে অনুমতি দেয়। দলের সাথে সহযোগিতা করা যখন ভার্সনড মাইগ্রেশনের অধীনে, ভার্সনড মাইগ্রেশন নিশ্চিত করে প্রতিটি সদস্য একই ডাটাবেস কাঠামোর উপর কাজ করে, অনৈচিত্যের কারণে হতাশার সমস্যাগুলি কমিয়ে।

অটো মাইগ্রেশন সাধারণত অপূর্বাভাস, এক্ষেত্রে নতুন অবস্থার পূর্বে আট

1. আটলাস টুল ইনস্টল করা

ভার্শনড মাইগ্রেশন ব্যবহার করার আগে, আপনার সিস্টেমে আটলাস টুলটি ইনস্টল করতে হবে। আটলাস হল একটি মাইগ্রেশন টুল যা বহুল ডাটাবেস সিস্টেম সমর্থন করে, যা ডাটাবেস স্কিমা পরিবর্তন পরিচালনা করার জন্য শক্তিশালী বৈশিষ্ট্য সরবরাহ করে।

MacOS + Linux

curl -sSf https://atlasgo.sh | sh

Homebrew

brew install ariga/tap/atlas

Docker

docker pull arigaio/atlas
docker run --rm arigaio/atlas --help

Windows

https://release.ariga.io/atlas/atlas-windows-amd64-latest.exe

2. বর্তমান ইন্টিটি সংজ্ঞানা ভিত্তিক মাইগ্রেশন ফাইল জেনারেট করা

atlas migrate diff migration_name \
  --dir "file://ent/migrate/migrations" \
  --to "ent://ent/schema" \
  --dev-url "docker://mysql/8/ent"

3. অ্যাপ্লিকেশন মাইগ্রেশন ফাইল

মাইগ্রেশন ফাইল তৈরি হলে, এগুলি ডেভেলপমেন্ট, টেস্টিং, বা প্রোডাকশন পরিবেশে প্রযোগ করা যেতে পারে। সাধারণত, আপনি প্রথমে এই মাইগ্রেশন ফাইলগুলি একটি ডেভেলপমেন্ট বা টেস্টিং ডাটাবেসে প্রযোগ করবেন যাতে এগুলি যে ভাবে বাস্তবায়ন করে তা নিশ্চিত হতে পারে। তারপর, একই মাইগ্রেশন পদক্ষেপগুলি প্রোডাকশন পরিবেশে বাস্তবায়ন করা হবে।

atlas migrate apply \
  --dir "file://ent/migrate/migrations" \
  --url "mysql://root:pass@localhost:3306/example"

atlas migrate apply কমান্ড ব্যবহার করে, লক্ষ্যযুক্ত ডাটাবেসের মাইগ্রেশন ফাইল নির্দিষ্ট করা হবে (--dir) এবং উদ্দেশ্যযুক্ত ডাটাবেসের URL নির্দিষ্ট করতে (--url)। মাইগ্রেশন ফাইলগুলি প্রযোগ করতে।