Magento को Cloud Spanner के साथ इंटिग्रेट करना

1. परिचय

424db48d9db91638.png

Magento को Cloud Spanner बैकएंड के साथ इंटिग्रेट करना

Magento काफ़ी लोकप्रिय PHP पर आधारित ओपन सोर्स ई-कॉमर्स प्लैटफ़ॉर्म है. यह प्लैटफ़ॉर्म, MySQL में डेटा स्टोर करता है.

यह कोडलैब, कैटलॉग मॉड्यूल के लिए MySQL के बजाय Cloud Spanner का इस्तेमाल करने के सिद्धांत का एक प्रूफ़ ऑफ़ कॉन्सेप्ट है. यह उन सभी लोगों के लिए फ़ायदेमंद है जो Spanner के साथ, Magento या अन्य PHP ऐप्लिकेशन को इंटिग्रेट करने, उनकी जांच करने, और उन्हें डिप्लॉय करने में दिलचस्पी रखते हैं.

Spanner, Google Cloud का पूरी तरह से मैनेज किया गया, एंटरप्राइज़-ग्रेड, डिस्ट्रिब्यूटेड, और एक जैसा डेटाबेस है. यह रिलेशनल डेटाबेस मॉडल के फ़ायदों को नॉन-रिलेशनल हॉरिज़ॉन्टल स्केलेबिलिटी के साथ जोड़ता है. इसे ग्लोबल ऑनलाइन ट्रांज़ैक्शन प्रोसेसिंग डिप्लॉयमेंट, एसक्यूएल सिमैंटिक्स, काफ़ी हद तक उपलब्ध हॉरिज़ॉन्टल स्केलिंग, और लेन-देन से जुड़े तालमेल के साथ काम करने के लिए डिज़ाइन किया गया है. स्पैनर की मदद से, बहुत ज़्यादा डेटा को मैनेज किया जा सकता है. इसका इस्तेमाल बड़े साइज़ के ऐप्लिकेशन तक सीमित नहीं है. हालांकि, इससे आरडीबीएमएस की ज़रूरत वाले सभी वर्कलोड के लिए, एक डेटाबेस इंजन का स्टैंडर्ड तय किया जा सकता है. Spanner, 99.999%के उपलब्धता एसएलए के साथ, पहले से तय रखरखाव या इलाके में हुई गड़बड़ी के लिए ज़ीरो-डाउनटाइम उपलब्ध कराता है. यह मॉडल, ज़्यादा उपलब्धता और बढ़ाए जा सकने की सुविधा देकर, मॉडर्न ऐप्लिकेशन के साथ काम करता है.

आप इन चीज़ों के बारे में जानेंगे

  • GCE पर Magento इंस्टॉल करने का तरीका
  • स्पैनर एम्युलेटर सेट अप करने का तरीका
  • हार्बरब्रिज का इस्तेमाल करके, मौजूदा MySQL स्कीमा को स्पैनर में माइग्रेट करने का तरीका
  • Magento जैसे उन PHP ऐप्लिकेशन को इंटिग्रेट करने के लिए क्या करना होगा जो डेटाबेस बैकएंड के लिए MySQL का इस्तेमाल करते हैं, ताकि Spanner के साथ काम किया जा सके

आपको क्या बनाना होगा

इस कोडलैब का मकसद, Magento के साथ Spanner को इंटिग्रेट करना है. आपको कोड ब्लॉक और सेटअप के लिए निर्देश दिए गए हैं, ताकि उन्हें कॉपी करके चिपकाया जा सके. हालांकि, इनके बारे में पूरी जानकारी नहीं दी गई है.

इस कोडलैब में, आप Magento के साथ Spanner को इंटिग्रेट करने की शुरुआत कर रहे हैं. ऐसा करने पर:

  • Magento इंस्टॉल करने के बाद, GCE इंस्टेंस सेट अप करें
  • स्पैनर एम्युलेटर इंस्टॉल करना
  • MySQL से स्पैनर में डेटा माइग्रेट करने के लिए, HarbourBbridge टूल इंस्टॉल करें
  • स्पैनर से प्रॉडक्ट कैटलॉग लोड करने के लिए, Magento कलेक्शन में बदलाव करें

आपको इनकी ज़रूरत होगी

  • यह ऐसा Google Cloud प्रोजेक्ट है जो किसी बिलिंग खाते से जुड़ा होता है.
  • PHP, Linux, और Apache कॉन्फ़िगरेशन के बारे में जानकारी होना अच्छी बात है.
  • Magento इस्तेमाल करने से आपको मदद मिलेगी. हालांकि, ऐसा करना ज़रूरी नहीं है.

2. GCE (जीसीई) इंस्टेंस तैयार किया जा रहा है

GCE (जीसीई) इंस्टेंस बनाएं

यहां बताए गए तरीके का इस्तेमाल करके, Google Cloud Platform में Compute Engine इंस्टेंस बनाएं.

GCE (जीसीई) इंस्टेंस बनाते समय, इंस्टेंस टाइप को e2-standard-2 पर और बूट डिस्क के साइज़ को बदलकर 20 जीबी करें. आप सब कुछ डिफ़ॉल्ट के तौर पर छोड़ सकते हैं, लेकिन "एचटीटीपी ट्रैफ़िक को अनुमति दें" चुनना न भूलें और "HTTPs ट्रैफ़िक को अनुमति दें" चुनें, क्योंकि हम Magento के वेब इंटरफ़ेस का इस्तेमाल करेंगे.

इससे, मशीन-टाइप e2-standard-2 मिलता है, जो शेयर किया गया कोर इंस्टेंस नहीं है और इसमें 2vCPU, 8 जीबी रैम, और डिस्क में 20 जीबी जगह है.

ऑपरेटिंग सिस्टम Debian 10 है. इंस्टेंस बनाने में एक या दो मिनट लग सकते हैं.

इसके बन जाने के बाद, 'एसएसएच' पर क्लिक करके लॉग इन करें Cloud Console में जाकर:

4bf915ef8d37c942.png

इससे एक नई ब्राउज़र विंडो खुल जाएगी और आपको किसी टर्मिनल में डाल दिया जाएगा.

ज़रूरी सॉफ़्टवेयर इंस्टॉल करें

Magento को चलाने से पहले, Magento को कुछ ज़रूरी सॉफ़्टवेयर इंस्टॉल करना होगा. विशेष रूप से, आप PHP, Elastic, MySQL, और Apache को इंस्टॉल करेंगे, जैसा कि नीचे बताया गया है.

  1. कुछ ज़रूरी पैकेज इंस्टॉल करें.
sudo apt update

sudo apt -y install lsb-release apt-transport-https ca-certificates wget git screen composer google-cloud-sdk-spanner-emulator gcc
  1. Magento के लिए ज़रूरी PHP मॉड्यूल इंस्टॉल करें.
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

sudo apt update

sudo apt -y install php7.4-fpm php7.4-common php7.4-mysql php7.4-gmp php7.4-curl php7.4-intl php7.4-mbstring php7.4-xmlrpc php7.4-gd php7.4-xml php7.4-cli php7.4-zip php7.4-bcmath php7.4-soap php7.4-grpc
  1. Elasticsearch इंस्टॉल करें और सेवा शुरू करें
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list

sudo apt update && sudo apt -y install elasticsearch

echo "-Xms1g
-Xmx1g" | sudo tee /etc/elasticsearch/jvm.options.d/jvm.options

sudo systemctl start elasticsearch.service
  1. MySQL इंस्टॉल करें

डिफ़ॉल्ट Magento स्कीमा को इंस्टॉल करने के लिए, MySQL इंस्टॉल किया जा रहा है. बाद में, हार्बरब्रिज का इस्तेमाल करके स्कीमा को Spanner में माइग्रेट किया जाएगा.

wget https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb

sudo dpkg -i mysql-apt-config*

ऊपर दिए गए dpkg निर्देश से, MySQL 5.7 सर्वर को इंस्टॉल करने के लिए एक इंटरैक्टिव प्रॉम्प्ट दिखेगा. विकल्प चुनें:

  • MySQL सर्वर और क्लस्टर
  • mysql-5.7
  • ठीक है

a018bfc2ee00bdf5.png 1a126e452ca7312e.png ae39c6f4bbe3be74.png

sudo apt update && sudo apt -y install mysql-server
# You will be prompted to enter a root password
  1. Apache2 इंस्टॉल करें
sudo apt -y install apache2

sudo a2enmod proxy_fcgi rewrite

Magento2 को इंस्टॉल और कॉन्फ़िगर करें

Magento Commerce Cloud प्रोजेक्ट में एक डेटाबेस स्कीमा और सेवाएं शामिल होती हैं. इनकी मदद से, Magento की साइट और स्टोर को पूरी तरह ऐक्सेस किया जा सकता है.

कंपोज़र का इस्तेमाल करके इंस्टॉल करने के लिए, Magento के दिए गए निर्देशों का पालन करके, इसे आसानी से इंस्टॉल और चलाया जा सकता है:

  1. कंपोज़र का इस्तेमाल करके Magento का 2.4.2 वर्शन इंस्टॉल करें. Magento 2 के लिए कंपोज़र का 1.x वर्शन होना ज़रूरी है. इस वर्शन के साथ काम करने की सुविधा को बंद किए जाने के बारे में, आपको कुछ चेतावनियां दिख सकती हैं.
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.2 magento2
  1. फ़ोल्डर की अनुमतियां सेट करें
cd magento2

find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +

find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +
  1. नीचे दिए गए कॉन्टेंट के साथ /etc/apache2/sites-available/magento.conf को बनाकर Magento वर्चुअल होस्ट को कॉन्फ़िगर करें.
sudo nano /etc/apache2/sites-available/magento.conf

<VirtualHost *:80>
        ServerAdmin admin@local-magento.com
        DocumentRoot /var/www/html/magento/

        <Directory /var/www/html/magento/>
                Options Indexes FollowSymlinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        <FilesMatch \.php$>
               SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
        </FilesMatch>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  1. सिमलिंक बनाएं और apache2 को रीस्टार्ट करें.
cd ~/magento2
sudo ln -s $(pwd) /var/www/html/magento 
sudo ln -s /etc/apache2/sites-available/magento.conf  /etc/apache2/sites-enabled/magento.conf
sudo rm /etc/apache2/sites-enabled/000-default.conf

sudo systemctl restart apache2
  1. MySQL में Magento के लिए, डेटाबेस और उपयोगकर्ता बनाएं
export ROOT_PASSWORD="<root password from installation>"
export GCE_INSTANCE_IP="<GCE instance IP>"
mysql -uroot -p$ROOT_PASSWORD -e "create database magento"

bin/magento sampledata:deploy

bin/magento setup:install --base-url=http://$GCE_INSTANCE_IP/ --db-host=localhost \
--db-name=magento --db-user=root --db-password=$ROOT_PASSWORD --admin-firstname=admin \
--admin-lastname=demo --admin-email=good@example.com --admin-user=admin \
--admin-password=magento123 --language=en_US --currency=USD --timezone=America/Chicago \
--use-rewrites=1

sudo chown -R :www-data ~/magento2/. 
  1. अपना स्थानीय फ़ाइल फ़ोल्डर सत्यापित करें यह सत्यापित करने के लिए कि स्थानीय वातावरण सर्वर को होस्ट कर रहा है, इंस्टॉल आदेश में पास किए गए बेस यूआरएल का उपयोग करके स्टोर ऐक्सेस करें. इस उदाहरण के लिए, इन यूआरएल फ़ॉर्मैट का इस्तेमाल करके, स्थानीय Magento स्टोर को ऐक्सेस किया जा सकता है:
  • http://&lt;GCEexternalIP&gt;/
  • http://&lt;GCEexternalIP&gt;/&lt;adminuri&gt;

GCEexternalIP को Cloud Console में देखा जा सकता है:

3947f1164e1d5409.png

एडमिन पैनल का यूआरआई बदलने के लिए, इस निर्देश का इस्तेमाल करके उसे ढूंढें:

php bin/magento info:adminuri
  1. पूरे पेज की कैश मेमोरी बंद करें. डेवलपमेंट के मकसद से, Magento2 की पूरी पेज कैश मेमोरी को बंद किया जा सकता है. इससे, स्पैनर में मौजूद डेटा में बदलाव किया जा सकता है और उसे वेबसाइट पर दिखाया जा सकता है. इससे कैश मेमोरी में सेव की गई वैल्यू पर कोई असर नहीं पड़ता.
php bin/magento cache:disable full_page

स्पैनर सेटअप करें

स्पैनर एम्युलेटर इंस्टॉल करना

Cloud SDK एक लोकल, इन-मेमोरी एम्युलेटर उपलब्ध कराता है. इससे आप GCP प्रोजेक्ट या बिलिंग खाता बनाए बिना, अपने ऐप्लिकेशन मुफ़्त में डेवलप और टेस्ट कर सकते हैं. एम्युलेटर, डेटा को सिर्फ़ मेमोरी में सेव करता है. इसलिए, रीस्टार्ट होने पर डेटा, स्कीमा, और कॉन्फ़िगरेशन के साथ-साथ पूरी स्थिति मिट जाती है. एम्युलेटर, स्पैनर प्रोडक्शन सर्विस की तरह ही एपीआई उपलब्ध कराता है. साथ ही, इसे लोकल डेवलपमेंट और टेस्टिंग के लिए बनाया गया है, न कि प्रोडक्शन डिप्लॉयमेंट के लिए.

एम्युलेटर के इंस्टॉलेशन, इस्तेमाल, और डिप्लॉयमेंट के बारे में ज़्यादा जानने के लिए, कृपया नीचे दिए गए लिंक का इस्तेमाल करें:

स्पैनर एम्युलेटर का इस्तेमाल करना

# Set up a new configuration to use the emulator
gcloud config configurations create emulator
gcloud config set auth/disable_credentials true
gcloud config set project magento
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/

# Start emulator in a screen session
screen -S magento
gcloud emulators spanner start &
gcloud spanner instances create magento-instance --config=emulator-config --description='Magento Instance' --nodes=1

# Detach from screen 
ctrl+a+d

export SPANNER_EMULATOR_HOST=localhost:9010

Magento MySQL को Spanner में माइग्रेट करें

Spanner को इंटिग्रेट करने की प्रक्रिया पर शुरू करने से पहले, हम HarbourBridge नाम के टूल का इस्तेमाल करके, उस MySQL डेटाबेस को इस्तेमाल करेंगे जिसे ऊपर दिए गए Magento इंस्टॉलेशन के ज़रिए बनाया गया था.

हार्बरब्रिज अपने-आप काम करने वाला एक वर्कफ़्लो देता है, जिसकी मदद से मौजूदा MySQL या PostgreSQL डेटाबेस के कॉन्टेंट को Spanner में लोड किया जाता है. इसके लिए किसी भी मेनिफ़ेस्ट या डेटा मैप को लिखने की ज़रूरत नहीं होती. इसके बजाय, यह सोर्स डेटाबेस को इंपोर्ट करता है, एक स्पैनर स्कीमा बनाता है, सोर्स डेटाबेस के डेटा से भरा एक नया स्पैनर डेटाबेस बनाता है, और पूरी जानकारी वाली आकलन रिपोर्ट जनरेट करता है. हार्बरब्रिज को, आकलन के मकसद से कुछ दस जीबी तक के डेटाबेस लोड करने के लिए बनाया गया है, न कि पूरी तरह से माइग्रेशन के लिए.

हार्बरब्रिज बूटस्ट्रैप, मौजूदा MySQL या PostgreSQL सोर्स डेटाबेस का इस्तेमाल करके Spanner पर शुरुआती स्टेज माइग्रेशन की सुविधा देता है, ताकि आप तेज़ी से काम शुरू कर सकें और Spanner पर काम कर सकें. यह स्पैनर के लिए कुल माइग्रेशन-फ़िटनेस स्कोर के साथ एक आकलन रिपोर्ट जनरेट करती है. साथ ही, टाइप मैपिंग का टेबल-दर-टेबल विश्लेषण और सोर्स डेटाबेस में इस्तेमाल की जाने वाली उन सुविधाओं की सूची भी जनरेट करती है जो स्पैनर के साथ काम नहीं करतीं.

हार्बरब्रिज का इस्तेमाल स्पैनर एम्युलेटर के साथ या सीधे स्पैनर इंस्टेंस के साथ किया जा सकता है.

HarbourBbridge README में शामिल है एक स्पैनर इंस्टेंस के साथ टूल का इस्तेमाल करने के लिए सिलसिलेवार क्विक-स्टार्ट गाइड.

हार्बरब्रिज इंस्टॉल करें

टूल को अपनी मशीन में डाउनलोड करें और उसे इंस्टॉल करें. यह काम करे, इसके लिए golang इंस्टॉल करना ज़रूरी है. पहले से सेट अप किए बिना, नए इंस्टेंस पर सभी ज़रूरी मॉड्यूल इंस्टॉल करने में कुछ समय लग सकता है.

# Install golang
cd ~
wget https://golang.org/dl/go1.17.2.linux-amd64.tar.gz
sudo tar -zxvf go1.17.2.linux-amd64.tar.gz -C /usr/local
rm go1.17.2.linux-amd64.tar.gz

echo 'export GOROOT=/usr/local/go' | sudo tee -a /etc/profile
echo 'export PATH=/usr/local/go/bin:$HOME/go/bin:$PATH' | sudo tee -a /etc/profile
source /etc/profile

# Install harbourbridge
git clone https://github.com/cloudspannerecosystem/harbourbridge
cd harbourbridge
go run github.com/cloudspannerecosystem/harbourbridge help

डेटा माइग्रेट करने की सुविधा

Magento डेटाबेस को स्पैनर में माइग्रेट करने के लिए, नीचे दिए गए कमांड का इस्तेमाल करें:

mysqldump --user='root' --password=$ROOT_PASSWORD magento | go run github.com/cloudspannerecosystem/harbourbridge -driver=mysqldump -dbname=magento

spanner-cli टूल को सेट अप करना

go install github.com/cloudspannerecosystem/spanner-cli@latest

3. Magento को Spanner के साथ काम करने के लिए बदलें

अब हम Magento पर काम कर रहे हैं और Magento के डेटाबेस की मदद से बनाया गया Spanner इंस्टेंस माइग्रेट हो गया है. इसलिए, हम Magento में बदलाव करने पर काम करेंगे, ताकि वह Spanner में सेव किए गए डेटा के साथ काम कर सके.

Magento इंस्टॉलेशन को बदलने के लिए, यह तरीका अपनाएं:

  • magento-spanner-port प्रोजेक्ट का क्लोन बनाएं
  • कनेक्शन को स्पैनर में बदलना
  • पुष्टि करना कि कैटलॉग की जानकारी, स्पैनर से अपने-आप भर जाती है

Magento प्रोजेक्ट के फ़ोर्क का क्लोन बनाएं

Magento के लिए PHP ऐप्लिकेशन कोड का क्लोन बनाएं, जिसमें नीचे बताए गए Git यूआरएल से कैटलॉग, विशलिस्ट, और कार्ट मॉड्यूल के लिए किए गए बदलाव शामिल हैं.

cd ~
git clone https://github.com/searceinc/magento-spanner-port

आपकी होम डायरेक्ट्री कुछ इस तरह दिखनी चाहिए:

$ ls
go  harbourbridge  magento-spanner-port  magento2

जहां magento2 वह कोडबेस है जिसमें हम magento-spanner-port के कोड का इस्तेमाल करके बदलाव करेंगे.

कनेक्शन को स्पैनर में बदलना

कोड में हुए बदलाव यूज़र इंटरफ़ेस (यूआई) में दिखते हैं या नहीं, यह देखने के लिए हम नीचे दिया गया तरीका अपना सकते हैं -

सैंपल लागू करने के लिए, GitHub लिंक https://github.com/searceinc/magento-spanner-port देखें.

  • google/cloud-spanner PHP क्लाइंट लाइब्रेरी ज़रूरी है
  • स्पैनर से कनेक्शन बनाने के लिए स्पैनर अडैप्टर जोड़ें.
  • स्पैनर इंस्टेंस और सर्वर जानकारी कॉन्फ़िगर करें.
  • स्पैनर में कनेक्शन लागू करने के लिए, अडैप्टर में SpannerInterface और Spanner जोड़ें.

सबसे पहले, हमें कंपोज़र का इस्तेमाल करके क्लाउड-स्पैनर PHP लाइब्रेरी इंस्टॉल करनी होगी. magento2 डायरेक्ट्री में इस कमांड को चलाएं:

cd ~/magento2
composer require google/cloud-spanner

इसके बाद, हम magento-spanner-port से स्पैनर अडैप्टर फ़ाइलों को अपने magento2 कोड बेस में जोड़ते हैं:

~/magento2$ cp -r ../magento-spanner-port/lib/internal/Magento/Framework/DB/Adapter/Spanner vendor/magento/framework/DB/Adapter/.
~/magento2$ ls -l vendor/magento/framework/DB/Adapter/Spanner
total 16
-rw-r--r-- 1 derekdowney derekdowney 10378 Nov  9 21:03 Spanner.php
-rw-r--r-- 1 derekdowney derekdowney  2948 Nov  9 21:03 SpannerInterface.php

अब $project_id, $instance, और $database के लिए स्पैनर कनेक्टिविटी की जानकारी डालने के लिए DB/Adapter/Spanner/Spanner.php फ़ाइल में बदलाव करें:

$ nano vendor/magento/framework/DB/Adapter/Spanner/Spanner.php

class Spanner implements SpannerInterface
{
    /**
     * Google cloud project id
     * @var string
     */
    private $project_id = 'magento';

    /**
     * Google cloud instance name
     * @var string
     */
    private $instance  = 'magento-instance';

    /**
     * Cloud Spanner database name
     * @var string
     */
    private $database  = 'magento';

    /**
     * Is Cloud Spanner emulator
     * @var bool
     */
    private $is_emulator = true;
...
   /**
    * Set database connection adapter
    *
    * @param \Magento\Framework\DB\Adapter\AdapterInterface $conn
    * @return $this
    * @throws \Magento\Framework\Exception\LocalizedException
    */
   public function setConnection(\Magento\Framework\DB\Adapter\AdapterInterface $conn)
   {
       $this->_conn = $conn;
       $this->_select = $this->_conn->select();
       $this->_isOrdersRendered = false;
       return $this;
   }


   /**
     * Set Cloud Spanner database connection adapter
     *
     * @return void
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    private function setSpannerConnection()
    {
        $this->_spanner_conn = new Spanner();
    }

स्पैनर अडैप्टर में बनाए गए नए कनेक्शन फ़ंक्शन का इस्तेमाल करके, अब स्पैनर से कनेक्ट करने के लिए Magento में AbstrackDB क्लास में बदलाव करें. फ़ाइल में सफ़ेद रेखाओं के बाद हरी रेखाएं जोड़ें. vendor/magento/framework/Data/Collection/AbstractDb.php देखें

$ nano vendor/magento/framework/Data/Collection/AbstractDb.php
...
use Psr\Log\LoggerInterface as Logger;
use Magento\Framework\DB\Adapter\Spanner\Spanner;
...
    protected $_conn;

    /**
     * Cloud Spanner connection
     *
     * @var \Magento\Framework\DB\Adapter\Spanner\SpannerAdapterInterface
     */
    protected $_spanner_conn;
...
       if ($connection !== null) {
            $this->setConnection($connection);
        }
        $this->setSpannerConnection();
        $this->_logger = $logger;
...
   /**
     * Retrieve connection object
     *
     * @return AdapterInterface
     */
    public function getConnection()
    {
        return $this->_conn;
    }

   /**
     * Retrieve connection object
     *
     * @return SpannerAdapterInterface
     */
    public function getSpannerConnection()
    {
        return $this->_spanner_conn;
    }
...

कनेक्शन बन जाने के बाद, हमें डेटा फ़ेच करने के तरीके को MySQL अडैप्टर से स्पैनर अडैप्टर में बदलना होगा . Spanner से कनेक्ट करने और Spanner से डेटा फ़ेच करने के लिए, AbstrackCollection में _loadAttributes तरीके में बदलाव करें. लाल लाइन को हरे रंग की लाइनों से बदलें.

/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php देखें

$ nano ./vendor/magento/module-eav/Model/Entity/Collection/AbstractCollection.php

use Magento\Framework\Exception\LocalizedException;
use Google\Cloud\Spanner\SpannerClient;

...
               try {
                    if (is_array($selects)) {
                        $select = implode(' UNION ALL ', $selects);
                    } else {
                        $select = $selects;
                    }
                   $values = $this->getConnection()->fetchAll($select);
                   $con = $this->getSpannerConnection();

                    /**
                     * Cloud Spanner follows strict type so cast the columns in common type
                     */
                    $select = $con->addCast($select, "`t_d`.`value`", 'string');
                    $select = $con->addCast($select, "`t_s`.`value`", 'string');
                    $select = $con->addCast($select, "IF(t_s.value_id IS NULL, t_d.value, t_s.value)", 'string');
                    
                    $values = $con->fetchAll($select);

...

पुष्टि करना कि कैटलॉग की जानकारी, स्पैनर से अपने-आप भर जाती है

हो गया! अब ब्राउज़र में Magento इंस्टॉल पर जाएं और देखें कि डेटा लोड हो रहा है या नहीं.

उदाहरण के लिए, स्मार्टवॉच की सूची के लिए यहां दी गई एंट्री हैं:

13b54ba4482408fc.png

स्पैनर में किसी एक उत्पाद के लिए टर्मिनल के ज़रिए स्पैनर डेटा में बदलाव करें और स्पैनर में बदलाव की पुष्टि करने के लिए टर्मिनल के ज़रिए डेटा की क्वेरी करें.

$ spanner-cli -pmagento -i magento-instance -d magento
spanner> SELECT * FROM catalog_product_entity_varchar WHERE value LIKE "Aim Analog%";
+----------+--------------+----------+-----------+--------------------+
| value_id | attribute_id | store_id | entity_id | value              |
+----------+--------------+----------+-----------+--------------------+
| 390      | 73           | 0        | 36        | Aim Analog Watch |
+----------+--------------+----------+-----------+--------------------+
1 rows in set (80.711542ms)

spanner> UPDATE catalog_product_entity_varchar SET value = "Aim Analog Spanner" WHERE value_id=390;
Query OK, 1 rows affected (0.19 sec)

spanner> SELECT * FROM catalog_product_entity_varchar WHERE value_id=390;
+----------+--------------+----------+-----------+--------------------+
| value_id | attribute_id | store_id | entity_id | value              |
+----------+--------------+----------+-----------+--------------------+
| 390      | 73           | 0        | 36        | Aim Analog Spanner |
+----------+--------------+----------+-----------+--------------------+
1 rows in set (80.711542ms)

अब स्क्रीन को फिर से लोड करके इस बात की पुष्टि करें कि स्मार्टवॉच का नाम बदलकर "ऐम ऐनालॉग स्पैनर" कर दिया गया है जिसे स्पैनर टर्मिनल के ज़रिए अपडेट किया जाता है.

63a9c7b065c7051f.png

4. बधाई हो

बधाई हो, आपने Spanner के साथ काम करने के लिए Magento के कैटलॉग मॉड्यूल को कनेक्ट कर लिया है! यह पूरी तरह से इंटिग्रेशन नहीं है, लेकिन अब आप Spanner इंस्टेंस से कनेक्ट किए गए Magento जैसे PHP ऐप्लिकेशन को पाने के लिए एलिमेंट के बारे में जानते हैं.

साफ़ किया जा रहा है

POC का सेटअप पूरा होने और पुष्टि हो जाने के बाद, हो सकता है कि आप इस प्रोसेस के दौरान बनाए गए GCP संसाधनों को मिटाना चाहें. अगर आपने एम्युलेटर के बजाय, किसी Cloud Spanner का इस्तेमाल करने का फ़ैसला किया है, तो इसमें Compute Engine वर्चुअल मशीन के साथ-साथ Cloud Spanner इंस्टेंस शामिल होगा.

आगे क्या करना है?

यह स्पैनर पीओसी का सिर्फ़ एक प्रोटोटाइप मॉडल है.

अगर आपको इस कोडलैब में स्पैनर और टेक्नोलॉजी के साथ काम करने के बारे में ज़्यादा जानना है, तो यहां कुछ और संसाधन दिए गए हैं: