AlloyDB Omni তে কলামার ইঞ্জিন সহ বিশ্লেষণাত্মক প্রশ্নগুলিকে ত্বরান্বিত করা৷

১. ভূমিকা

এই কোডল্যাবে আপনি শিখবেন কীভাবে AlloyDB Omni স্থাপন করতে হয় এবং কোয়েরির পারফরম্যান্স উন্নত করতে Columnar Engine ব্যবহার করতে হয়।

80a4ce38b05ed3c4.png

পূর্বশর্ত

  • গুগল ক্লাউড ও কনসোল সম্পর্কে প্রাথমিক ধারণা
  • কমান্ড লাইন ইন্টারফেস এবং গুগল শেলে প্রাথমিক দক্ষতা

আপনি যা শিখবেন

  • গুগল ক্লাউডে GCE VM-এ AlloyDB Omni কীভাবে স্থাপন করবেন
  • AlloyDB Omni-এর সাথে কীভাবে সংযোগ করবেন
  • AlloyDB Omni-তে কীভাবে ডেটা লোড করবেন
  • কলামার ইঞ্জিন কীভাবে সক্রিয় করবেন
  • অটোমেটিক মোডে কলামনার ইঞ্জিন কীভাবে চেক করবেন
  • কলামার স্টোর ম্যানুয়ালি কীভাবে পূরণ করবেন

আপনার যা যা লাগবে

  • একটি গুগল ক্লাউড অ্যাকাউন্ট এবং গুগল ক্লাউড প্রজেক্ট
  • ক্রোমের মতো একটি ওয়েব ব্রাউজার

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

295004821bab6a87.png37d264871000675d.png96d86d3d5655cdbe.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হবে না, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর বিলিং এড়াতে রিসোর্সগুলো বন্ধ করার জন্য, আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা প্রজেক্টটি ডিলিট করে দিতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।

গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনটিতে ক্লিক করুন:

ক্লাউড শেল সক্রিয় করুন

পরিবেশটি প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি শেষ হলে, আপনি এইরকম কিছু দেখতে পাবেন:

গুগল ক্লাউড শেল টার্মিনালের স্ক্রিনশট, যা দেখাচ্ছে যে পরিবেশটি সংযুক্ত হয়েছে।

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

৩. শুরু করার আগে

এপিআই সক্ষম করুন

আউটপুট:

ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার প্রজেক্ট আইডি সেটআপ করা আছে:

PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID

প্রত্যাশিত আউটপুট

student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
our active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$

যদি এটি ক্লাউড শেল কনফিগারেশনে সংজ্ঞায়িত না থাকে, তাহলে নিম্নলিখিত কমান্ডগুলি ব্যবহার করে এটি সেট আপ করুন।

export PROJECT_ID=<your project>
gcloud config set project $PROJECT_ID

সকল প্রয়োজনীয় পরিষেবা সক্রিয় করুন:

gcloud services enable compute.googleapis.com

প্রত্যাশিত আউটপুট

student@cloudshell:~ (test-project-001-402417)$ gcloud services enable compute.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.

৪. GCE-তে AlloyDB Omni স্থাপন করুন

GCE-তে AlloyDB Omni স্থাপন করার জন্য আমাদের সামঞ্জস্যপূর্ণ কনফিগারেশন এবং সফ্টওয়্যার সহ একটি ভার্চুয়াল মেশিন প্রস্তুত করতে হবে। এখানে একটি ডেবিয়ান ভিত্তিক ভিএম-এ AlloyDB Omni স্থাপন করার একটি উদাহরণ দেওয়া হলো।

একটি GCE VM তৈরি করুন

আমাদের সিপিইউ, মেমরি এবং স্টোরেজের জন্য গ্রহণযোগ্য কনফিগারেশন সহ একটি ভিএম (VM) স্থাপন করতে হবে। আমরা ডিফল্ট ডেবিয়ান ইমেজ ব্যবহার করতে যাচ্ছি এবং AlloyDB Omni ডাটাবেস ফাইলগুলির জন্য সিস্টেম ডিস্কের আকার ২০ জিবি পর্যন্ত বাড়ানো হবে।

আমরা চালু করা ক্লাউড শেল অথবা ক্লাউড এসডিকে ইনস্টল করা একটি টার্মিনাল ব্যবহার করতে পারি।

AlloyDB Omni-এর কুইক স্টার্ট অংশেও সমস্ত ধাপগুলো বর্ণনা করা আছে।

আপনার ডেপ্লয়মেন্টের জন্য এনভায়রনমেন্ট ভেরিয়েবলগুলো সেট আপ করুন।

export ZONE=us-central1-a
export MACHINE_TYPE=n2-highmem-2
export DISK_SIZE=20
export MACHINE_NAME=omni01

তারপর আমরা gcloud ব্যবহার করে GCE VM তৈরি করি।

gcloud compute instances create $MACHINE_NAME \
    --project=$(gcloud info --format='value(config.project)') \
    --zone=$ZONE  --machine-type=$MACHINE_TYPE \
    --metadata=enable-os-login=true \
    --create-disk=auto-delete=yes,boot=yes,size=$DISK_SIZE,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" \
    --format="value(name)"),type=pd-ssd

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (test-project-001-402417)$ export ZONE=us-central1-a
export MACHINE_TYPE=n2-highmem-2
export DISK_SIZE=20
export MACHINE_NAME=omni01
student@cloudshell:~ (test-project-001-402417)$ gcloud compute instances create $MACHINE_NAME \
    --project=$(gcloud info --format='value(config.project)') \
    --zone=$ZONE  --machine-type=$MACHINE_TYPE \
    --metadata=enable-os-login=true \
    --create-disk=auto-delete=yes,boot=yes,size=$DISK_SIZE,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" \
    --format="value(name)"),type=pd-ssd
Created [https://www.googleapis.com/compute/v1/projects/test-project-001-402417/zones/us-central1-a/instances/omni01].
WARNING: Some requests generated warnings:
 - Disk size: '20 GB' is larger than image size: '10 GB'. You might need to resize the root repartition manually if the operating system does not support automatic resizing. See https://cloud.google.com/compute/docs/disks/add-persistent-disk#resize_pd for details.

NAME: omni01
ZONE: us-central1-a
MACHINE_TYPE: n2-highmem-2
PREEMPTIBLE: 
INTERNAL_IP: 10.128.0.3
EXTERNAL_IP: 35.232.157.123
STATUS: RUNNING
student@cloudshell:~ (test-project-001-402417)$ 

AlloyDB Omni ইনস্টল করুন

তৈরি করা ভিএম-এ সংযোগ করুন:

gcloud compute ssh omni01 --zone $ZONE

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (test-project-001-402417)$ gcloud compute ssh omni01 --zone $ZONE
Warning: Permanently added 'compute.5615760774496706107' (ECDSA) to the list of known hosts.
Linux omni01.us-central1-a.c.gleb-test-short-003-421517.internal 6.1.0-20-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.85-1 (2024-04-11) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@omni01:~$

আপনার সংযুক্ত টার্মিনালে নিম্নলিখিত কমান্ডটি চালান।

ভিএম-এ ডকার ইনস্টল করুন:

sudo apt update
sudo apt-get -y install docker.io

প্রত্যাশিত কনসোল আউটপুট (সংশোধিত):

student@omni01:~$ sudo apt update
sudo apt-get -y install docker.io
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
Get:5 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B]
Get:7 https://packages.cloud.google.com/apt google-compute-engine-bookworm-stable InRelease [5146 B]
Get:8 https://packages.cloud.google.com/apt cloud-sdk-bookworm InRelease [6406 B]        
Get:9 https://packages.cloud.google.com/apt google-compute-engine-bookworm-stable/main amd64 Packages [1916 B]
Get:2 https://deb.debian.org/debian bookworm InRelease [151 kB]
...
Setting up binutils (2.40-2) ...
Setting up needrestart (3.6-4+deb12u1) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for libc-bin (2.36-9+deb12u4) ...
student@omni01:~$

postgres ব্যবহারকারীর জন্য পাসওয়ার্ড নির্ধারণ করুন:

export PGPASSWORD=<your password>

AlloyDB Omni ডেটার জন্য একটি ডিরেক্টরি তৈরি করুন। এটি একটি ঐচ্ছিক কিন্তু প্রস্তাবিত পদ্ধতি। ডিফল্টরূপে, ডেটা ডকারের ক্ষণস্থায়ী ফাইলসিস্টেম লেয়ার ব্যবহার করে তৈরি হয় এবং ডকার কন্টেইনারটি মুছে ফেলা হলে সবকিছু ধ্বংস হয়ে যায়। এটিকে আলাদাভাবে রাখলে আপনি আপনার ডেটা থেকে স্বাধীনভাবে কন্টেইনারগুলি পরিচালনা করতে পারবেন এবং ঐচ্ছিকভাবে এটিকে আরও ভালো IO বৈশিষ্ট্যযুক্ত কোনো স্টোরেজে রাখতে পারবেন।

ব্যবহারকারীর হোম ডিরেক্টরিতে একটি ডিরেক্টরি তৈরি করার কমান্ড এখানে দেওয়া হলো, যেখানে সমস্ত ডেটা রাখা হবে:

mkdir -p $HOME/alloydb-data

AlloyDB Omni কন্টেইনার স্থাপন করুন:

sudo docker run --name my-omni \
  -e POSTGRES_PASSWORD=$PGPASSWORD \
  -p 5432:5432 \
  -v $HOME/alloydb-data:/var/lib/postgresql/data \
  -v /dev/shm:/dev/shm \
  -d google/alloydbomni

প্রত্যাশিত কনসোল আউটপুট (সংশোধিত):

student@omni01:~$ export PGPASSWORD=StrongPassword
student@omni01:~$ sudo docker run --name my-omni \
  -e POSTGRES_PASSWORD=$PGPASSWORD \
  -p 5432:5432 \
  -v $HOME/alloydb-data:/var/lib/postgresql/data \
  -v /dev/shm:/dev/shm \
  -d google/alloydbomni
Unable to find image 'google/alloydbomni:latest' locally
latest: Pulling from google/alloydbomni
71215d55680c: Pull complete 
...
2e0ec3fe1804: Pull complete 
Digest: sha256:d6b155ea4c7363ef99bf45a9dc988ce5467df5ae8cd3c0f269ae9652dd1982a6
Status: Downloaded newer image for google/alloydbomni:latest
56de4ae0018314093c8b048f69a1e9efe67c6c8117f44c8e1dc829a2d4666cd2
student@omni01:~$ 

ভিএম-এ PostgreSQL ক্লায়েন্ট সফ্টওয়্যার ইনস্টল করুন (ঐচ্ছিক - এটি আগে থেকেই ইনস্টল করা আছে বলে ধরে নেওয়া হয়):

sudo apt install -y  postgresql-client

প্রত্যাশিত কনসোল আউটপুট:

student@omni01:~$ sudo apt install -y  postgresql-client
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
postgresql-client is already the newest version (15+248).
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.

AlloyDB Omni-এর সাথে সংযোগ করুন:

psql -h localhost -U postgres

প্রত্যাশিত কনসোল আউটপুট:

student@omni01:~$ psql -h localhost -U postgres
WARNING: psql major version 15, server major version 17.
         Some psql features might not work.
Type "help" for help.

postgres=#

AlloyDB Omni থেকে সংযোগ বিচ্ছিন্ন করুন:

exit

প্রত্যাশিত কনসোল আউটপুট:

postgres=# exit
student@omni01:~$ 

৫. একটি টেস্ট ডাটাবেস প্রস্তুত করুন।

কলামার ইঞ্জিনটি পরীক্ষা করার জন্য আমাদের একটি ডাটাবেস তৈরি করে তাতে কিছু পরীক্ষামূলক ডেটা পূরণ করতে হবে।

ডাটাবেস তৈরি করুন

AlloyDB Omni VM-এ সংযোগ করুন এবং একটি ডাটাবেস তৈরি করুন।

ক্লাউড শেল সেশনে নিম্নলিখিতটি সম্পাদন করুন:

AlloyDB Omni VM-এর সাথে সংযোগ করুন:

ZONE=us-central1-a
gcloud compute ssh omni01 --zone $ZONE

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (gleb-test-short-001-416213)$ ZONE=us-central1-a
gcloud compute ssh omni01 --zone $ZONE
Linux omni01.us-central1-a.c.gleb-test-short-003-421517.internal 6.1.0-20-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.85-1 (2024-04-11) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Mar  4 18:17:55 2024 from 35.237.87.44
student@omni01:~$

প্রতিষ্ঠিত SSH সেশনে নিম্নলিখিতটি সম্পাদন করুন:

export PGPASSWORD=<your password>
psql -h localhost -U postgres -c "CREATE DATABASE quickstart_db"

প্রত্যাশিত কনসোল আউটপুট:

student@omni01:~$ psql -h localhost -U postgres -c "CREATE DATABASE quickstart_db"
CREATE DATABASE
student@omni01:~$

নমুনা ডেটা দিয়ে একটি টেবিল তৈরি করুন

আমাদের পরীক্ষার জন্য আমরা আইওয়াতে লাইসেন্সপ্রাপ্ত বীমা এজেন্টদের সম্পর্কিত পাবলিক ডেটা ব্যবহার করব। আপনি এই ডেটাসেটটি আইওয়া সরকারের ওয়েবসাইটে খুঁজে পেতে পারেন - https://data.iowa.gov/catalog/dataset/669

প্রথমে, আমাদের একটি টেবিল তৈরি করতে হবে।

GCE VM-এ নিম্নলিখিতটি চালান:

psql -h localhost -U postgres -d quickstart_db -c "DROP TABLE if exists insurance_producers_licensed_in_iowa;
CREATE TABLE insurance_producers_licensed_in_iowa (
        npn int8,
        last_name text,
        first_name text,
        address_line_1 text,
        city text,
        state text,
        zip_code int4,
        first_active_date timestamp,
        expiry_date timestamp,
        business_phone text,
        email text,
        iowa_resident text,
        loa_has_crop text,
        loa_has_surety text,
        loa_has_ah text,
        loa_has_life text,
        loa_has_variable text,
        loa_has_personal_lines text,
        loa_has_credit text,
        loa_has_excess text,
        loa_has_property text,
        loa_has_casualty text,
        loa_has_reciprocal text,
        latitude text,
        longitude text,
        physical_location text,
        address_line_2 text,
        address_line_3 text
);"

প্রত্যাশিত কনসোল আউটপুট:

otochkin@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "DROP TABLE if exists insurance_producers_licensed_in_iowa;
CREATE TABLE insurance_producers_licensed_in_iowa (
        npn int8,
        last_name text,
        first_name text,
        address_line_1 text,
        address_line_2 text,
        address_line_3 text,
        city text,
        state text,
        zip int4,
        firstactivedate timestamp,
        expirydate timestamp,
        business_phone text,
        email text,
        physical_location text,
        iowaresident text,
        loa_has_crop text,
        loa_has_surety text,
        loa_has_ah text,
        loa_has_life text,
        loa_has_variable text,
        loa_has_personal_lines text,
        loa_has_credit text,
        loa_has_excess text,
        loa_has_property text,
        loa_has_casualty text,
        loa_has_reciprocal text
);"
NOTICE:  table "insurance_producers_licensed_in_iowa" does not exist, skipping
DROP TABLE
CREATE TABLE
otochkin@omni01:~$

টেবিলে ডেটা লোড করুন।

GCE VM-এ নিম্নলিখিতটি চালান:

curl -L https://idh-be.iowa.gov/api/v1/datasets/669/rows.csv | sed '$d' | psql -h localhost -U postgres -d quickstart_db -c "\copy insurance_producers_licensed_in_iowa from stdin csv header"

প্রত্যাশিত কনসোল আউটপুট:

otochkin@omni01:~$ curl -L https://idh-be.iowa.gov/api/v1/datasets/669/rows.csv | sed '$d' | psql -h localhost -U postgres -d quickstart_db -c "\copy insurance_producers_licensed_in_iowa from stdin csv header"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 48.0M    0 48.0M    0     0  33.9M      0 --:--:--  0:00:01 --:--:-- 33.9M
COPY 226772
otochkin@omni01:~$

আমরা আমাদের ডাটাবেসে বীমা উৎপাদকদের সম্পর্কে ২২৬৭৭২টি রেকর্ড লোড করেছি এবং এখন কিছু পরীক্ষা করতে পারি। আপনার ক্ষেত্রে সারির সংখ্যা ভিন্ন হতে পারে, কারণ ডেটাসেটটি প্রতিদিন আপডেট করা হচ্ছে।

টেস্ট কোয়েরি চালান

psql ব্যবহার করে quickstart_db-এর সাথে সংযোগ করুন এবং আমাদের কোয়েরিগুলোর এক্সিকিউশন টাইম পরিমাপ করতে টাইমিং চালু করুন।

GCE VM-এ নিম্নলিখিতটি চালান:

psql -h localhost -U postgres -d quickstart_db

প্রত্যাশিত কনসোল আউটপুট:

student@omni01:~$ psql -h localhost -U postgres -d quickstart_db
psql (15.18 (Debian 15.18-0+deb12u1), server 17.7)
WARNING: psql major version 15, server major version 17.
         Some psql features might not work.
Type "help" for help.

quickstart_db=#

PSQL সেশনে সম্পাদন করুন:

\timing

প্রত্যাশিত কনসোল আউটপুট:

quickstart_db=# \timing
Timing is on.
quickstart_db=# 

চলুন, দুর্ঘটনা ও স্বাস্থ্য বীমা বিক্রিকারী এবং যাদের লাইসেন্স অন্তত আগামী ৬ মাসের জন্য বৈধ, এমন বীমা এজেন্টদের সংখ্যার ভিত্তিতে শীর্ষ ৫টি শহর খুঁজে বের করি।

PSQL সেশনে সম্পাদন করুন:

SELECT city, count(*) 
FROM insurance_producers_licensed_in_iowa 
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH' 
GROUP BY city ORDER BY count(*) desc limit 5;

প্রত্যাশিত কনসোল আউটপুট:

quickstart_db=# SELECT city, count(*)
quickstart_db-# FROM insurance_producers_licensed_in_iowa
quickstart_db-# WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
quickstart_db-# GROUP BY city ORDER BY count(*) desc limit 5;
    city     | count
-------------+-------
 TAMPA       |  2159
 OMAHA       |  1527
 MIAMI       |  1293
 KANSAS CITY |  1091
 DALLAS      |  1000
(5 rows)

Time: 90.492 ms

নির্ভরযোগ্য এক্সিকিউশন টাইম পাওয়ার জন্য একটি টেস্ট কোয়েরি একাধিকবার চালান। আমরা দেখতে পাচ্ছি যে, ফলাফল ফেরত আসতে গড়ে প্রায় ৯৪ মিলিসেকেন্ড সময় লাগছে। পরবর্তী ধাপগুলোতে আমরা AlloyDB Columnar Engine চালু করব এবং দেখব এটি পারফরম্যান্স উন্নত করতে পারে কিনা।

psql সেশন থেকে প্রস্থান করুন:

exit

৬. কলামার ইঞ্জিন সক্রিয় করুন

এখন আমাদের AlloyDB Omni-তে কলামনার ইঞ্জিন সক্রিয় করতে হবে।

AlloyDB Omni প্যারামিটার আপডেট করুন

আমাদের AlloyDB Omni-এর জন্য ইনস্ট্যান্স প্যারামিটার 'google_columnar_engine.enabled'-কে 'on'-এ পরিবর্তন করতে হবে এবং এর জন্য রিস্টার্ট প্রয়োজন।

/var/alloydb/config ডিরেক্টরিতে থাকা postgresql.conf ফাইলটি আপডেট করুন এবং ইনস্ট্যান্সটি রিস্টার্ট করুন।

GCE VM-এ নিম্নলিখিতটি চালান:

sudo docker exec my-omni /bin/bash -c "echo 'google_columnar_engine.enabled=true' >> /var/lib/postgresql/data/postgresql.conf" && \
sudo docker exec my-omni /bin/bash -c "echo \"shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_db_advisor,google_storage'\" >> /var/lib/postgresql/data/postgresql.conf" && \
sudo docker restart my-omni 

প্রত্যাশিত কনসোল আউটপুট:

student@omni01:~$ sudo docker exec my-omni /bin/bash -c "echo 'google_columnar_engine.enabled=true' >> /var/lib/postgresql/data/postgresql.conf" && \
> sudo docker exec my-omni /bin/bash -c "echo \"shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_db_advisor,google_storage'\" >> /var/lib/postgresql/data/postgresql.conf" && \
> sudo docker restart my-omni
my-omni
student@omni01:~$

কলামার ইঞ্জিন যাচাই করুন

psql ব্যবহার করে ডাটাবেসে সংযোগ করুন এবং কলামার ইঞ্জিনটি যাচাই করুন।

AlloyDB Omni ডাটাবেসের সাথে সংযোগ করুন

ভিএম এসএসএইচ সেশনে ডাটাবেসে সংযোগ করুন:

psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.enabled"

কমান্ডটি সক্রিয় কলামার ইঞ্জিনটি দেখাবে।

প্রত্যাশিত কনসোল আউটপুট:

student@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.enabled"
 google_columnar_engine.enabled 
--------------------------------
 on
(1 row)

৭. কর্মক্ষমতা তুলনা

আমরা এখন কলামভিত্তিক ইঞ্জিন স্টোরটি ডেটা দিয়ে পূর্ণ করতে এবং পারফরম্যান্স যাচাই করতে পারি।

স্বয়ংক্রিয় কলামভিত্তিক স্টোর জনসংখ্যা

ডিফল্টরূপে, স্টোরে ডেটা যুক্ত করার কাজটি প্রতি ঘণ্টায় চলে। অপেক্ষা এড়ানোর জন্য আমরা এই সময় কমিয়ে ১০ মিনিট করতে যাচ্ছি।

GCE VM-এ নিম্নলিখিতটি চালান:

sudo docker exec my-omni /bin/bash -c "echo google_columnar_engine.auto_columnarization_schedule=\'EVERY 10 MINUTES\' >>/var/lib/postgresql/data/postgresql.conf" && \
sudo docker restart my-omni 

এবং এখানে প্রত্যাশিত আউটপুটটি দেওয়া হলো:

sudo docker exec my-omni /bin/bash -c "echo google_columnar_engine.auto_columnarization_schedule=\'EVERY 10 MINUTES\' >>/var/lib/postgresql/data/postgresql.conf" && \
> sudo docker restart my-omni
my-omni

সেটিংস যাচাই করুন

GCE VM-এ নিম্নলিখিতটি চালান:

psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.auto_columnarization_schedule;"

প্রত্যাশিত আউটপুট:

student@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "show google_columnar_engine.auto_columnarization_schedule;"
 google_columnar_engine.auto_columnarization_schedule 
------------------------------------------------------
 EVERY 10 MINUTES
(1 row)

student@omni01:~$ 

কলামার স্টোরের অবজেক্টগুলো পরীক্ষা করুন। এটি খালি থাকা উচিত।

GCE VM-এ নিম্নলিখিতটি চালান:

psql -h localhost -U postgres -d quickstart_db -c "SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;"

প্রত্যাশিত আউটপুট:

student@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;"
 database_name | schema_name | relation_name | column_name 
---------------+-------------+---------------+-------------
(0 rows)

student@omni01:~$

ডাটাবেসে সংযোগ করুন এবং পূর্বে চালানো একই কোয়েরিটি একাধিকবার চালান।

GCE VM-এ নিম্নলিখিতটি চালান:

psql -h localhost -U postgres -d quickstart_db 

PSQL সেশনে।

টাইমিং সক্ষম করুন

\timing

কোয়েরিটি কয়েকবার চালান:

SELECT city, count(*) 
FROM insurance_producers_licensed_in_iowa 
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH' 
GROUP BY city ORDER BY count(*) desc limit 5;

প্রত্যাশিত আউটপুট:

quickstart_db=# SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
    city     | count
-------------+-------
 TAMPA       |  1885
 OMAHA       |  1656
 KANSAS CITY |  1279
 AUSTIN      |  1254
 MIAMI       |  1003
(5 rows)

Time: 81.428 ms
quickstart_db=# SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expirydate > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
    city     | count
-------------+-------
 TAMPA       |  1885
 OMAHA       |  1656
 KANSAS CITY |  1279
 AUSTIN      |  1254
 MIAMI       |  1003
(5 rows)

Time: 82.608 ms
quickstart_db=#

১০ মিনিট অপেক্ষা করুন এবং পরীক্ষা করে দেখুন insurance_producers_licensed_in_iowa টেবিলের কলামগুলো কলামার স্টোরে যুক্ত হয়েছে কিনা।

SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;

প্রত্যাশিত আউটপুট:

quickstart_db=# SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;
 database_name | schema_name |            relation_name             | column_name
---------------+-------------+--------------------------------------+-------------
 quickstart_db | public      | insurance_producers_licensed_in_iowa | city
 quickstart_db | public      | insurance_producers_licensed_in_iowa | expiry_date
 quickstart_db | public      | insurance_producers_licensed_in_iowa | loa_has_ah
(3 rows)

Time: 0.643 ms

এখন আমরা insurance_producers_licensed_in_iowa টেবিলের জন্য কোয়েরিটি আবার চালিয়ে দেখতে পারি যে পারফরম্যান্সের উন্নতি হয়েছে কিনা।

SELECT city, count(*) 
FROM insurance_producers_licensed_in_iowa 
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH' 
GROUP BY city ORDER BY count(*) desc limit 5;

প্রত্যাশিত আউটপুট:

quickstart_db=# SELECT city, count(*)
quickstart_db-# FROM insurance_producers_licensed_in_iowa
quickstart_db-# WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
quickstart_db-# GROUP BY city ORDER BY count(*) desc limit 5;
    city     | count
-------------+-------
 TAMPA       |  2159
 OMAHA       |  1527
 MIAMI       |  1293
 KANSAS CITY |  1091
 DALLAS      |  1000
(5 rows)

Time: 11.757 ms
quickstart_db=# SELECT city, count(*)
FROM insurance_producers_licensed_in_iowa
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
GROUP BY city ORDER BY count(*) desc limit 5;
    city     | count
-------------+-------
 TAMPA       |  2159
 OMAHA       |  1527
 MIAMI       |  1293
 KANSAS CITY |  1091
 DALLAS      |  1000
(5 rows)

Time: 10.839 ms

এক্সিকিউশন টাইম ৮২ মিলিসেকেন্ড থেকে কমে ১১ মিলিসেকেন্ড হয়েছে। যদি আপনি কোনো উন্নতি দেখতে না পান, তাহলে g_columnar_columns ভিউটি চেক করে দেখতে পারেন যে কলামগুলো কলামার স্টোরে সফলভাবে পপুলেট হয়েছে কিনা।

SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;

প্রত্যাশিত আউটপুট:

quickstart_db=# SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;
            relation_name             | column_name | column_type | status | size_in_bytes
--------------------------------------+-------------+-------------+--------+---------------
 insurance_producers_licensed_in_iowa | city        | text        | Usable |        637312
 insurance_producers_licensed_in_iowa | expiry_date | timestamp   | Usable |        228356
 insurance_producers_licensed_in_iowa | loa_has_ah  | text        | Usable |        227608
(3 rows)

এখন আমরা যাচাই করতে পারি যে কোয়েরি এক্সিকিউশন প্ল্যানটি কলামনার ইঞ্জিন ব্যবহার করছে কিনা।

PSQL সেশনে সম্পাদন করুন:

EXPLAIN (ANALYZE,SETTINGS,BUFFERS)
SELECT city, count(*) 
FROM insurance_producers_licensed_in_iowa 
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH' 
GROUP BY city ORDER BY count(*) desc limit 5;

প্রত্যাশিত আউটপুট:

quickstart_db=# EXPLAIN (ANALYZE,SETTINGS,BUFFERS)
quickstart_db-# SELECT city, count(*)
quickstart_db-# FROM insurance_producers_licensed_in_iowa
quickstart_db-# WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH'
quickstart_db-# GROUP BY city ORDER BY count(*) desc limit 5;
                                                                                     QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=2398.48..2398.49 rows=5 width=17) (actual time=10.018..10.021 rows=5 loops=1)
   ->  Sort  (cost=2398.48..2411.61 rows=5252 width=17) (actual time=10.017..10.019 rows=5 loops=1)
         Sort Key: (count(*)) DESC
         Sort Method: top-N heapsort  Memory: 25kB
         ->  HashAggregate  (cost=2258.73..2311.25 rows=5252 width=17) (actual time=8.320..9.212 rows=7695 loops=1)
               Group Key: city
               Batches: 1  Memory Usage: 913kB
               ->  Append  (cost=20.00..1762.13 rows=99320 width=9) (actual time=8.314..8.315 rows=8595 loops=1)
                     ->  Custom Scan (columnar scan) on insurance_producers_licensed_in_iowa  (cost=20.00..1758.11 rows=99319 width=9) (actual time=8.311..8.312 rows=8595 loops=1)
                           Filter: ((loa_has_ah = 'Yes'::text) AND (expiry_date > (now() + '6 mons'::interval)))
                           Rows Removed by Columnar Filter: 127723
                           Rows Aggregated by Columnar Scan: 99049
                           Columnar cache search mode: native
                     ->  Seq Scan on insurance_producers_licensed_in_iowa  (cost=0.00..4.02 rows=1 width=9) (never executed)
                           Filter: ((loa_has_ah = 'Yes'::text) AND (expiry_date > (now() + '6 mons'::interval)))
 Planning Time: 0.221 ms
 Execution Time: 10.127 ms
(17 rows)

Time: 11.171 ms

এবং আমরা দেখতে পাচ্ছি যে business_licenses টেবিল সেগমেন্টে 'Seq Scan' অপারেশনটি কখনোই চালানো হয়নি এবং এর পরিবর্তে 'Custom Scan (columnar scan)' ব্যবহার করা হয়েছে। এর ফলে আমরা রেসপন্স টাইম ৮২ মিলিসেকেন্ড থেকে কমিয়ে ১১ মিলিসেকেন্ডে আনতে পেরেছি।

যদি আমরা কলামার ইঞ্জিন থেকে স্বয়ংক্রিয়ভাবে পূরণ হওয়া বিষয়বস্তু মুছে ফেলতে চাই, তাহলে আমরা google_columnar_engine_reset_recommendation SQL ফাংশনটি ব্যবহার করে তা করতে পারি।

PSQL সেশনে সম্পাদন করুন:

SELECT google_columnar_engine_reset_recommendation(drop_columns => true);

এটি পূরণ করা কলামগুলো মুছে ফেলবে এবং পূর্বে যেমন দেখানো হয়েছিল, আপনি g_columnar_columns ও g_columnar_recommended_columns ভিউগুলোতে তা যাচাই করতে পারবেন।

SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;
SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;

প্রত্যাশিত আউটপুট:

quickstart_db=# SELECT database_name, schema_name, relation_name, column_name FROM g_columnar_recommended_columns;
 database_name | schema_name | relation_name | column_name
---------------+-------------+---------------+-------------
(0 rows)

Time: 0.447 ms
quickstart_db=# select relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;
 relation_name | column_name | column_type | status | size_in_bytes
---------------+-------------+-------------+--------+---------------
(0 rows)

Time: 0.556 ms
quickstart_db=#

ম্যানুয়াল কলামভিত্তিক স্টোর জনসংখ্যা

আমরা SQL ফাংশন ব্যবহার করে ম্যানুয়ালি কলামার ইঞ্জিন স্টোরে কলাম যোগ করতে পারি অথবা ইনস্ট্যান্স চালু হওয়ার সময় স্বয়ংক্রিয়ভাবে লোড করার জন্য ইনস্ট্যান্স ফ্ল্যাগে প্রয়োজনীয় এনটিটিগুলো নির্দিষ্ট করে দিতে পারি।

চলুন google_columnar_engine_add SQL ফাংশনটি ব্যবহার করে আগের মতো একই কলামগুলো যোগ করি।

PSQL সেশনে সম্পাদন করুন:

SELECT google_columnar_engine_add(relation => 'insurance_producers_licensed_in_iowa', columns => 'city,expiry_date,loa_has_ah');

এবং আমরা একই g_columnar_columns ভিউ ব্যবহার করে ফলাফলটি যাচাই করতে পারি:

SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;

প্রত্যাশিত আউটপুট:

quickstart_db=# SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns;
            relation_name             | column_name | column_type | status | size_in_bytes
--------------------------------------+-------------+-------------+--------+---------------
 insurance_producers_licensed_in_iowa | city        | text        | Usable |        664231
 insurance_producers_licensed_in_iowa | expirydate  | timestamp   | Usable |        212434
 insurance_producers_licensed_in_iowa | loa_has_ah  | text        | Usable |        211734
(3 rows)

Time: 0.692 ms
quickstart_db=#

আগের মতো একই কোয়েরিটি চালিয়ে এবং এক্সিকিউশন প্ল্যান পরীক্ষা করে আপনি যাচাই করতে পারেন যে কলামনার স্টোরটি ব্যবহৃত হচ্ছে কিনা:

EXPLAIN (ANALYZE,SETTINGS,BUFFERS)
SELECT city, count(*) 
FROM insurance_producers_licensed_in_iowa 
WHERE loa_has_ah ='Yes' and expiry_date > now() + interval '6 MONTH' 
GROUP BY city ORDER BY count(*) desc limit 5;

psql সেশন থেকে প্রস্থান করুন:

exit

যদি আমরা AlloyDB Omni কন্টেইনারটি রিস্টার্ট করি, তাহলে দেখা যাবে যে সমস্ত কলামভিত্তিক তথ্য হারিয়ে গেছে।

শেল সেশনে চালান:

sudo docker restart my-omni

৫-১০ সেকেন্ড অপেক্ষা করুন এবং চালান:

psql -h localhost -U postgres -d quickstart_db -c "SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns"

প্রত্যাশিত আউটপুট:

student@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns"
 relation_name | column_name | column_type | status | size_in_bytes
---------------+-------------+-------------+--------+---------------
(0 rows)

রিস্টার্টের সময় কলামগুলো স্বয়ংক্রিয়ভাবে পুনরায় পূরণ করার জন্য আমরা সেগুলোকে আমাদের AlloyDB Omni প্যারামিটারে ডাটাবেস ফ্ল্যাগ হিসেবে যোগ করতে পারি। আমরা google_columnar_engine.relations='quickstart_db.public.insurance_producers_licensed_in_iowa(city,expirydate,loa_has_ah)' ফ্ল্যাগটি যোগ করছি এবং কন্টেইনারটি রিস্টার্ট করছি।

শেল সেশনে চালান:

sudo docker exec my-omni /bin/bash -c "echo google_columnar_engine.relations=\'quickstart_db.public.insurance_producers_licensed_in_iowa\(city,expiry_date,loa_has_ah\)\' >>/var/lib/postgresql/data/postgresql.conf" && \
sudo docker restart my-omni

এবং এর পরে আমরা দেখতে পাব যে, স্টার্টআপের পর কলামগুলো স্বয়ংক্রিয়ভাবে কলামার স্টোরে যুক্ত হয়ে গেছে।

৫-১০ সেকেন্ড অপেক্ষা করুন এবং চালান:

psql -h localhost -U postgres -d quickstart_db -c "SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns"

প্রত্যাশিত আউটপুট:

student@omni01:~$ psql -h localhost -U postgres -d quickstart_db -c "SELECT relation_name,column_name,column_type,status,size_in_bytes from g_columnar_columns"
            relation_name             | column_name | column_type | status | size_in_bytes
--------------------------------------+-------------+-------------+--------+---------------
 insurance_producers_licensed_in_iowa | city        | text        | Usable |        637312
 insurance_producers_licensed_in_iowa | expiry_date | timestamp   | Usable |        228356
 insurance_producers_licensed_in_iowa | loa_has_ah  | text        | Usable |        227608
(3 rows)

৮. পরিবেশ পরিষ্কার করুন

এখন আমরা আমাদের AlloyDB Omni VM ধ্বংস করতে পারি।

GCE VM মুছে ফেলুন

ক্লাউড শেলে চালান:

export GCEVM=omni01
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet

প্রত্যাশিত কনসোল আউটপুট:

student@cloudshell:~ (test-project-001-402417)$ export GCEVM=omni01
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet
Deleted 

৯. অভিনন্দন

কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন।

আমরা যা আলোচনা করেছি

  • গুগল ক্লাউডে GCE VM-এ AlloyDB Omni কীভাবে স্থাপন করবেন
  • AlloyDB Omni-এর সাথে কীভাবে সংযোগ করবেন
  • AlloyDB Omni-তে কীভাবে ডেটা লোড করবেন
  • কলামার ইঞ্জিন কীভাবে সক্রিয় করবেন
  • অটোমেটিক মোডে কলামনার ইঞ্জিন কীভাবে চেক করবেন
  • কলামার স্টোর ম্যানুয়ালি কীভাবে পূরণ করবেন

কলামনার ইঞ্জিন নিয়ে কাজ করার পদ্ধতি সম্পর্কে আরও বিস্তারিত জানতে আপনি ডকুমেন্টেশন পড়তে পারেন।

১০. জরিপ

আউটপুট:

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু একবার পড়ে দেখুন এটি পড়ুন এবং অনুশীলনগুলো সম্পূর্ণ করুন।