1. ایٹلس کی تعارف

ایٹلس

ایٹلس ایک زبان-غیرمخصوص اوزار ہے جو معاصر دیواپس اصولوں کا استعمال کرتے ہوئے ڈیٹا بیس اسکیما کو منظم اور مقدمہ کرنے کے لئے تیار کیا گیا ہے۔ یہ دو ورک فلو آپشن فراہم کرتا ہے:

  • اعلاناتی: ٹیرافارم کی طرح، ایٹلس موجودہ حالت کو ڈیٹا بیس کی مطلوب حالت جو ایچ سی ایل، ایس کیو ایل، یا ایس ایم اے اسکیما کے ذریعے معین کرتا ہے کے ساتھ موازنہ کرتا ہے۔ اس موازنہ کے بنیاد پر، یہ ڈیٹا بیس کو اس کی مطلوب حالت میں منتقل کرنے کے لئے ایک مقدمہ بناتا ہے اور اسے اجراء کرتا ہے۔
  • ورژن والا: دوسرے اوزاروں کی بجائے، ایٹلس خود بخود اسکیما میگریشنز کا منصوبہ بناتا ہے۔ صارفین اپنے چنے گئے ڈیٹا بیس اسکیمہ کو ایچ سی ایل، ایس کیو ایل، یا ان کی منتخب کردہ ای لو آر ایم کا استعمال کر کے وضاحت دے سکتے ہیں اور ایٹلس کے ذریعے چاہتے ہیں کہ ڈیٹا بیس کے لئے ضروری میگریشنز کا منصوبہ بناتے ہیں، جائزہ لیتے ہیں، اور لاگو کرتے ہیں۔

ایٹلس کی ایک بڑی فوائد یہ ہے کہ یہ ڈیٹا بیس کے انتظام کی پیچیدگی کو سادہ بناتا ہے، جس سے اس کا استعمال ورژن کنٹرول، ملازمت، اور نفاذ کے لئے آسان ہوتا ہے۔

2. ایٹلس کے انسٹال کرنا

ایٹلس کو ڈیٹا بیس ورژنز کو منظم کرنے سے پہلے، ہمیں اس کو انسٹال کرنا ہوگا۔ نیچے مختلف پلیٹ فارم کے لئے انسٹالیشن کے اقدامات دی گئی ہیں۔

2.1 میک آر لنکس انسٹالیشن

میک آر لنکس سسٹمز پر، آپ نیچے دیے گئے کمانڈ لائن کا استعمال کر کے ایٹلس کی تازہ ترین ورژن ڈاؤن لوڈ اور انسٹال کر سکتے ہیں:

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

یہ کمانڈ خود بخود عملی نظر ہونے والے آپریٹنگ سسٹم ورژن کی پہچان کرتی ہے، مناسب بلڈ ورژن ڈاؤن لوڈ کرتی ہے، اور ایٹلس کا بائینری فائل قابل اجراء راستہ میں رکھتی ہے۔

2.2 ہوم برو انسٹالیشن کرنا

اگر آپ میک آپریٹنگ سسٹم استعمال کر رہے ہیں اور پہلے ہی ہوم برو پیکج منیجر انسٹال کیا ہوا ہے، تو ایٹلس کو انسٹال کرنا بہت آسان ہے سادہ سا کمانڈ استعمال کر کے:

brew install ariga/tap/atlas

یہ کمانڈ ہوم برو کے ریپوزیٹری سے ایٹلس کی تازہ ترین ورژن کو فیچ کرتی ہے اور انسٹال کرتی ہے۔

2.3 ڈاکر انسٹالیشن کرنا

ایٹلس کو ڈاکر کے ذریعے انسٹال کرنا تیز اور آسان طریقہ ہے، خاص طور پر عارضی ٹیسٹنگ کے لئے یا وہ صارفین کے لئے جو اپنے ہوسٹ سسٹم پر اضافی سافٹ ویئر انسٹال نہیں کرنا چاہتے ہیں۔

سب سے پہلے، ایٹلس ڈاکر امیج کو پل کریں:

docker pull arigaio/atlas

پھر آپ ایک ہیلپ کمانڈ چلا کر یہ یقینی بنا سکتے ہیں کہ انسٹالیشن کامیاب ہوچکی ہے:

docker run --rm arigaio/atlas --help

اگر کنٹینر کو ہوسٹ نیٹ ورک یا مقامی ڈائریکٹریوں تک رسائی ہے چاہئے تو، --net=host فلیگ استعمال کریں اور ضروری ڈائریکٹریوں کو ماؤنٹ کریں:

docker run --rm --net=host \
  -v $(pwd)/migrations:/migrations \
  arigaio/atlas migrate apply \
  --url "mysql://root:pass@:3306/test"

2.4 ونڈوز انسٹالیشن کرنا

بائنری فائل ڈاؤن لوڈ کریں، https://release.ariga.io/atlas/atlas-windows-amd64-latest.exe, اور انسٹالیشن پتھ کو سسٹم کی PATH ماحولیات میں شامل کریں۔

3. آٹلس کے ذریعے موجودہ ڈیٹا بیس جدول کا ساخت Export کرنا

آٹلس atlas schema inspect کمانڈ فراہم کرتا ہے، جس کا استعمال کر کے موجودہ ڈیٹا بیس کا ساخت ایک فائل میں Export کیا جا سکتا ہے۔ یہ کمانڈ ڈیٹا بیس کی تفصیلات کو ڈیٹا بیس یو آر ایل URL سے پڑھتا ہے اور انہیں تین مختلف فارمیٹس میں باہر کرتا ہے: ڈیفالٹ آٹلس HCL فارمیٹ، SQL فارمیٹ اور JSON فارمیٹ۔ اس گائیڈ میں، ہم آپ کو دکھائیں گے کہ آٹلس HCL اور SQL فارمیٹس کا استعمال کیسے کریں، جبکہ JSON فارمیٹ عموماً jq کے ساتھ آؤٹپٹ پروسیس کرنے کے لئے استعمال ہوتا ہے۔

Local میں چل رہا MySQL انسٹنس کو inspect کرنے اور اس کا آوٹپٹ فائل schema.hcl میں لکھنے کے لیے، مندرجہ زیل کمانڈ کا استعمال کریں۔

atlas schema inspect -u "mysql://root:pass@localhost:3306/example" > schema.hcl

schema.hcl فائل کو کھول کر آٹلس جدول کی ساخت کی تعریف کو دیکھیں جو ڈیٹا بیس کی تفصیل کرے گی (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 کالموں کی ساخت کو ظاہر کرتا ہے۔ schema فیلڈ میں example ماڈل کی تعریف کا حوالہ ہے جو دستاویز کے کہیں اور موجودہ کیا گیا ہے۔ علاوہ ازیں، primary_key سب-بلاک نے id کالم کو جدول کے اہم کلید کے طور پر مختص کیا ہے۔ آٹلس کا اصول ہے کہ یہ ڈیٹا بیس کے فارم کو نقل کرے۔ اس مثال میں، id کالم کی قسم int ہے، جبکہ name کالم کی قسم varchar(100) ہے۔

اسی طرح، ڈیٹابیس کی ایک SQL ماڈل کی تعریف کو Export کرنے کے لیے، مندرجہ زیل کمانڈ کا استعمال کریں۔

atlas schema inspect -u "mysql://root:pass@localhost:3306/example" --format '{{ sql . }}' > schema.sql

schema.sql فائل کو کھول کر ڈیٹا بیس کی SQL تفصیلات کو دیکھیں، عام طور پر کچھ CREATE TABLE اسٹیٹمنٹس شامل ہوتے ہیں۔

یہ ترتیب موجودہ ڈیٹا بیس جدول کی ساخت کی تفصیلات سمجھنا میں مدد فراہم کرتا ہے اور منتقل کرنے کے لئے ایک درست حوالہ فراہم کرتا ہے۔

4.1 اظہاری ورک فلو

آٹلس کا اظہاری ورک فلو صارفین کو اظہاری طریقے سے ڈیٹا بیس کی مطلوبہ حالت کو تعین کرنے کی اجازت دیتا ہے۔ صارفین کو صرف یہ بیان کرنا ہوتا ہے کہ وہ ڈیٹا بیس کی مطلوبہ نهائی حالت کیا ہونی چاہئیے، اور آٹلس ٹول خود بخود اور امانت سے مائگریشن پلانز بنائے گا اور ڈیٹا بیس کی حالت کو موجودہ حالت سے اس متوقع حالت میں بدلنے کے لئے خود بخود اورامانت سے کرنے کی اجازت دیتا ہے۔

مندرجہ ذیل ہے کہ اظہاری ورک فلو کس طرح استعمال ہوتا ہے تاکہ مطلوبہ ڈیٹا بیس حالت کو تعین کرنے اور حاصل کرنے کا طریقہ:

4.1.1 مطلوبہ ٹیبل ساخت کی تشکیل

پہلے، آپ کو ایک فائل تخلیق کرنا ہوگا جس میں مطلوبہ ڈیٹا بیس کی ساخت کی تشکیل ہوگی جو HCL، SQL یا ORM (Object-Relational Mapping) فارمیٹ میں ہو سکتی ہے۔

HCL فارمیٹ کو مثال کے طور پر لیں، نیا blog_posts جدول تعریف کریں۔

table "blog_posts" {
  schema = schema.example
  column "id" {
    null = false
    type = int
  }
  column "title" {
    null = true
    type = varchar(100)
  }
  column "body" {
    null = true
    type = text
  }
  column "author_id" {
    null = true
    type = int
  }
  primary_key {
    columns = [column.id]
  }
  foreign_key "author_fk" {
    columns     = [column.author_id]
    ref_columns = [table.users.column.id]
  }
}

نصیحت: HCL کی انداز فرما کے بارے میں تفصیلات بعد میں بتائی جائیں گی۔

4.1.2 آٹلس ٹول کا استعمال کرتے ہوئے مائگریشن کریں

جب ڈیٹا بیس ٹیبل ساخت کی تعریف مکمل ہو جائے، تو آپ آٹلس کے schema apply كمانڈ کا استعمال کر کے مائگریشن کر سکتے ہیں۔

atlas schema apply \
  -u "mysql://root:pass@localhost:3306/example" \
  --to file://schema.hcl

مندرجہ بالا کمانڈ کو اجراء کرنے کے بعد، آٹلس موجودہ ڈیٹا بیس سکیوما کا مقایسہ موجودہ سکیما کے ساتھ کرے گا، ایک مائگریشن پلان بنائے گا، اور صارف سے تصدیق کے لئے پوچھے گا کہ انجام دینے کی اجازت ہے کہ نہیں۔ جب صارف اجازت دے دیتا ہے تو آٹلس ڈیٹا بیس پر مائگریشن کو انجام دے گا اور دی گئی مطلوبہ حالت تک اسے اپ ڈیٹ کرے گا۔

4.2 ورجن کنٹرول ورک فلو

ورجن کنٹرول ورک فلو ایک اور استعمال کرنے والا ترتیب ہے جو آٹلس کی طرف سے سپورٹ کیا جاتا ہے، کئی دفعات "تبدیلی کے مبنی مائگریشن" کہا جاتا ہے۔ یہ اس وقت کاروائی کے سیکنڈریا جہاں ڈیٹا بیس کی ڈیٹا بیس کی مطلوبہ تبدیلیاں ورژن کنٹرول کرنے کی ضرورت ہوتی ہے اور کود ریویو کے عمل کے دوران جائزہ دی جاتی ہیں کیلئے مناسب ہوتا ہے۔

ورجن کنٹرول ورک فلو کے قدموں میں یہ شامل ہے:

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 خالی ڈیٹا بیس کو مخصوص کرنا ہوگا جسے اطلس فرق کا حساب کرنے کے لئے استعمال کرتا ہے)۔

مشورہ: اگر آپ SQL فائلیں تخلیق کرنا چاہتے ہیں، تو --format پیرامیٹر کا استعمال کر کے فارمیٹ مقرر کرنے کے لئے پچھلے حصے کا رجوع کریں۔

4.2.2 مائگریشن کے تبدیلیاں لاگو کریں

فرق کا حساب کرنے کے بعد، اطلس مائگریشن فولڈر میں محفوظ دو مائگریشن فائلیں تخلیق کرے گا۔ مثال کے طور پر، اگر منتخب فارمیٹ 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 ایک اظہاری زبان ہے جو ڈیٹا بیس ٹیبل سڑکچر کی تعریف کے لئے استعمال ہوتا ہے۔ اطلس ہے سی ells، حاصل کرنے کے لئے، مختلف جوانب تعریف کرنے کے لئے ایک ماضی ساز بناتا ہے۔ HCL کا فائدہ اس کی قابل پڑھائی، صرف رکے میں سختی، اور خصوصیات اور مضافات کے سپورٹ کے لئے اضافی حواشی بھرنے میں ہے۔

مشورہ: اگر آپ کا پروجیکٹ مختلف ڈیٹا بیسز کے لئے ایڈاپٹ ہونا چاہتا ہے، تو HCL کا استعمال کرکے ڈیٹا بیس سڑکچر کو ایک مداخلت پذیر طریقے سے دیہاڑ کرنا بہت مفید ہو سکتا ہے۔

5.2 schema اشیا

schema ایک ڈیٹا بیس سکیما کی وضاحت کرنے کے لئے استعمال ہوتا ہے۔ MySQL اور SQLite میں، یہ DATABASE کو ظاہر کرتا ہے، جبکہ PostgreSQL میں، یہ SCHEMA کو ظاہر کرتا ہے۔ ایک HCL فائل میں ایک سے زیادہ schema اشیا شامل ہو سکتے ہیں۔

schema "public" {
  comment = "ایک اسکیما تبصرہ"
}

schema "private" {}

5.3 table اشیاء

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 column اشیاء

column توضیح کے لئے 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
}