1. शुरुआती जानकारी
इस कोडलैब में, आपको AlloyDB Omni को डिप्लॉय करने का तरीका बताया जाएगा. साथ ही, क्वेरी की परफ़ॉर्मेंस को बेहतर बनाने के लिए, कॉलम इंजन का इस्तेमाल करने का तरीका बताया जाएगा.

ज़रूरी शर्तें
- Google Cloud Console की बुनियादी जानकारी
- कमांड लाइन इंटरफ़ेस और Google Cloud Shell में बुनियादी कौशल
आपको क्या सीखने को मिलेगा
- Google Cloud में GCE वीएम पर AlloyDB Omni को डिप्लॉय करने का तरीका
- AlloyDB Omni से कनेक्ट करने का तरीका
- AlloyDB Omni में डेटा लोड करने का तरीका
- कॉलमनर इंजन को चालू करने का तरीका
- ऑटोमैटिक मोड में कॉलम इंजन की जांच करने का तरीका
- कॉलमनर स्टोर को मैन्युअल तरीके से भरने का तरीका
आपको इन चीज़ों की ज़रूरत होगी
- Google Cloud खाता और Google Cloud प्रोजेक्ट
- कोई वेब ब्राउज़र, जैसे कि Chrome
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेट अप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.



- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते हैं. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी (आम तौर पर
PROJECT_IDके तौर पर पहचाना जाता है) का रेफ़रंस देना होगा. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहता है. - आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
- इसके बाद, आपको Cloud Console में बिलिंग की सुविधा चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, 300 डॉलर का क्रेडिट मुफ़्त में आज़माने का प्रोग्राम मिलता है.
Cloud Shell शुरू करें
Google Cloud को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.
Google Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद टूलबार पर, Cloud Shell आइकॉन पर क्लिक करें:

इसे चालू करने और एनवायरमेंट से कनेक्ट करने में सिर्फ़ कुछ सेकंड लगेंगे. यह प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. साथ ही, Google Cloud पर काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में मौजूद सभी टास्क, ब्राउज़र में किए जा सकते हैं. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.
3. शुरू करने से पहले
एपीआई चालू करना
आउटपुट:
Cloud Shell में, पक्का करें कि आपका प्रोजेक्ट आईडी सेट अप हो:
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.
4. GCE पर AlloyDB Omni डिप्लॉय करना
GCE पर AlloyDB Omni को डिप्लॉय करने के लिए, हमें ऐसे कॉन्फ़िगरेशन और सॉफ़्टवेयर वाली वर्चुअल मशीन तैयार करनी होगी जो इसके साथ काम करती हो. यहां Debian पर आधारित वीएम पर AlloyDB Omni को डिप्लॉय करने का उदाहरण दिया गया है.
GCE वीएम बनाना
हमें सीपीयू, मेमोरी, और स्टोरेज के लिए, स्वीकार्य कॉन्फ़िगरेशन वाली वीएम को डिप्लॉय करना होगा. हम डिफ़ॉल्ट Debian इमेज का इस्तेमाल करेंगे. साथ ही, सिस्टम डिस्क का साइज़ बढ़ाकर 20 जीबी कर देंगे, ताकि AlloyDB Omni डेटाबेस फ़ाइलों को सेव किया जा सके.
हम शुरू किए गए Cloud Shell या Cloud SDK इंस्टॉल किए गए टर्मिनल का इस्तेमाल कर सकते हैं
AlloyDB Omni के लिए, आसानी से सिखाने वाली गाइड में भी सभी चरणों के बारे में बताया गया है.
डिप्लॉयमेंट के लिए एनवायरमेंट वैरिएबल सेट अप करें.
export ZONE=us-central1-a
export MACHINE_TYPE=n2-highmem-2
export DISK_SIZE=20
export MACHINE_NAME=omni01
इसके बाद, हम GCE VM बनाने के लिए gcloud का इस्तेमाल करते हैं.
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:~$
कनेक्ट किए गए टर्मिनल में यह कमांड चलाएं.
वीएम पर Docker इंस्टॉल करें:
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 डेटा के लिए एक डायरेक्ट्री बनाएं. यह तरीका ज़रूरी नहीं है, लेकिन हमारा सुझाव है कि आप इसे अपनाएं. डिफ़ॉल्ट रूप से, डेटा को डॉकर के इफ़ेमरल फ़ाइल सिस्टम लेयर का इस्तेमाल करके बनाया जाएगा. साथ ही, डॉकर कंटेनर को मिटाने पर सारा डेटा मिट जाएगा. इसे अलग रखने से, कंटेनर को अपने डेटा से अलग मैनेज किया जा सकता है. साथ ही, इसे बेहतर आईओ विशेषताओं वाले स्टोरेज में रखा जा सकता है
यहां एक ऐसा निर्देश दिया गया है जिससे उपयोगकर्ता की होम डायरेक्ट्री में एक डायरेक्ट्री बन जाती है. इसमें सारा डेटा रखा जाएगा:
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:~$
5. टेस्ट डेटाबेस तैयार करना
कॉलमनर इंजन को टेस्ट करने के लिए, हमें एक डेटाबेस बनाना होगा और उसमें कुछ टेस्ट डेटा डालना होगा.
डेटाबेस बनाएं
AlloyDB Omni वीएम से कनेक्ट करना और डेटाबेस बनाना
Cloud Shell सेशन में यह कमांड चलाएं:
AlloyDB Omni वीएम से कनेक्ट करें:
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 वीएम में यह कमांड चलाएं:
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 वीएम में यह कमांड चलाएं:
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:~$
हमने अपने डेटाबेस में, बीमा एजेंटों के बारे में 2,26,772 रिकॉर्ड लोड किए हैं. अब हम कुछ टेस्टिंग कर सकते हैं. आपके लिए पंक्तियों की संख्या अलग हो सकती है, क्योंकि डेटासेट हर दिन अपडेट होता है.
टेस्ट क्वेरी चलाना
psql का इस्तेमाल करके quickstart_db से कनेक्ट करें और हमारी क्वेरी के एक्ज़ीक्यूशन टाइम को मेज़र करने के लिए, टाइमिंग चालू करें.
GCE वीएम में यह कमांड चलाएं:
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
क्वेरी को कई बार चलाएं, ताकि भरोसेमंद तरीके से यह पता चल सके कि क्वेरी को पूरा होने में कितना समय लगा. हम देख सकते हैं कि नतीजे दिखाने में औसतन 94 मि॰से॰ लगते हैं. यहां दिए गए चरणों में, हम AlloyDB Columnar Engine को चालू करेंगे और देखेंगे कि इससे परफ़ॉर्मेंस बेहतर होती है या नहीं.
psql सेशन से बाहर निकलने के लिए:
exit
6. कॉलमनर इंजन चालू करना
अब हमें अपने AlloyDB Omni पर कॉलम इंजन चालू करना होगा.
AlloyDB Omni के पैरामीटर अपडेट करना
हमें अपने AlloyDB Omni के लिए, इंस्टेंस पैरामीटर "google_columnar_engine.enabled" को "on" पर सेट करना होगा. इसके लिए, रीस्टार्ट करना ज़रूरी है.
/var/alloydb/config डायरेक्ट्री में postgresql.conf फ़ाइल को अपडेट करें और इंस्टेंस को रीस्टार्ट करें.
GCE वीएम में यह कमांड चलाएं:
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:~$
Columnar Engine की पुष्टि करना
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)
7. परफ़ॉर्मेंस की तुलना
अब हम कॉलम वाले इंजन स्टोर को पॉप्युलेट कर सकते हैं और परफ़ॉर्मेंस की पुष्टि कर सकते हैं.
ऑटोमैटिक कॉलम डेटा स्टोर करने की सुविधा
डिफ़ॉल्ट रूप से, स्टोर की जानकारी भरने वाला जॉब हर घंटे चलता है. हम इस समय को घटाकर 10 मिनट करने जा रहे हैं, ताकि आपको इंतज़ार न करना पड़े.
GCE वीएम में यह कमांड चलाएं:
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 वीएम में यह कमांड चलाएं:
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 वीएम में यह कमांड चलाएं:
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 वीएम में यह कमांड चलाएं:
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
इसे लागू होने में लगने वाला समय 82 मि॰से॰ से घटकर 11 मि॰से॰ हो गया है. अगर आपको कोई सुधार नहीं दिखता है, तो यह देखा जा सकता है कि 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)" का इस्तेमाल किया गया. इससे हमें जवाब देने में लगने वाले समय को 82 से 11 मि॰से॰ तक कम करने में मदद मिली.
अगर हमें कॉलम वाले इंजन से अपने-आप भरे गए कॉन्टेंट को हटाना है, तो हम SQL फ़ंक्शन google_columnar_engine_reset_recommendation का इस्तेमाल करके ऐसा कर सकते हैं.
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
पांच से 10 सेकंड तक इंतज़ार करें और यह कमांड चलाएं:
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
इसके बाद, हम देख सकते हैं कि स्टार्टअप के बाद, कॉलम अपने-आप कॉलम वाले स्टोर में जुड़ गए हैं.
पांच से 10 सेकंड तक इंतज़ार करें और यह कमांड चलाएं:
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)
8. पर्यावरण को साफ़-सुथरा रखना
अब हम अपने AlloyDB Omni VM को डिस्ट्रॉय कर सकते हैं
GCE वीएम मिटाएं
Cloud Shell में यह कमांड चलाएं:
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
9. बधाई हो
कोड लैब पूरा करने के लिए बधाई.
हमने क्या-क्या बताया
- Google Cloud में GCE वीएम पर AlloyDB Omni को डिप्लॉय करने का तरीका
- AlloyDB Omni से कनेक्ट करने का तरीका
- AlloyDB Omni में डेटा लोड करने का तरीका
- कॉलमनर इंजन को चालू करने का तरीका
- ऑटोमैटिक मोड में कॉलम इंजन की जांच करने का तरीका
- कॉलमनर स्टोर को मैन्युअल तरीके से भरने का तरीका
दस्तावेज़ में जाकर, Columnar Engine के साथ काम करने के बारे में ज़्यादा जानें.
10. सर्वे
आउटपुट: