1. আটলাসের পরিচিতি
আটলাস হল একটি ভাষা-মুক্ত সরঞ্জাম, যা আধুনিক ডেভঅপস প্রিন্সিপল ব্যবহার করে ডাটাবেস স্কিমা পরিচালনা এবং মাইগ্রেশনের জন্য তৈরি করা হয়েছে। এটি দুটি মোডে নিয়ে কাজ করে:
- ঘোষণামূলক: টেরাফর্মের মতো, আটলাস বর্তমান ডাটাবেসের অবস্থার সাথে এইচসিএল, এসকিউএল, বা ওআরএম স্কিমা দ্বারা নির্ধারিত করা মাইগ্রেশন পরিকল্পনা তৈরি এবং প্রয়োগ করে।
- সংষ্করণমূল মোড: অন্য সরঞ্জামগুলোর বিপরীতে, আটলাস নিজেই স্কিমা মাইগ্রেশনের পরিকল্পনা করে। ব্যবহারকারীরা তাদের পছন্দমত ওআরএম, এইচস
3. এটলাস ব্যবহার করে বিদ্যমান ডাটাবেস টেবিল স্ট্রাকচার রপ্তানি
এটলাস atlas schema inspect
কমান্ড প্রদান করে, যা ব্যবহার করা যেতে পারে বিদ্যমান ডাটাবেসের স্ট্রাকচার রপ্তানি করতে। এই কমান্ডটি ডাটাবেস URL থেকে ডাটাবেস বিবরণ পড়াবে এবং তাদের তিনটি ভিন্ন রূপে: ডিফল্ট অ্যাটলাস HCL ফরম্যাট, SQL ফরম্যাট এবং JSON ফরম্যাটে আউটপুট করতে ব্যবহার করা যায়। এই গাইডে, আমরা দেখাব কীভাবে অ্যাটলাস HCL এবং SQL ফরম্যাট ব্যবহার করতে হয়, কারণ JSON ফরম্যাট টি সাধারণত jq
দিয়ে আউটপুট প্রসেস করার জন্য ব্যবহৃত হয়।
আপনি যদি স্থানিকভাবে চলমান MySQL ইনস্ট্যান্স রিপোর্ট করতে এবং আউটপুটটি ফাইলে লিখতে চান "schema.hcl" নামের ফাইল, তাহলে নিম্নলিখিত কমান্ডটি ব্যবহার করুন।:
atlas schema inspect -u "mysql://root:pass@localhost:3306/example" > schema.hcl
schema.hcl
ফাইল খোলতে অটলাস টেবিল স্ট্রাকচার সংজ্ঞা বর্ণনা দেখতে। উদাহরণস্বরূপ, এই ফাইলটি নিম্নলিখিত ভাবে থাকবে:
table "users" {
schema = schema.example
column "id" {
null = false
type = int
}
column "name" {
null = true
type = varchar(100)
}
primary_key {
columns = [column.id]
}
}
এই কোড ব্লকটি id
এবং name
কলাম সহ টেবিল স্ট্রাকচার প্রতিনিধিত্ব করে। স্কিমা
ফিল্ড আলাদা করে ডাটাবেস (HCL হল অ্যাটলাস দ্বারা নির্ধারিত ডেটাবেস-অবিপন্ন টেবিল স্ট্রাকচার কনফিগারেশন ফরম্যাট) এর সংজ্ঞা প্রসঙ্গ অন্য কোথায় নির্ধারিত করে। ছাত্র প্রধান এই id
কলামের উপর প্রাথমিক কী হিসাবে নির্ধারিত। অ্যাটলাস তাদের অপারেট করা ডাটাবেজের সিনট্যাক্স অনুকরণ করার চেষ্টা করে। উদাহরণ হিসাবে, এই উদাহরণে, id
কলামের এন্টাইপি হল int
, যেখানে নাম
কলামের এন্টাইপি হল varchar(100)
।
অনুরূপভাবে, ডাটাবেসের SQL মডেল সংজ্ঞা রপ্তানি করতে, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:
atlas schema inspect -u "mysql://root:pass@localhost:3306/example" --format '{{ sql . }}' > schema.sql
schema.sql
ফাইল খোলতে ডাটাবেসের এসকিউএল বর্ণনা দেখুন, সাধারণত কিছু CREATE TABLE বিবরণী থাকবে।
এই পদ্ধতিটি বিদ্যমান ডাটাবেস টেবিল স্ট্রাকচারের বিবরণ বুঝতে সুবিধা প্রদান করে এবং পরবর্তী সংস্করণযুক্ত মাইগ্রেশনের জন্য একটি সঠিক উল্লিখিত সন্দর্ভ প্রদান করে।
4.2.1 পার্থক্য গণনা করুন
মাইগ্রেশন শুরু করার আগে, বর্তমান ডাটাবেস স্ট্রাকচার এবং প্রয়োজনীয় অবস্থা তুলনা করা এবং দুটির মধ্যে পার্থক্য নির্ধারণ করা প্রয়োজন। এটি করা যায় atlas migrate diff
কমান্ড চালানোর মাধ্যমে।
atlas migrate diff create_blog_posts \
--dir "file://migrations" \
--to "file://schema.hcl" \
--dev-url "docker://mysql/8/example"
--dir
মাইগ্রেশন ফোল্ডারের URL নির্দেশ করে, যা file://migrations
ডিফল্ট হয়। --to
প্রায়োজনীয় অবস্থার URL নির্দেশ করে (উদাহরণস্বরূপ, আপনার বিকাশের এনভায়রনমেন্ট ডাটাবেস), এবং --dev-url
উন্নয়নের ডিয়েভলপমেন্টের ডাটাবেসের জন্য URL সরবরাহ করে (নোট করুন যে --dev-url
এটলা খালি ডাটাবেসের URL নির্দিষ্ট করতে হবে যাতে পার্থক্য হিসাবে ব্যবহার করা হয়)।
পরামর্শ: যদি আপনি SQL ফাইলগুলি জেনারেট করতে চান, তবে
--format
প্যারামিটার ব্যবহার করে ফরম্যাট সেট করা এবং আগের অধ্যায়ে রেফার করুন।
4.2.2 মাইগ্রেশন পরিবর্তন প্রয়োগ করুন
পার্থক্য গণনা শেষ করার পরে, আটলাস মাইগ্রেশন এর মধ্যে দুটি মাইগ্রেশন ফাইল তৈরি করবে যা migrations
ফোল্ডারে সংরক্ষণ করা হবে। উদাহরণস্বরূপ, যদি নির্বাচিত ফরম্যাট SQL হয়, তবে diff
কমান্ড দ্বারা তৈরি ফাইলগুলি, যেমন নিম্নলিখিত SQL ফাইল, নতুন টেবিল তৈরি করতে মাইগ্রেশন কমান্ড ধারণা করে:
-- "blog_posts" টেবিল তৈরি করুন
CREATE TABLE `blog_posts` (
`id` int NOT NULL,
`title` varchar(100) DEFAULT NULL,
`body` text DEFAULT NULL,
`author_id` int NULL REFERENCES `users`(id),
PRIMARY KEY (`id`)
);
মাইগ্রেশন ফাইলগুলি তৈরি হওয়ার পরে, আপনি ভার্সন কন্ট্রোল টুল (উদাহরণস্বরূপ, গিট) ব্যবহার করে এই পরিবর্তনগুলি পরিচালনা করতে পারেন। এই পদ্ধতি ব্যবহার করে উন্নয়নের ডিভেলপমেন্ট এনভায়রনমেন্টে বিভিন্ন ডাটাবেস টেবিল স্ট্রাকচার পরিবর্তন করার সুযোগ প্রদান করে, এবং যখন রিলিজের সময় হয়, আটলাসের কমান্ড ব্যবহার করে উন্নয়ন এবং UAT এনভায়রনমেন্ট তুলনা করা হয়ে ডাটাবেস টেবিল স্ট্রাকচার মাইগ্রেশন ফাইল তৈরি করা। এই মাইগ্রেশন ফাইলগুলি তারপর UAT এবং প্রোডাকশন এনভায়রনমেন্টে প্রয়োগ করা যাবে ডাটাবেস আপগ্রেড করার জন্য।
এই দুটি ওয়ার্কফ্লো, ডেক্লারেটিভ এবং ভার্সনেড, বিভিন্ন ডেভেলপমেন্ট এবং ডিপ্লয়মেন্ট মোডের জন্য সমযোজ্জিত প্রযুক্তি সরবরাহ করে, যা ডাটাবেস স্কিমা পরিবর্তনের জন্য তাদের প্রজেক্ট এর প্রয়োজনীয় পদ্ধতি নির্বাচন করার সুযোগ দেয়।
5. HCL ফরম্যাট বর্ণনা
5.1 পরিচিতি
HCL হল একটি ঘোষণামূলক ভাষা যা ডাটাবেস টেবিল স্ট্রাকচার সংজ্ঞানা করার জন্য ব্যবহৃত হয়। আটলাস HCL ফরম্যাট ব্যবহার করে ডাটাবেস স্কিমা লিখতে, যা বিভিন্ন দিক বর্ণনা করার জন্য একটি ধারণ সরবরাহ করে। HCL এর সুবিধা হল এর পঠনযোগ্যতা, সহজতা রক্ষণ এবং ভেরিয়েবল ইনজেকশন এবং অতিরিক্ত এনটোটেশন সহ বৈশিষ্ট্য সমর্থন করা।
পরামর্শ: আপনার প্রজেক্ট যদি একাধিক ডাটাবেসের সাথে অনুকূল হতে হয়, তবে HCL ব্যবহার করে এটি একটি খুব সুবিধাজনক পদ্ধতি হতে সক্ষম হতে পারে যেখানে ডেটাবেসের স্ট্রাকচার পরিভাষা করা হয়।
5.2 স্কিমা
অবজেক্ট
schema
অবজেক্টটি ডাটাবেস স্কিমা বর্ণনা করার জন্য ব্যবহৃত হয়। MySQL এবং SQLite তে, এটি ডাটাবেস
প্রতিনিধিত্ব করে, যখন PostgreSQL এ, এটি স্কিমা
প্রতিনিধিত্ব করে। HCL ফাইলে এক বা একাধিক schema
অবজেক্ট থাকতে পারে।
schema "public" {
comment = "একটি স্কিমা মন্তব্য"
}
schema "private" {}
5.3 টেবিল
অবজেক্ট
table
অবজেক্টটি SQL ডাটাবেসে একটি টেবিল বর্ণনা করার জন্য ব্যবহৃত হয়, যা কলাম, ইনডেক্স, পরিবৈধতা এবং বিভিন্ন বিভিন্ন ডাটাবেস ড্রাইভার দ্বারা সমর্থিত বৈশিষ্ট্য বর্ণনা করে।
table "users" {
schema = schema.public
column "id" {
type = int
}
column "name" {
type = varchar(255)
}
column "manager_id" {
type = int
}
primary_key {
columns = [
column.id
]
}
index "idx_name" {
columns = [
column.name
]
unique = true
}
foreign_key "manager_fk" {
columns = [column.manager_id]
ref_columns = [table.users.column.id]
on_delete = CASCADE
on_update = NO_ACTION
}
}
5.4 কলাম
অবজেক্ট
কলাম
টেবিলের কলাম সংজ্ঞানা করার জন্য table
এর একটি সব-রিসোর্স হয়।
column "name" {
type = text
null = false
}
column "age" {
type = integer
default = 42
}
column "active" {
type = tinyint(1)
default = true
}
5.5 primary_key
অবজেক্ট
primary_key
টি table
এর একটি সাব-রিসোর্স, যা টেবিলের প্রাথমিক কী নির্ধারণ করে।
primary_key {
columns = [column.id]
}
5.6 foreign_key
অবজেক্ট
foreign_key
টি table
এর একটি সাব-রিসোর্স, যা অন্যান্য টেবিলের কলামের উপর সম্প্রেষণ করা কলাম নির্ধারণ করে।
table "orders" {
schema = schema.market
// ...
column "owner_id" {
type = integer
}
foreign_key "owner_id" {
columns = [column.owner_id]
ref_columns = [table.users.column.id]
on_update = NO_ACTION
on_delete = NO_ACTION
}
}
5.7 index
অবজেক্ট
index
অবজেক্টটি টেবিলে একটি সূচক প্রতিনিধিত্ব করে।
index "idx_name" {
columns = [
column.name
]
unique = true
}