Ecto এবং Database Integration এর ব্যবহার

Phoenix Framework (ফিনিক্স ফ্রেমওয়ার্ক) - এলিক্সির (Elixir) - Computer Programming

402

Ecto এবং Database Integration in Elixir

Ecto হল Elixir তে ব্যবহৃত একটি শক্তিশালী ডেটাবেস লাইব্রেরি যা ডেটাবেস ইন্টিগ্রেশন, মাইগ্রেশন, এবং স্কিমা পরিচালনা করতে ব্যবহৃত হয়। এটি Elixir প্রোগ্রামিং ভাষার জন্য একটি ফাংশনাল এবং ডিক্ল্যারেটিভ ডেটাবেস লাইব্রেরি, যা SQL এবং NoSQL ডেটাবেসের সাথে সহজে কাজ করতে সক্ষম।

এখানে, আমরা Ecto এর মাধ্যমে Database Integration কীভাবে করা হয়, সেটি বিস্তারিতভাবে আলোচনা করবো।


1. Ecto Overview

Ecto হল একটি database wrapper এবং query builder যা Elixir প্রোগ্রামিং ভাষার জন্য তৈরি করা হয়েছে। এটি আপনার ডেটাবেসের সাথে যোগাযোগ করতে সাহায্য করে, মডেল তৈরি করতে, কোয়েরি রচনা করতে এবং ডেটা পরিচালনা করতে।

  • Ecto.Repo: ডেটাবেসের সাথে সংযোগ স্থাপন এবং ডেটা ইন্টেরেক্ট করার জন্য ব্যবহৃত হয়।
  • Ecto.Schema: ডেটাবেস টেবিল বা কালেকশনগুলির জন্য স্কিমা তৈরি করতে ব্যবহৃত হয়।

2. Ecto সেটআপ এবং কনফিগারেশন

Ecto ইনস্টলেশন:

প্রথমে Ecto এবং Ecto.SQL এর ইনস্টলেশন প্রয়োজন।

আপনার Elixir প্রোজেক্টে Ecto ইনস্টল করতে mix.exs ফাইলে ডিপেনডেন্সি যোগ করুন:

defp deps do
  [
    {:ecto_sql, "~> 3.7"},
    {:postgres, ">= 0.0.0"}  # For PostgreSQL. For other databases, change the adapter
  ]
end

এখানে, ecto_sql ব্যবহার করা হয়েছে কারণ আমরা SQL ডেটাবেস ব্যবহার করছি। আপনি যদি PostgreSQL ব্যবহার করেন, তবে postgres ডিপেনডেন্সি যুক্ত করা হয়েছে।

তারপর, ডিপেনডেন্সি ইনস্টল করতে mix deps.get চালান।

Repo কনফিগারেশন:

আপনার config/config.exs ফাইলে ডেটাবেস সংযোগের কনফিগারেশন করুন।

config :my_app, MyApp.Repo,
  username: "postgres",
  password: "postgres",
  database: "my_app_db",
  hostname: "localhost",
  pool_size: 10

এখানে, আপনার PostgreSQL ডেটাবেসের কনফিগারেশন যুক্ত করা হয়েছে।


3. Ecto.Schema এবং Database Table Mapping

Ecto.Schema:

Ecto.Schema ব্যবহার করে ডেটাবেস টেবিল বা কালেকশনগুলির স্কিমা তৈরি করা হয়। এটি Elixir এর structs এর মতো কাজ করে এবং টেবিলের কলামগুলির মান ধারণ করে।

Schema উদাহরণ:

defmodule MyApp.User do
  use Ecto.Schema
  import Ecto.Changeset

  schema "users" do
    field :name, :string
    field :email, :string
    field :age, :integer

    timestamps()  # Adds inserted_at and updated_at fields
  end

  def changeset(user, attrs) do
    user
    |> cast(attrs, [:name, :email, :age])
    |> validate_required([:name, :email, :age])
  end
end

এখানে, MyApp.User স্কিমা তৈরি করা হয়েছে যা users টেবিলের জন্য। timestamps() ফাংশনটি inserted_at এবং updated_at ফিল্ডগুলো অটোমেটিকালি যোগ করে।


4. Ecto.Repo - Database Interaction

Ecto.Repo ডেটাবেসে ডেটা সন্নিবেশ, আপডেট, ডিলিট এবং কোয়েরি করার জন্য ব্যবহৃত হয়। এটি Elixir এর জন্য SQL Query Builder হিসাবে কাজ করে।

Repo কনফিগারেশন:

প্রথমে আপনার Repo মডিউল তৈরি করুন:

defmodule MyApp.Repo do
  use Ecto.Repo,
    otp_app: :my_app,
    adapter: Ecto.Adapters.Postgres
end

এখানে, Ecto.Repo ব্যবহার করা হয়েছে যা Postgres ডেটাবেসের জন্য অ্যাডাপ্টার হিসেবে কাজ করবে।

Repo মডিউলের মাধ্যমে ডেটাবেস অপারেশন:

Insert:

%MyApp.User{name: "Alice", email: "alice@example.com", age: 30}
|> MyApp.Repo.insert()

এখানে, MyApp.User মডেলটির একটি নতুন ইনস্ট্যান্স তৈরি করে insert অপারেশন করা হয়েছে।

Query:

# Get all users
users = MyApp.Repo.all(MyApp.User)

# Get a user by ID
user = MyApp.Repo.get(MyApp.User, 1)

# Query with filters
young_users = MyApp.Repo.all(from u in MyApp.User, where: u.age < 30)

এখানে, MyApp.Repo.all/1 এবং MyApp.Repo.get/2 ব্যবহার করে ডেটা রিট্রিভ করা হয়েছে। Ecto.Query এর মাধ্যমে filteringjoining করা যায়।

Update:

user = MyApp.Repo.get(MyApp.User, 1)
changeset = MyApp.User.changeset(user, %{age: 31})

MyApp.Repo.update(changeset)

এখানে, একটি user এর বয়স আপডেট করা হচ্ছে।

Delete:

user = MyApp.Repo.get(MyApp.User, 1)
MyApp.Repo.delete(user)

এখানে, user টেবিলের একটি রেকর্ড ডিলিট করা হচ্ছে।


5. Ecto Migrations - Database Schema Management

Ecto Migrations ব্যবহার করে আপনি ডেটাবেস স্কিমা পরিবর্তন করতে পারেন। যেমন নতুন টেবিল তৈরি করা, কলাম যোগ করা, কলাম মুছে ফেলা, ইত্যাদি।

Migration উদাহরণ:

defmodule MyApp.Repo.Migrations.CreateUsers do
  use Ecto.Migration

  def change do
    create table(:users) do
      add :name, :string
      add :email, :string
      add :age, :integer

      timestamps()
    end
  end
end

এখানে, CreateUsers মাইগ্রেশনটি users টেবিল তৈরি করছে।

Migration রান করা:

mix ecto.migrate

এটি সমস্ত মাইগ্রেশন রান করে এবং ডেটাবেসে পরিবর্তনগুলি প্রয়োগ করে।


6. Ecto Querying - Advanced Operations

Elixir তে Ecto.Query ব্যবহার করে আপনি আরও উন্নত কোয়েরি করতে পারেন যেমন joins, group by, aggregations, ইত্যাদি।

Join Example:

from(u in MyApp.User, 
  join: p in MyApp.Post, 
  on: p.user_id == u.id,
  where: u.age > 25, 
  select: {u.name, p.title})
|> MyApp.Repo.all()

এখানে, User এবং Post টেবিলের মধ্যে join অপারেশন করা হয়েছে।

Aggregation Example:

from(u in MyApp.User,
  select: avg(u.age))
|> MyApp.Repo.one()

এখানে, average age বের করা হচ্ছে।


7. Testing with Ecto

Elixir তে Ecto ব্যবহার করে টেস্টিং খুবই সহজ, কারণ আপনি sandbox mode ব্যবহার করে আপনার ডেটাবেসে টেস্ট ডেটা insert, update, delete করতে পারেন।

Test Setup:

defmodule MyApp.UserTest do
  use ExUnit.Case
  import Ecto.Query
  alias MyApp.{Repo, User}

  setup do
    :ok = Ecto.Adapters.SQL.Sandbox.checkout(MyApp.Repo)
  end

  test "creating a user" do
    changeset = User.changeset(%User{}, %{name: "Alice", email: "alice@example.com", age: 30})
    {:ok, user} = Repo.insert(changeset)

    assert user.name == "Alice"
  end
end

এখানে, Ecto.Adapters.SQL.Sandbox.checkout/1 ব্যবহৃত হচ্ছে যাতে টেস্টের মধ্যে ট্রানজেকশন পরিচালনা করা যায়।


সারসংক্ষেপ

  • Ecto হল Elixir এর জন্য একটি শক্তিশালী ডেটাবেস লাইব্রেরি যা database interaction এবং schema management সহজ করে।
  • Ecto.Repo এবং Ecto.Schema ব্যবহার করে ডেটাবেসের সাথে সহজেই সংযুক্ত হওয়া যায়, ডেটা ইনসার্ট, আপডেট, ডিল

িট এবং কোয়েরি করা যায়।

  • Ecto Migrations ব্যবহৃত হয়ে ডেটাবেস স্কিমা আপডেট এবং পরিবর্তন করা যায়।
  • Ecto.Query ব্যবহার করে জটিল কোয়েরি এবং ফিল্টারিং করা যায়।
  • Test টেস্টিংয়ের জন্য Ecto এর সাথে sandbox mode ব্যবহার করা হয়, যাতে ডেটাবেসে কোনো স্থায়ী পরিবর্তন না হয়।

Ecto এর মাধ্যমে Elixir ডেভেলপাররা ডেটাবেসের সাথে সহজে কাজ করতে পারেন, যা অ্যাপ্লিকেশন ডেভেলপমেন্ট এবং পরিচালনা আরও কার্যকরী করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...